非线性方程组的数值算法研究毕业论文(编辑修改稿)内容摘要:

们记作为  1kx ,就可以得到:          1 139。 k k k kxx x F x F x  ( k=0,1,2, .....)。 ( 5) 这就是我们所说的求解非线性方程组( 2)的牛顿法。 下面我们来简单介绍非线性方程组求解牛顿法的算法: 从 上 面的 实例 我们 可 以看 得出 牛顿 法求 解非 线 性方 程的 主要 理论 是 用 8          11 39。 k k k kx x F x F x  在( k=0,1,2, ...)的基础上进行迭代计算。 我们这时所要做的就是计算出 F( x)的雅克比矩阵 39。 Fx,通过 39。 Fx得到它的逆  139。 Fx ,直到达到所需要的精度  _xk的范围内才停止迭代。 牛顿法的算法 牛顿法算法如下: 1.首先我们把所要求解的非线性方程组定义为 Fx,并为之确定精度  _xk。 2.把 Fx转化为雅克比矩阵,得到 39。 Fx。 求解方法如下:      111 , . . . , _ , . . . , , . . . , , . . . , . . . , , . . . , _i j n i j ni j njf x x x x f x x xf x x xxx 3.重复第二步方法,求解 39。 Fx雅克比矩阵的逆  139。 Fx。 另外把 39。 Fx乘以单位矩阵1001,我们可以用单位矩阵转换求解 39。 Fx的逆用来保存。 4. 39。 Fx与 39。 Fx的相乘 5.再用          1 139。 k k k kxx x F x F x  ( k=0,1,2, .....)来迭代。 ,其精度 __ix k x k 时,我们需要重复 2— 5 次,一直使精度达到最小(精度 _xk )时停止迭代,最后的迭代结果为 _ixk。          221111_ , . . . ,i i i ii n nx k x x x x   牛顿法代码程序编程 最后我们介绍代码的编程: include include include include define f0(x1,x2) (x1+2*x23) 9 define f1(x1,x2) (2*x1*x1+x2*x25) define x_ define matrixNum 2 double *matrixF2(double *x)。 int y=0。 void main() { int i,j,n。 double p,*x。 double *b。 double *matrixF。 //矩阵 F double *matrixF_。 //矩阵 F 的雅可比矩阵的逆 b=(double *)malloc(matrixNum)。 matrixF=(double *)malloc(matrixNum)。 matrixF_=(double *)malloc(matrixNum*matrixNum)。 cout请输入初值 :。 for(i=0。 imatrixNum。 i++) cin*(x+i)。 do { p=。 for(i=0。 imatrixNum。 i++) *(b+i)=0。 *matrixF=f0(*x,*(x+1))。 *(matrixF+1)=f1(*x,*(x+1))。 matrixF_=matrixF2(x)。 for(i=0。 imatrixNum。 i++) { for(j=0。 jmatrixNum。 j++) *(b+i)+=*(matrixF_+i*matrixNum+j)*(*(matrixF+j))。 *(x+i)=*(x+i)*(b+i)。 cout*(x+i)。 } coutendl。 for(i=0。 imatrixNum。 i++) p+=pow(*(b+i),2)。 y++。 }while(sqrt(p)x_)。 cout停 止迭代,最终迭代结果为 *x39。 ,39。 *(x+1)endl。 delete [] matrixF。 delete [] matrixF_。 getch()。 } double *matrixF2(double *x) 10 { int i,j。 double t。 double *matrixF1。 //矩阵 F 的雅可比矩阵 double *matrixF2。 //矩阵 F 的雅可比矩阵的逆 matrixF1=(double *)malloc(matrixNum*matrixNum)。 matrixF2=(double *)malloc(matrixNum*matrixNum)。 for(i=0。 imatrixNum。 i++) for(j=0。 jmatrixNum。 j++) if(i==j) *(matrixF2+i*matrixNum+j)=1。 else *(matrixF2+i*matrixNum+j)=0。 *matrixF1=(f0((*x+x_),*(x+1))f0(*x,*(x+1)))/x_。 *(matrixF1+1)=(f0(*x,(*(x+1)+x_))f0(*x,*(x+1)))/x_。 *(matrixF1+2)=(f1((*x+x_),*(x+1))f1(*x,*(x+1)))/x_。 *(matrixF1+3)=(f1(*x,(*(x+1)+x_))f1(*x,*(x+1)))/x_。 //for(i=0。 imatrixNum。 i++) // cout*(x+i)endl。 cout矩阵 F 在 [*x39。 ,39。 *(x+1)]的雅可比矩阵 endl。 for(i=0。 imatrixNum。 i++) { for(j=0。 jmatrixNum。 j++) cout*(matrixF1+i*matrixNum+j)。 coutendl。 } //求矩阵 F 的雅可比矩阵的逆 t=*matrixF1。 for(i=0,j=0。 jmatrixNum。 j++) { *(matrixF1+i*matrixNum+j)/=t。 *(matrixF2+i*matrixNum+j)/=t。 } t=*(matrixF1+1*matrixNum)。 for(i=1,j=0。 jmatrixNum。 j++) { *(matrixF1+i*matrixNum+j)=*(matrixF1+j)*t。 *(matrixF2+i*matrixNum+j)=*(matrixF2+j)*t。 } t=*(matrixF1+1*matr。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。