用牛顿法在Matlab中求解非线性方程组
我正在编写一个程序,在一个包含方程组和雅可比矩阵的m文件上实现牛顿方法用牛顿法在Matlab中求解非线性方程组,matlab,nonlinear-functions,newtons-method,Matlab,Nonlinear Functions,Newtons Method,我正在编写一个程序,在一个包含方程组和雅可比矩阵的m文件上实现牛顿方法 function x = fun(x,mode) % compute F(x) if mode == 1 x = [ 3*x(1)^2 + 5*x(2)^2 + x(2) - 1; x(1)^2 - 6*x(1) - 3*x(2) - 2]; end % compute the Jacobian DF(x) if mode == 2 x = [ 1*x(
function x = fun(x,mode)
% compute F(x)
if mode == 1
x = [ 3*x(1)^2 + 5*x(2)^2 + x(2) - 1;
x(1)^2 - 6*x(1) - 3*x(2) - 2];
end
% compute the Jacobian DF(x)
if mode == 2
x = [ 1*x(1) 3*x(2)+1; 6*x(1)-2 -2];
end
return;
这是我开始的计算文件:
results.stat = 0;
if nargin == 3
epsilon = param.epsilon;
nMax = param.nMax;
else
epsilon = 1.0e-8;
nMax = 500;
end
F = fun(x,1)
J = fun(x,2)
end
for k = 1:nMax
dx = -J\f
x=x+dx
我最终想检查收敛性并保存误差范数,还想检查在没有收敛的情况下是否达到最大迭代次数。到目前为止这看起来还可以吗 这看起来应该可以正常工作,除了一些缺失/错位的端点,你有什么具体问题吗?你展示的雅可比矩阵不是你提供的函数的雅可比矩阵。不,这不会以预期的方式工作,因为你只在循环外对函数值和导数求值一次。将发生的情况是,添加的dx总是相同的,因此可以用公式x=x-n*J\f替换循环。因此,将求值移动到循环中。