broyden方法求解非线性方程组的matlab实现
Broyden 方法求解非线性方程组的 Matlab 实现注:matlab 代码来自网络,仅供学习参考。 1. 把以下代码复制在一个.m 文件上 function [sol, it_hist, ierr] = brsola(x,f,tol, parms) % Broyden s solver, globally convergent % solver for f(x) = 0, Armijo rule, one vector storage % % This code comes with no guarantee or warranty of any kind. % % function [sol, it_hist, ierr] = brsola(x,f,tol,parms) % % s: % initial iterate = x % function = f % tol = [atol, rtol] relative/absolute % error tolerances for the nonlinear iteration % parms = [maxit, maxdim] % maxit = maxmium number of nonlinear iterations % default = 40 % maxdim = maximum number of Broyden iterations % before restart, so maxdim-1 vectors are % stored % default = 40 % % output: % sol = solution % it_hist(maxit,3) = scaled l2 norms of nonlinear residuals % for the iteration, number function uations, % and number of steplength reductions % ierr = 0 upon successful termination % ierr = 1 if after maxit iterations % the termination criterion is not satsified. % ierr = 2 failure in the line search. The iteration % is terminated if too many steplength reductions % are taken. % % % internal parameter: % debug = turns on/off iteration statistics display as% the iteration progresses % % alpha = 1.d-4, parameter to measure sufficient decrease % % maxarm = 10, maximum number of steplength reductions before % failure is reported% % set the debug parameter, 1 turns display on, otherwise off % debug=1; % % initialize it_hist, ierr, and set the iteration parameters % ierr = 0; maxit=40; maxdim=39; it_histx=zeros(maxit,3); maxarm=10; % if nargin == 4maxit=parms(1); maxdim=parms(2)-1; end rtol=tol(2); atol=tol(1); n = length(x); fnrm=1; itc=0; nbroy=0; % % uate f at the initial iterate % compute the stop tolerance % f0=f(f,x); fc=f0; fnrm=norm(f0)/sqrt(n); it_hist(itc+1)=fnrm; it_histx(itc+1,1)=fnrm; it_histx(itc+1,2)=0; it_histx(itc+1,3)=0; fnrmo=1; stop_tol=atol + rtol*fnrm; outstat(itc+1, :) = [itc fnrm 0 0]; % % terminate on entry? % if fnrm = (1 - lambda*alpha)*fnrmo if iarm==0