• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

牛顿迭代法解非线性方程组(MATLAB版) - JerryLeo

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

牛顿迭代法解非线性方程组(MATLAB版)

牛顿迭代法,又名切线法,这里不详细介绍,简单说明每一次牛顿迭代的运算:首先将各个方程式在一个根的估计值处线性化(泰勒展开式忽略高阶余项),然后求解线性化后的方程组,最后再更新根的估计值。下面以求解最简单的非线性二元方程组为例(平面二维定位最基本原理),贴出源代码:

1、新建函数fun.m,定义方程组

 

1 function f=fun(x);
2 %定义非线性方程组如下
3 %变量x1 x2
4 %函数f1 f2
5 syms x1 x2
6 f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);
7 f2 = sqrt(x1^2 + (x2-4)^2)-5;
8 f=[f1 f2];

 

2、新建dfun.m,求出一阶微分方程

 

1 function df=dfun(x);
2 f=fun(x);
3 df=[diff(f,\'x1\');diff(f,\'x2\')]; %雅克比矩阵

 

3、建立newton.m,执行牛顿迭代过程

 

 1 clear;clc
 2 format;
 3 x0=[0 0];   % 迭代初始值
 4 eps = 0.00001;  % 定位精度要求
 5 for i = 1:10
 6     f = double(subs(fun(x0),{\'x1\' \'x2\'},{x0(1) x0(2)}));
 7     df = double(subs(dfun(x0),{\'x1\' \'x2\'},{x0(1) x0(2)}));  % 得到雅克比矩阵
 8     x = x0 - f/df;
 9     if(abs(x-x0) < eps)
10         break;
11     end
12     x0 = x; % 更新迭代结果
13 end
14 disp(\'定位坐标:\');
15 x
16 disp(\'迭代次数:\');
17 i

 

结果如下:

定位坐标:

x =


    0.0000   -1.0000

迭代次数:

i =


     4

 




 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab机器学习库发布时间:2022-07-18
下一篇:
MATLAB处理线性数据的demo代码发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap