⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quasinewton.m

📁 求解非线性方程组的延拓法
💻 M
字号:
%文件名:QuasiNewton.m
 function root=QuasiNewton(myfun,x,tol,N)
% 功能:Broyden秩1拟牛顿法求解非线性方程组
% 输入:
% myfun ---- 方程函数句柄
% x    ---- 初始迭代点
% tol(可选)-精度要求(默认是1e-4) 
% Nmax(可选)-最大迭代次数(默认100次)
% 输出:
% root--- 解向量

if nargin<4; N=100; end
    if nargin<3 | isempty(tol)
        tol=1e-4;
    end
n=length(x);
if size(x,1)==1
    x=x';
end
h=1e-4;
B0=zeros(n);
B1=zeros(n);
f0=feval(myfun,x);
for i=1:n
    temp=x(i);
    x(i)=x(i)+h;
    f1=feval(myfun,x);
    B0(:,i)=(f1-f0)/h;
    x(i)=temp;
end
dx=B0\(-f0);
k=0;

while norm(dx)>tol & k<N
    x1=x+dx;
    s=dx;
    f1=feval(myfun,x1);
    y=f1-f0;
    B1=B0+(y-B0*s)*s'/(s'*s);
    B0=B1;
    f0=f1;
    x=x1;
    dx=B0\(-f0);
    k=k+1;
end
root=x;
if k==N
    warning('已达最大迭代次数');
end
fprintf('迭代次数为:k=%d\n',k);

⌨️ 快捷键说明

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