1、x1)以此类推,得到一个数列如果迭代格式产生的数列收敛,则迭代法收敛,得到的收敛值即为方程的根。2、 牛顿迭代法:用迭代法解非线性方程总可以构造 x=fx)=xkx)fx)即迭代法为牛顿迭代法。3、 弦截法:用牛顿法求函数的倒数使用不方便,则可以用代替,则即为弦截法1.2最小二乘法在研究两个变量之间的关系时,可以用回归分析的方法进行分析。当确定了描述两个变量之间的回归模型后,就可以使用最小二乘法估计模型中的参数,进而建立经验方程。简单地说,最小二乘的思想就是要使得观测点和估计点的距离的平方和达到最小。里的“二乘”指的是用平方来度量观测点粤估计点的远近在古汉语中“平方”称为“二乘”),“最小”指
2、的是参数的估计值要保证各个观测点与估计点的距离的平方和达到最小。2算法分析2.1功能分析2.1.1非线性方程的迭代解法用三个函数来实现非线性方程的三种解法,三种方法包括设计一个迭代格式x=f1调用函数FYiban(double x进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为计算结果2、 用牛顿法解非线性方程:编写函数FNewton(double x计算,然后编写函数void Newton(实现,其中调用函数FNewton(double x进行循环迭代,直到得出的结果与前一个结果的差值的绝对值小于给定的值0.00001,即为方程的根3、 用弦截法解非线性
3、方程:编写函数FXuanjie(double q,double r计算原方程函数的导数,然后编写函数void Xuanjie(其中调用函数FXuanjie(double q,double r2.1.2最小二乘法已知数据对,求多项式使得为最小,这就是一个最小二乘问题。2.2算法分析通过上面各项功能的分析、分类、综合,按照模块化程序设计的要求,得到模块结构 k+while |x0-x|e & k1000若k/dfun(x03、根据弦截法迭代公式:x = x0 - _fxuanjie(x02.2.2最小二乘法用线性函数为例,拟合给定数据。算法描述:步骤1:输入值,及步骤2:建立法方程组步骤3:解法方
4、程组。步骤4:输出3程序设计3.1选单和主窗口设计3.1.1非线性方程的迭代解法主要的设计界面和代码#include stdio.hmath.hdouble f(double x return 2*pow(x,3-x-1。double FYiban(double x return pow(x+1/2,1.0/3double FNewton(double x return x-f(x/(6*pow(x,2-1double FXuanjie(double q,double r return q-f(q*(q-r/(f(q-f(rdouble x,x0,x1,x2,t。void Yiban( x0=
5、1.5。 t=1。 cout=0.00001 x1=FYiban(x0 t=x0-x1。 x0=x1。 printf(%.5lfn,x0 printf(一般线性迭代结果为:%.5lfnnvoid Newton(用Newton迭代过程为: x1=FNewton(x0用Newton迭代结果为:void Xuanjie( x1=1.4。用弦截法迭代过程为: x2=FXuanjie(x1,x0 t=x1-x2。 x1=x2。用弦截法迭代结果为:void main(+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+n*t
6、ttttttt &t选择用一般迭代法、牛顿法、弦截法求解方程:2*x3-x-1=0t &tta:一般迭代法ttttt &ttb:牛顿法ttttt &ttc:弦截法ttttt &ttd:三种方法 switch(c case a: Yiban( break。b Newton(c Xuanjie(d3.1.2最小二乘法#includestdlib.hvoid Print(double *a,int m,int n/输出函数 int i,j。 for(i=0。i for(j=0。j coutaij。 cout /矩阵乘积 double *c。 c=new double*m。 ci=new double
7、q。 i jq。 cij=0。 for(int x=0。 x cij=cij+aix*bxj。 Print(c,m,q return c。/double* jzdn(double *a,int m,int n /矩阵的逆 int i,j,k。 double c,*b,*t。 b=new double*m。 /动态分配空间 bi=new doublem。 t=new double*m。 ti=new doublem。 /矩阵求逆 /合并构成增广矩阵 bij=aij。 for(j=m。2*n。 if(i+m=j bij=1。 else bij=0。_求逆过程_ /输出增广矩阵 2*m。bij。n
8、/初等行变化求逆 c=bii。 for(j=i。m*2。 bij/=c。 for(j=i+1。 c=bji。 for(k=i。k bjk=bjk-c*bik。 for(i=m-1。i=0。i- for(j=i-1。jj- tij-m=bij。 return t。/double* jzzz(double *a,int m,int n /矩阵转置 c=new double*n。 ci=new doublem。 for(j=0。 /矩阵的转置 for(int k=0。 ckj=ajk。 Print(c,n,m double *a,*b,*d,*e,*f,*g,*h。 int i,j,m,n,p,q。
9、请输入矩阵a的行和列: cinm a=new double*m。 ai=new doublem。请输入矩阵a的数据: cin /完成了对矩阵a的初始赋值 请输入矩阵b的行和列:p b=new double*p。p。 bi=new doublep。请输入矩阵b的数据: /完成了对矩阵b的初始赋值_原始矩阵_ Print(a,m,n /输出系数矩阵 Print(b,p,q /输出常数矩阵系数矩阵a的转置矩阵 1 n d=jzzz(a,m,n系数矩阵a的转置矩阵与系数矩阵a的乘积所得矩阵 2 n e=jzcj(d,n,m,a,m,n系数矩阵a与其转置矩阵的乘积的逆矩阵 3 n f=jzdn(e,n,
10、n矩阵的逆n Print(f,n,n系数矩阵a的转置矩阵与常数矩阵b的乘积所得矩阵 4 n g=jzcj(d,n,m,b,p,q最小二乘解x,yn 5 h=jzcj(f,n,n,g,n,q3.2模块设计3.2.1非线性方程的迭代解法针对每一个模块给出主要的界面和代码3、 弦截法4、 主函数模块:3.2.2 最小二乘法1、输入矩阵a和bcoutb=new double*p。bi=new doublep。Print(a,m,nPrint(b,p,q2、系数矩阵a的转置矩阵1,系数矩阵a的转置矩阵与系数矩阵a的乘积所得矩阵2:int i,j。double *c。c=new double*n。ci=new doublem。for(int k=0。ckj=ajk。Print(c,n,mreturn c。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2