首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >matlab牛顿迭代法解非线性方程求解

matlab牛顿迭代法解非线性方程求解

原创
作者头像
用户4006703
发布2025-06-16 20:04:22
发布2025-06-16 20:04:22
5940
举报

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

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

代码语言:javascript
复制
function f=fun(x);
%定义非线性方程组如下
%变量x1 x2
%函数f1 f2
syms x1 x2
f1 = sqrt((x1-4)^2 + x2^2)-sqrt(17);
f2 = sqrt(x1^2 + (x2-4)^2)-5;
f=[f1 f2];

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

代码语言:javascript
复制
function df=dfun(x);
f=fun(x);
df=[diff(f,'x1');diff(f,'x2')]; %雅克比矩阵

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

代码语言:javascript
复制
 clear;clc
 format;
 x0=[0 0];   % 迭代初始值
 eps = 0.00001;  % 定位精度要求
 for i = 1:10
     f = double(subs(fun(x0),{'x1' 'x2'},{x0(1) x0(2)}));
     df = double(subs(dfun(x0),{'x1' 'x2'},{x0(1) x0(2)}));  % 得到雅克比矩阵
     x = x0 - f/df;
     if(abs(x-x0) < eps)
         break;
     end
     x0 = x; % 更新迭代结果
 end
 disp('定位坐标:');
 x
 disp('迭代次数:');
 i

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档