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

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

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

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,求出一阶微分方程

function df=dfun(x);

f=fun(x);

df=[diff(f,'x1');diff(f,'x2')]; %雅克比矩阵

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

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

结果如下:

定位坐标: x =     0.0000   -1.0000 迭代次数: i =      4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值