matlab Aitken迭代法,数学实验“非线性方程的二分法,迭代法,Aitken迭代法,Steffensen迭代法”实验报告(内含matlab程序代码)...

41528d3028836879cd698677c3999917.gif数学实验“非线性方程的二分法,迭代法,Aitken迭代法,Steffensen迭代法”实验报告(内含matlab程序代码)

西京学院数学软件实验任务书 课程名称 数学软件实验 班级 数0901 学号 0912020107 姓名 李亚强 实验课题 非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法 实验目的 熟悉非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法 实验要求 运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成 实验内容 非线性方程的二分法 非线性方程的迭代法 非线性方程的松弛迭代法 非线性方程的Aitken迭代法 非线性方程的Steffensen迭代法 成绩 教师 实验六实验报告 1、 实验名称:非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法。 2、 实验目的:进一步熟悉理解掌握最速下降法与共轭梯度法解法思路熟悉非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法,提高matlab编程能力。 3、 实验要求:非线性方程,应用二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法编程求解非线性方程的数值解。 4、 实验原理: 1. 二分法: 设函数在区间上连续,而且,则在区间上至少有一个根。 首先确定有限区间:依据零点定理。设 ,且,则方程 在区间上至少有一个根。如果在上恒正或恒负,则此根唯一。 令若,则为有根区间,否则为有根区间。记新的有根区间为, 则且;对重复上述做法得:且 设所求的根为,则,即,由得 取为的近似解。 2. 不动点迭代法 对于非线性方程:常常可以化成等价的方程可以选取一个初始近似值,构造迭代序列 如此产生序列。这种迭代方法称为不动点迭代,或Picard 迭代。这个原理看似很容易直观理解,但是却有相当深刻的数学内涵,数学系的学生在泛函分析与微分方程理论等多门专业课程里都会遇到。如果连续,而且,则是的一个不动点。因此为方程的一个根。 3. Aitken加速迭代 由初值出发,计算出后,便可在曲线上找到两个点。将这两点所在的直线与直线的交点设为,则点满足:解得:,将视为新的初值,重复上述步骤可得,由此产生迭代公式,。 4. Steffensen迭代法 该迭代法解方程可以看成是另一种不动点迭代:其中迭代函数为得到迭代公式为: ; 5、 实验内容: %二分法解非线性方程 function er_fen(f,a,b,esp); f1=subs(f,a); f2=subs(f,b); if f1*f2>0 disp( 该方程在【a,b】上无解! ); elseif f1==0 root=a; elseif f2==0 root=b; else a0=a; b0=b; A=[]; while abs((b0-a0)/2)>=esp half=(a0+b0)/2; fa=subs(f,a0); fb=subs(f,b0); fhalf=subs(f,half); if fhalf==0 root=half; break; elseif fa*fhalftol) x1=subs(f,x0)+x0; %迭代计算 wucha=abs(x1-x0); x0=x1; % 更新x0的值在循环中这一句非常重要 time=time+1; %记下迭代次数 end x=x1; %Aitken加速收敛方法 function [gen,time]=Aitken(func,x0,tol) if(nargin==2) tol=1.0e-5; end gen=x0; x(1:2)=[0,0]; t=0; %记录迭代次数 m=0; x2=x0; wucha=0.1; %设置误差初值 while(wucha>tol) t=t+1; %记下累积一次迭代次数 x1=x2; temp=gen; gen=subs(func,temp)+temp; x(t)=gen; %迭代超过两次使用 Aitken加速 if(t>2) m=m+1; x2=x(m)-(x(m+1)-x(m))^2/(x(m+2)-2*x(m+1)+x(m)); %给出两次迭代误差 wucha=abs(x2-x1); end end gen=x2; %Steffensen加速方法计算非线性方程 function [gen,time]=Steffensen(fun,x0,tol) %如果缺省误差参数,默认为10 的-5次方 if(nargin==2) tol=1.0e-5; end %设置误差初值 time=0; %记迭代次数 wucha=0.1; %设置前后两次迭代的误差 gen=x0; while(wucha>tol) x1=gen; y=subs(fun,x1)+x1; z=subs(fun,y)+y; %加速公式 gen=x1-(y-x1)^2/(z-2*y+x1); wucha=abs(gen-x1); time=time+1; %迭代加一次的记录 end gen; %计算结果 6、 实验结果: >> syms x;er_fen(sin(x),-2,1,1.0e-2) root = -0.0020 A = -0.5000 0.2500 -0.1250 0.0625 -0.0313 0.0156 -0.0078 0.0039

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值