matlab多变量牛顿方法求解非线性方程组

这篇博客记录了作者通过Matlab实现牛顿法解决非线性方程组的过程,包括定义方程、计算导数矩阵、迭代求解和高斯消元法的运用。代码中设置了迭代次数和初始估计值,并详细解释了每一步操作的逻辑。最终,通过比较新旧值的误差来判断解的精度。
摘要由CSDN通过智能技术生成

 这本是个作业,但因为各种原因及出错,这个简单的代码写了2个多小时,内心不爽。因此写下博客记录。

clear;
clc;
syms u v
f1 = 6 * u^3 + u * v - 3 * v^3 - 4;
f2 = u^2- 18 * u * v^2 + 16 * v^3 + 1 ;
f=[f1 f2 ];
df0=[diff(f,u);diff(f,v)];
df = df0.';
x0=[-1 -1]; %%%As shown in the book, the solution we find by Newton's way is based on the first estimate
N=200;
% 求解
for i=1:N; % 运算次数
    p=subs(f,{u ,v },{x0(1) x0(2)});% 为subs函数的赋值运算的矩阵
    q=subs(df,{u ,v },{x0(1) x0(2) });% 为subs函数的赋值运算 2*2的矩阵
    x =x0 - grass(q,p);% 得到的一组新数值矩阵 理解为 新的x0
   if norm(x-x0)<eps
      break;
   end % 条件判断 得出的新值是否满足精确度的要求 可以求x矩阵元素平方和的开根
   x0 = vpa(x)% 当条件满足 输出求得的x0
end
x = vpa(x0)

上述的N其实可以根据需要调整,而且初始估计也是对于不同的问题而不同的

其中调用的grass()函数为朴素的高斯消元法:
function xc = grass(a,b)
n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值