Broyden方法求解非线性方程组的Matlab实现
Broyden方法求解非线性方程组的Matlab实现
注:matlab代码来自网络,仅供学习参考。
1. 把以下代码复制在一个.m文件上
function [sol, it_hist, ierr] = brsola(x,f,tol, parms) % Broyden's Method 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) %
% inputs:
% 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 evaluations, % 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 == 4
maxit=parms(1); maxdim=parms(2)-1;
end
rtol=tol(2); atol=tol(1); n = length(x); fnrm=1; itc=0; nbroy=0; %
% evaluate f at the initial iterate
% compute the stop tolerance
%
f0=feval(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 < stop_tol
sol=x;
return
end
%
% initialize the iteration history storage matrices
%
stp=zeros(n,maxdim);
stp_nrm=zeros(maxdim,1);
lam_rec=ones(maxdim,1);
%
% Set the initial step to -F, compute the step norm
%
lambda=1;
stp(:,1) = -fc;
stp_nrm(1)=stp(:,1)'*stp(:,1);
%
% main iteration loop
%
while(itc < maxit)
%
nbroy=nbroy+1;
%
% keep track of successive residual norms and
% the iteration counter (itc)
%
fnrmo=fnrm; itc=itc+1;
%
% compute the new point, test for termination before
% adding to iteration history
%
xold=x; lambda=1; iarm=0; lrat=.5; alpha=1.d-4;
x = x + stp(:,nbroy);
fc=feval(f,x);
fnrm=norm(fc)/sqrt(n);
ff0=fnrmo*fnrmo; ffc=fnrm*fnrm; lamc=lambda;
%
%
% Line search, we assume that the Broyden direction is an % ineact Newton direction. If the line search fails to
% find sufficient decrease after maxarm steplength reductions % brsola returns with failure.
%
% Three-point parabolic line search
%
while fnrm >= (1 - lambda*alpha)*fnrmo && iarm < maxarm % lambda=lambda*lrat;
if iarm==0
lambda=lambda*lrat;
else
lambda=parab3p(lamc, lamm, ff0, ffc, ffm);
end
lamm=lamc; ffm=ffc; lamc=lambda;
x = xold + lambda*stp(:,nbroy);
fc=feval(f,x);
fnrm=norm(fc)/sqrt(n);
ffc=fnrm*fnrm;
iarm=iarm+1;
end
%
% set error flag and return on failure of the line search %
if iarm == maxarm
disp('Line search failure in brsola ')
ierr=2;
it_hist=it_histx(1:itc+1,:);
sol=xold;
return;
end
%
% How many function evaluations did this iteration require? %
it_histx(itc+1,1)=fnrm;
it_histx(itc+1,2)=it_histx(itc,2)+iarm+1;
if(itc == 1) it_histx(itc+1,2) = it_histx(itc+1,2)+1; end; it_histx(itc+1,3)=iarm;
%
% terminate?
%
if fnrm < stop_tol
sol=x;
rat=fnrm/fnrmo;
outstat(itc+1, :) = [itc fnrm iarm rat];
it_hist=it_histx(1:itc+1,:);
% it_hist(itc+1)=fnrm;
if debug==1
disp(outstat(itc+1,:))
end
return
end
%
%
% modify the step and step norm if needed to reflect the line % search
%
lam_rec(nbroy)=lambda;
if lambda ~= 1
stp(:,nbroy)=lambda*stp(:,nbroy);
stp_nrm(nbroy)=lambda*lambda*stp_nrm(nbroy);
end
%
%
% it_hist(itc+1)=fnrm;
rat=fnrm/fnrmo;
outstat(itc+1, :) = [itc fnrm iarm rat];
if debug==1
disp(outstat(itc+1,:))
end
%
%
% if there's room, compute the next search direction and step norm and
% add to the iteration history
%
if nbroy < maxdim+1
z=-fc;
if nbroy > 1
for kbr = 1:nbroy-1
ztmp=stp(:,kbr+1)/lam_rec(kbr+1);
ztmp=ztmp+(1 - 1/lam_rec(kbr))*stp(:,kbr); ztmp=ztmp*lam_rec(kbr);
z=z+ztmp*((stp(:,kbr)'*z)/stp_nrm(kbr));
end
end
%
% store the new search direction and its norm
%
a2=-lam_rec(nbroy)/stp_nrm(n …… 此处隐藏:4204字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [资格考试]石油钻采专业设备项目可行性研究报告编
- [资格考试]2012-2013学年度第二学期麻风病防治知
- [资格考试]道路勘测设计 绪论
- [资格考试]控烟戒烟知识培训资料
- [资格考试]建设工程安全生产管理(三类人员安全员
- [资格考试]photoshop制作茶叶包装盒步骤平面效果
- [资格考试]授课进度计划表封面(09-10下施工)
- [资格考试]麦肯锡卓越工作方法读后感
- [资格考试]2007年广西区农村信用社招聘考试试题
- [资格考试]软件实施工程师笔试题
- [资格考试]2014年初三数学复习专练第一章 数与式(
- [资格考试]中国糯玉米汁饮料市场发展概况及投资战
- [资格考试]塑钢门窗安装((专项方案)15)
- [资格考试]初中数学答题卡模板2
- [资格考试]2015-2020年中国效率手册行业市场调查
- [资格考试]华北电力大学学习实践活动领导小组办公
- [资格考试]溃疡性结肠炎研究的新进展
- [资格考试]人教版高中语文1—5册(必修)背诵篇目名
- [资格考试]ISO9001-2018质量管理体系最新版标准
- [资格考试]论文之希尔顿酒店集团进入中国的战略研
- 全国中小学生转学申请表
- 《奇迹暖暖》17-支2文学少女小满(9)公
- 2019-2020学年八年级地理下册 第六章
- 2005年高考试题——英语(天津卷)
- 无纺布耐磨测试方法及标准
- 建筑工程施工劳动力安排计划
- (目录)中国中央空调行业市场深度调研分
- 中国期货价格期限结构模型实证分析
- AutoCAD 2016基础教程第2章 AutoCAD基
- 2014-2015学年西城初三期末数学试题及
- 机械加工工艺基础(完整版)
- 归因理论在管理中的应用[1]0
- 突破瓶颈 实现医院可持续发展
- 2014年南京师范大学商学院决策学招生目
- 现浇箱梁支架预压报告
- Excel_2010函数图表入门与实战
- 人教版新课标初中数学 13.1 轴对称 (
- Visual Basic 6.0程序设计教程电子教案
- 2010北京助理工程师考试复习《建筑施工
- 国外5大医疗互联网模式分析




