数值分析实验报告4.docx
- 文档编号:29189259
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:12
- 大小:19.13KB
数值分析实验报告4.docx
《数值分析实验报告4.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告4.docx(12页珍藏版)》请在冰豆网上搜索。
数值分析实验报告4
实验报告
实验项目名称非线性方程与方程组的数值解法
实 验 室 数学实验室
所属课程名称数值逼近
实验类型算法设计
实验日期
班级
学号
姓名
成绩
实验概述:
【实验目的及要求】
本次实验的目的是熟练《数值分析》第七章“非线性方程与方程组的数值解法”的相关内容,掌握方程求根与二分法、加权加速法、埃特金加速法、牛顿法、弦截法、抛物线法以及复根的情况。
。
本次试验要求编写二分法、加权加速法、埃特金加速法、牛顿法、弦截法、抛物线法等方法的程序编码,并在MATLAB软件中去实现。
【实验原理】
《数值分析》第七章“非线性方程与方程组的数值解法“的相关内容,包括:
方程求根与二分法、加权加速法、埃特金加速法、牛顿法、弦截法、抛物线法等的相应算法和相关性质。
【实验环境】(使用的软硬件)
软件:
MATLAB2012a
硬件:
电脑型号:
联想Lenovo昭阳E46A笔记本电脑
操作系统:
Windows8专业版
处理器:
Intel(R)Core(TM)i3CPUM350@2.27GHz2.27GHz
实验内容:
【实验方案设计】
第一步,将书上关于方程求根与二分法、加权加速法、埃特金加速法、牛顿法、弦截法、抛物线法等的内容转化成程序语言,用MATLAB实现;第二步,分别用以上求积公式的程序编码求解不同的问题。
【实验过程】(实验步骤、记录、数据、分析)
实验的主要步骤是:
首先分析问题,根据分析设计MATLAB程序,利用程序算出问题答案,分析所得答案结果,再得出最后结论。
实验一:
求方程X3+4X2-10=0在X0=1.5附近的一个根,迭代函数为X=(
(精度达到10-6)
(1)用一般法求根
(2)用加权加速法求根
(3)用埃特金加速法求根
(4)找到另外一个迭代函数,用以上三种方法求根
(5)用matlab自带函数找根
(6)用Newton法求根
(7)用弦截法求根
(8)用抛物线法求根
(9)找出其他根,是否有复根,并比较以上哪种方法速度快
(1)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现一般法求根的程序代码如下:
function[y,n]=BDD(x,eps)
ifnargin==1
eps=1e-6;
xl=gg(x);
n=1;
E=abs(xl-x);
while(E>=eps)&&(n<=10000)
x=xl;
xl=gg(x);
n=n+1;
E=abs(xl-x);
end
y=x;
k=n
end
end
functionf=gg(x)
f=sqrt(10/(4+x));
end
在commandWindows中输入命令:
formatlong及BDD(1.5),得出的结果为:
>>formatlong
BDD(1.5)
k=
7
ans=
1.365230575673434
(2)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现加权加速求根的程序代码如下:
function[y,n]=WA(a,eps)
ifnargin==1
eps=1e-16;
end
symsx
L=subs(diff(sqrt(10/(4+x))),a);
xl=gg(a,L);
n=1;
E=abs(xl-a);
while(E>=eps)&(n<=10000)
x=xl;
xl=gg(x,L);
n=n+1;
E=abs(xl-x);
end
y=x;
k=n
end
functionf=gg(x,L)
f=(sqrt(10/(4+x))-L.*x)/(1-L);
end
在commandWindows中输入命令:
WA(1.5),得出的结果为:
>>WA(1.5)
k=
4
ans=
1.365230008676674
(3)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现埃特金求根的程序代码如下:
function[y,n]=ATJ(a,eps)
ifnargin==1
eps=1e-6;
end
symsx
x0=subs(f(x),a);
x1=subs(f(x),x0);
x2=gg(x0,x1,a);
n=1;
E=abs(x2-a);
while(E>=eps)&(n<=10000)
X=x2;
x0=subs(f(x),X);
x1=subs(f(x),x0);
x2=gg(x0,x1,X);
n=n+1;
E=abs(x2-X);
end
y=X;
k=n
end
functionh=f(x)
h=sqrt(10/(4+x));
end
functionf=gg(x,y,z)
f=y-((y-x)^2)/(y-2*x+z);
end
在commandWindows中输入命令:
ATJ(1.5),得出的结果为:
>>ATJ(1.5)
k=
3
ans=
1.365230013416586
(4)在以上三题中的代码的基础上进行修改:
functionf=gg(x)
f=sqrt(2.5-(x^3)/4);
end
则三种方法运行出的结果分别为:
>>BDD(1.5)
k=
20
ans=
1.365229578333959
>>WA(1.5)
k=
6
ans=
1.365230351032824
>>ATJ(1.5)
k=
4
ans=
1.365230013413594
(5)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现matlab自带函数求根的程序代码如下:
fun=@(x)x.^3+4*(x.^2)-10;
x=fzero(fun,1.5)
commandWindows中输出结果:
x=
1.365230013414097
(6)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现Newton求根的程序代码如下:
function[y,n]=Newton(a,eps)
ifnargin==1
eps=1e-16;
end
symsx
L=subs(diff(f(x)),a);
xl=subs(x-f(x)/L,a);
n=1;
E=abs(xl-a);
while(E>=eps)&(n<=10000)
X=xl;
L=subs(diff(f(x)),X);
xl=subs(x-f(x)/L,X);
n=n+1;
E=abs(xl-X);
end
y=X;
k=n
end
functionf=f(x)
f=x^3+4*x^2-10;
end
在commandWindows中输入命令:
Newton(1.5),得出的结果为:
>>Newton(1.5)
k=
4
ans=
1.365230013916147
(7)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现弦截法求根的程序代码如下:
function[y,n]=XJF(a,eps)
ifnargin==1
eps=1e-6;
end
symsx
x1=a+0.1;
A=ff(x1);
B=ff(a);
x2=gg(x1,a,A,B);
n=1;
E=abs(x2-x1);
while(E>=eps)&(n<=10000)
X=x1;
x1=x2;
A=ff(x1);
B=ff(X);
x2=gg(x1,X,A,B);
n=n+1;
E=abs(x2-x1);
end
y=x1;
k=n
end
functionh=ff(x)
h=x.^3+4*x.^2-10;
end
functionf=gg(x,y,z,w)
f=x-((x-y)*z)/(z-w);
end
在commandWindows中输入命令:
XJF(1.5),得出的结果为:
>>XJF(1.5)
k=
5
ans=
1.365230020178121
(8)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现抛物线法求根的程序代码如下:
function[y,n]=parabola(fx,a,b,c,eps)
if(nargin==4)
eps=1e-6;
symsx
fa=subs(fx,a);
fb=subs(fx,b);
fc=subs(fx,c);
fb_a=(fb-fa)/(b-a);
fc_b=(fc-fb)/(c-b);
fc_b_a=(fc_b-fb_a)/(c-a);
w=fc_b+fc_b_a*(c-b);
x0=c-2*fc/(w+(w^2-4*fc*fc_b_a)^.5);
n=1;
if(abs(x0-c)>eps&&n<=10000)
a=b;
b=c;
c=x0;
fa=subs(fx,a);
fb=subs(fx,b);
fc=subs(fx,c);
fb_a=(fb-fa)/(b-a);
fc_b=(fc-fb)/(c-b);
fc_b_a=(fc_b-fb_a)/(c-a);
w=fc_b+fc_b_a*(c-b);
x0=c-2*fc/(w+(w^2-4*fc*fc_b_a)^.5);
n=n+1;
end
y=x0;
n;
end
end
在commandWindows中输入命令:
fx=x^3+4*x^2-10;
[y,n]=parabola(fx,1.5,1.6,1.378888322284549),得出的结果为:
>>fx=x^3+4*x^2-10;
[y,n]=parabola(fx,1.5,1.6,1.378888322284549)
y=
1.365230018508053
n=
2
(10)在commandWindows中输入命令:
p=[1,4,0,-10];roots(p),得出的结果为:
>>p=[1,4,0,-10];
roots(p)
ans=
-2.682615006707049+0.358259359924043i
-2.682615006707049-0.358259359924043i
1.365230013414097
前两个根是复根。
【结论】(结果)
通过以上的计算可以看出,埃特金和抛物线法比较快,埃特金需要三次迭代,抛物线只需要两次迭代就达到了要求的精度。
【小结】
通过此次实验,我对方程求根与二分法、加权加速法、埃特金加速法、牛顿法、弦截法、抛物线法有了更进一步的了解。
迭代法中牛顿法最实用,而弦截法和抛物线法不需要f(x)的导数,又具有超线性收敛,尤其是抛物线法收敛速度很快,也是常用的有效方法。
而matlab中有自带的函数可以求方程的根,fzero计算初值附近的一个根,函数roots计算多项式所有零点。
指导教师评语及成绩:
成绩:
指导教师签名:
批阅日期:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 实验 报告