1. 程式人生 > >Matlab 數值計算----牛頓法解非線性方程組

Matlab 數值計算----牛頓法解非線性方程組

 Newtons.m函式

function[x_star,index,it]=Newtons(fun,x,ep,it_max)
%求解非線性方程組的牛頓法,其中,fun(x)為需要求根的函式
%第一個分量是函式值,第二個分量是導數值
%x為初始向量(列向量)
% ep為精度,當 | |x(k)-x(k-1)| |<ep時,終止計算,預設值為1e-5
% it_max為最大迭代次數,預設值為100
% x_star為當迭代成功時,輸出方程的根
% 當迭代失敗時,輸出最後的迭代值
% index為指標向量,當index=1時,表明迭代成功
% 當index=0時,表明迭代失敗(迭代次數>=in+max)
% it為迭代次數
if nargin<4 it_max=100;end
if nargin<3 ep=1e-5;end
index=0;k=1;
while k<it_max
    x1=x;[f,J]=feval(fun,x);
    if abs(det(J))<ep break;end
    x=x-J\f;
    if norm(x-x1)<ep
        index=1;break;
    end
    k=k+1;
end
x_star=x;it=k;

funs.m函式(輸入任意一個非線性方程組進行測試)
function[f,J]=funs(x)
f=[x(1)^2+x(2)^2-5;(x(1)+1)*x(2)-(3*x(1)+1)];
J=[2*x(1) 2*x(2);x(2)-3 x(1)+1];

結果: