用牛顿法在Matlab中求解非线性方程组

用牛顿法在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(

我正在编写一个程序,在一个包含方程组和雅可比矩阵的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(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替换循环。因此,将求值移动到循环中。