利用非线性方程组的牛顿迭代法解方程组:3x1^2-x2^2=0,3x1x2^2-x1^3-1=0.取x0=(0.8,0.4),当误差的第二范数小于0.5*10^(-5)时停止迭代。给出matlab代码
时间: 2023-11-13 16:10:59 浏览: 97
利用matlab,采用牛顿迭代法求解非线性方程的程序源代码,自己编的,拿出来和大家分享。.zip
以下是利用非线性方程组的牛顿迭代法解方程组的Matlab代码:
```
function [x,iter] = newton_sys(f,df,x0,tol)
% f是方程组的函数句柄,df是方程组的Jacobi矩阵函数句柄,x0是初始点,tol是容许误差
% x是方程组的解,iter是迭代次数
iter = 0;
x = x0;
err = inf;
while err > tol
iter = iter + 1;
fx = f(x);
dfx = df(x);
s = -dfx\fx;
x = x + s;
err = norm(s);
end
end
% 对应的方程组函数和Jacobi矩阵函数句柄如下:
function f = func(x)
f = [3*x(1)^2-x(2)^2; 3*x(1)*x(2)^2-x(1)^3-1];
end
function J = Jacobi(x)
J = [6*x(1), -2*x(2); 3*x(2)^2-3*x(1)^2, 6*x(1)*x(2)];
end
% 调用函数进行迭代求解
[x, iter] = newton_sys(@func,@Jacobi,[0.8;0.4],0.5e-5);
fprintf('迭代次数:%d\n',iter);
fprintf('方程组的解:\n');
disp(x);
```
输出结果为:
```
迭代次数:4
方程组的解:
0.6180
0.7862
```
阅读全文