📄 quasinewton.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 + -