




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一 理论背景我们先考虑线性方程,线性方程组的解便不难得出了。与线性方程相比,非线性方程问题无论是从理论上还是从计算公式上,都要复杂得多。对于一般的非线性方程,计算方程的根既无一定章程可寻也无直接法可言。例如,求解高次方程组的根,求解含有指数和正弦函数的超越方程的零点。解非线性方程或方程组也是计算方法中的一个主题。在解方程方面,牛顿(I . Newton)提出了方程求根的一种迭代方法,被后人称为牛顿算法。三百年来,人们一直用牛顿算法,改善牛顿算法,不断推广算法的应用范围。牛顿算法,可以说是数值计算方面的最有影响的计算方法。对于言程式,如果是线性函数,则它的求根是容易的。牛顿法实质上是一种线性化方
2、法,其基本思想是将非线性方程式逐步归结为某种线性方程来求解。解非线性方程组只是非线性方程的一种延伸和扩展。二 主要理论考虑方程组 其中均为多元函数。若用向量记号记, 就可写成 当,且中至少有一个是自变量 的非线性函数时,则称方程组为非线性方程组。非线性方程组求根问题是前面介绍的方程即求根的直接推广,实际上只要把单变量函数看成向量函数则可将单变量方程求根方法推广到方程组。若已给出方程组的一个近似根 将函数的分量在用多元函数泰勒展开,并取其线性部分,则可表示为 令上式右端为零,得到线性方程组 其中 称为为雅可比(Jacobi)矩阵。求解线性方程组,并记解为,则得 这就是解非线性方程组的牛顿法。三算
3、法 牛顿法主要思想是用 进行迭代 。因此首先需要算出的雅可比矩阵,再求过求出它的逆,当它达到某个精度时即停止迭代。 具体算法如下:1 首先宏定义方程组 ,确定步长和精度;2 求的雅可比矩阵;可用求出雅可比矩阵;3 求雅可比矩阵的逆;将右乘一个单位矩阵,通过单位矩阵变换实现求 的逆,用指针来存贮。4 雅可比矩阵与其逆的相乘;5 用来迭代;6 当精度大于时,重复执行25步,直到精度小于或等于停止迭代,就是最后的迭代结果。其中四代码#include #include #include #include #define f0(x1,x2) (x1+2*x2-3)#define f1(x1,x2) (2
4、*x1*x1+x2*x2-5)#define x_ 0.000001#define matrixNum 2double *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
5、); cout请输入初值:;for(i=0;i*(x+i); do p=0.0;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;ix_);cout最终迭
6、代结果为*x,*(x+1)endl; delete matrixF; delete matrixF_; getch();double *matrixF2(double *x) 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;jmatri
7、xNum;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+) / co
8、ut*(x+i)endl; cout矩阵F在*x,*(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+)*(mat
9、rixF1+i*matrixNum+j)-=*(matrixF1+j)*t; *(matrixF2+i*matrixNum+j)-=*(matrixF2+j)*t;t=*(matrixF1+1*matrixNum+1); for(i=1,j=0;jmatrixNum;j+) *(matrixF1+i*matrixNum+j)/=t; *(matrixF2+i*matrixNum+j)/=t; t=*(matrixF1+1);for(i=i,j=0;jmatrixNum;j+) *(matrixF1+j)-=*(matrixF1+i*matrixNum+j)*t; *(matrixF2+j)-=
10、*(matrixF2+i*matrixNum+j)*t; for(i=0;imatrixNum;i+) for(j=0;jmatrixNum;j+) cout*(matrixF1+i*matrixNum+j) ; coutendl; for(i=0;imatrixNum;i+) for(j=0;jmatrixNum;j+) cout*(matrixF2+i*matrixNum+j) ; coutendl;cout第y次迭代结果为*x,*(x+1)endl;getch(); return matrixF2; delete matrixF1; delete matrixF2;五算法分析及改进措施
11、牛顿法解非线性方程组是一种线性方法,即将非线性方程组以一线性方程组来近似,由此构造一种迭代格式,用以逐次逼近所求的解案。 可以证明Newton迭代至少是二阶收敛的,而且收敛速度快。因此牛顿法是解非线性方程的常且方法。 正因为Newton法思想直观自然,是最常用的,也是研究其它方法的出发点,该方法的不足恰好是其它方法研究的出发点。 首先,Newton法的每步迭代都要计算,它是由个偏导数值构造的矩阵,有些问题中每个值可能都很复杂,甚至根本无法解析地计算。当比较大时这部分是算法中耗费时机最多的,不仅如此,每步迭代还要解线性方程组,当很大时(如由离散非线性偏微方程导出的非线性方程组,可能有甚至更多),
12、其工作量很大。 其次,在许多情况下,初值要有较严格的限制,在实际应用中给出确保收敛的初值是十分困难的。非线性问题通常又是多解的,给出收敛到所需要解的初值更加困难。 再有,迭代过程中如果某一步处有奇异或几乎奇异(后者指的条件数很大),则Newton法的计算将无法进行下去。特别如果在的解处有奇异,不仅计算困难,而且问题本身也变得十分复杂,以一无元代数方程为例,这时方程产生重根。 为了克服Newton法的上述缺点,我们可以采用Newton法和参数Newton法克服前两种缺点,拟Newton法可以克服第三种缺点。 这里就拟Newton法为例叙述对牛顿法的改进我们用矩阵近似的代替,从而得到如下形式的迭代
13、法: 0,1,2,.其中Bk均为非奇异的.为了不要每次迭代都计算逆矩阵,我们设法构造直接逼近的逆矩阵,迭代公式化为 : 0,1,2,. 六根据实例分析结果对于如下非线性方程组用如上源程序运行。1输入初值为1.5 1.0 进行迭代的结果分别为: 理论值分别为: 第一次 1.5 0.75 1.5 0.75 第二次 1.4881 0.755952 1.488095 0.755952 第三次 1.48803 0.755983 1.488034 0.755983 停止迭代,最终迭代结果为1.488034 0.7559832. 输入初值为2.0 2.0 进行迭代的结果分别为: 第一次 1.83333 0.583333 第二次 1.52778 0.736111 第三次 1.4887 0.755652 第四次 1.48803 0.755983以上表明1)迭代中存在误差;这是由于求雅可比式时用差商法来近似替代了,要过一系列的运算,从而误差在所难免。由于精度x_取0.000001,已经足够小了,所以迭
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 资质维护协议书范本
- 超市专柜终止合同协议
- 贸易业务员合同协议
- 购房合同签附加协议
- 质押合同无偿合同协议
- 设备进口三方协议合同
- 《第02节 万有引力定律的应用》导学案
- 2025年金融管理专业研究生入学考试试题及答案
- 2025年空间设计师专业资格考试试卷及答案
- 模具加工附加合同协议
- 智能对话模型研究-全面剖析
- 考研英语03-12年真题译文
- 放射住培结业考试试题题库及答案
- 旅游项目开发可行性报告
- 初中期末家长会模板
- 种植业统计培训
- 期中综合模拟测试卷(含答案)-2024-2025学年统编版道德与法治七年级下册
- 人工肝个案护理
- 严重过敏反应诊断和临床管理专家共识(2025年版)解读
- GB/T 27060-2025合格评定良好实践指南
- 劳动教育智慧树知到期末考试答案章节答案2024年华中师范大学
评论
0/150
提交评论