非线性方程的二分法迭代法内含matlab程序代码.docx

上传人:b****2 文档编号:13586 上传时间:2022-09-30 格式:DOCX 页数:9 大小:82.26KB
下载 相关 举报
非线性方程的二分法迭代法内含matlab程序代码.docx_第1页
第1页 / 共9页
非线性方程的二分法迭代法内含matlab程序代码.docx_第2页
第2页 / 共9页
非线性方程的二分法迭代法内含matlab程序代码.docx_第3页
第3页 / 共9页
非线性方程的二分法迭代法内含matlab程序代码.docx_第4页
第4页 / 共9页
非线性方程的二分法迭代法内含matlab程序代码.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

非线性方程的二分法迭代法内含matlab程序代码.docx

《非线性方程的二分法迭代法内含matlab程序代码.docx》由会员分享,可在线阅读,更多相关《非线性方程的二分法迭代法内含matlab程序代码.docx(9页珍藏版)》请在冰豆网上搜索。

非线性方程的二分法迭代法内含matlab程序代码.docx

非线性方程的二分法迭代法内含matlab程序代码

课程名称

数学软件实验

班级

数0901

学号

0912020107

姓名

李亚强

实验课题

非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法

实验目的

熟悉非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法

实验要求

运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成

实验内容

非线性方程的二分法

非线性方程的迭代法

非线性方程的松弛迭代法

非线性方程的Aitken迭代法

非线性方程的Steffensen迭代法

成绩

教师

实验报告

一、实验名称:

非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法。

二、实验目的:

进一步熟悉理解掌握最速下降法与共轭梯度法解法思路熟悉非线性方程的二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法,提高matlab编程能力。

三、实验要求:

非线性方程,应用二分法,迭代法,松弛迭代法,Aitken迭代法,Steffensen迭代法编程求解非线性方程的数值解。

四、实验原理:

1.二分法:

设函数

在区间

上连续,而且

,则

在区间

上至少有一个根。

首先确定有限区间:

依据零点定理。

,且

,则方程

在区间

上至少有一个根。

如果

上恒正或恒负,则此根唯一。

,则

为有根区间,否则

为有根区间。

记新的有根区间为

;对

重复上述做法得:

设所求的根为

,则

,即

,由

的近似解。

2.不动点迭代法

对于非线性方程:

常常可以化成等价的方程

可以选取一个初始近似值

,构造迭代序列

如此产生序列

这种迭代方法称为不动点迭代,或Picard迭代。

这个原理看似很容易直观理解,但是却有相当深刻的数学内涵,数学系的学生在泛函分析与微分方程理论等多门专业课程里都会遇到。

如果

连续,而且

,则

的一个不动点。

因此

为方程

的一个根。

3.Steffensen迭代法

该迭代法解方程

可以看成是另一种不动点迭代:

其中迭代函数为

得到迭代公式为:

4.Aitken加速迭代

由初值

出发,计算出

后,便可在曲线

上找到两个点

将这两点所在的直线与直线

的交点设为

,则

点满足:

得:

,将

视为新的初值,重复上述步骤可得

,由此产生迭代公式,

五、实验内容:

%二分法解非线性方程

functioner_fen(f,a,b,esp);

f1=subs(f,a);

f2=subs(f,b);

iff1*f2>0

disp('该方程在【a,b】上无解!

');

elseiff1==0

root=a;

elseiff2==0

root=b;

else

a0=a;

b0=b;

A=[];

whileabs((b0-a0)/2)>=esp

half=(a0+b0)/2;

fa=subs(f,a0);

fb=subs(f,b0);

fhalf=subs(f,half);

iffhalf==0

root=half;

break;

elseiffa*fhalf<0

b0=half;

else

a0=half;

end

A=[A,half];

end

root=(b0+a0)/2;

end

root

A

%不动点迭代(Picard迭代)

function[x,time]=Picard(f,x0,tol)

%结果给出迭代次数

%x0为迭代初值

%tol为误差容限

if(nargin==2)

tol=1.0e-5;

end

wucha=0.5;%设置误差初值

x1=x0;%x1与x0为前后两次计算结果

time=0;%用于记录迭代次数

while(wucha>tol)

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;%计算结果

六、实验结果:

>>symsx;er_fen(sin(x),-2,1,1.0e-2)

root=

-0.0020

 

A=

-0.50000.2500-0.12500.0625-0.03130.0156

-0.00780.0039

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1