newtonraphson.m

来自「求解非线性方程组的NewRaphson方法」· M 代码 · 共 47 行

M
47
字号
%文件名:NewtonRaphson.m
function root = NewtonRaphson(func,x,tol,Nmax)
% 功能:Newton-Raphson方法求解非线性方程组
% 输入:
% func ---- 方程函数句柄
% x    ---- 初始迭代点
% tol(可选)-精度要求(默认是1e-4) 
% Nmax(可选)-最大迭代次数(默认100次)
% 输出:
% root--- 解向量
 
if nargin <4; Nmax=100; end
if nargin<3 | isempty(tol);  tol=1.0e-4;end
if size(x,1) == 1; x = x'; end  % x must be column vector
 
root=x;
for i = 1:Nmax
    [jac,f0] = jacobian(func,x);
    if norm(f0)< tol
        root = x;  
fprintf('迭代次数为k=%d\n',i);
return
    end
    dx = jac\(-f0);
    x = x + dx;  
  if norm(dx)<tol
        fprintf('迭代次数为k=%d\n',i);
        root = x; 
        return
    end
end
error('迭代次数过多!')
 
function [jac,f0] = jacobian(func,x)
% 返回Jacobian矩阵及 f(x).
h = 1.0e-4;
n = length(x);
jac = zeros(n);
f0 = feval(func,x);
for i =1:n
    t = x(i);
    x(i) = t + h;
    f1 = feval(func,x);
    x(i) = t;
    jac(:,i) = (f1 - f0)/h;
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?