迭代格式的比较.docx
《迭代格式的比较.docx》由会员分享,可在线阅读,更多相关《迭代格式的比较.docx(8页珍藏版)》请在冰豆网上搜索。
迭代格式的比较
课题一迭代格式的比较
一、问题提出
设方程f(x)=x-3x–1=0有三个实根x*1=,x*2=,x*3=
现采用下面六种不同计算格式,求f(x)=0的根x*1或x*2
1.
2.
3.
4.
5.
6.
二、要求
1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;
2、用事后误差估计
来控制迭代次数,并且打印出迭代的次数;
3、初始值的选取对迭代收敛有何影响;
4、分析迭代收敛和发散的原因。
三、目的和意义
1、通过实验进一步了解方程求根的算法;
2、认识选择计算格式的重要性;
3、掌握迭代算法和精度控制;
4、明确迭代收敛性与初值选取的关系。
1.六种不同计算格式运行程序及运算结果
运行程序
(1)
functioniteration_1
x0=input('输入初始值x0=');
k=input('输入迭代次数k=');
x
(1)=x0;
i=1;
whilei<=k
x(i+1)=fun(x(i))
i=i+1;
xk=x(i);
end
functiony=fun(x)
y=(3*x+1)/x^2;
(2)
functioniteration_2
x0=input('输入初始值x0=');
k=input('输入迭代次数k=');
x
(1)=x0;
i=1;
whilei<=k
x(i+1)=fun(x(i))
i=i+1;
xk=x(i);
end
functiony=fun(x)
y=(x^3-1)/3;
(3)
functioniteration_3
x0=input('输入初始值x0=');
k=input('输入迭代次数k=');
x
(1)=x0;
i=1;
whilei<=k
x(i+1)=fun(x(i))
i=i+1;
xk=x(i);
end
functiony=fun(x)
y=(3*x+1)^(1/3);
(4)
functioniteration_4
x0=input('输入初始值x0=');
k=input('输入迭代次数k=');
x
(1)=x0;
i=1;
whilei<=k
x(i+1)=fun(x(i))
i=i+1;
xk=x(i);
end
functiony=fun(x)
y=1/(x^2-3);
(5)
functioniteration_5
x0=input('输入初始值x0=');
k=input('输入迭代次数k=');
x
(1)=x0;
i=1;
whilei<=k
x(i+1)=fun(x(i))
i=i+1;
xk=x(i);
end
functiony=fun(x)
y=(3+1/x)^(1/2);
(6)
functioniteration_6
x0=input('输入初始值x0=');
k=input('输入迭代次数k=');
x
(1)=x0;
i=1;
whilei<=k
x(i+1)=fun(x(i))
i=i+1;
xk=x(i);
end
functiony=fun(x)
y=x-(1/3)*((x^3-3*x-1)/(x^2-1));
运行结果
在matlab的commandwindow中调用写好的m文件,运行方式如下
>>iteration
输入初始值x0=
输入迭代次数k=
(1)
>>iteration_1
输入初始值x0=1
输入迭代次数k=5
计算格式
(1)最终运行结果如下:
x=
由此知,计算格式
(1)发散。
(2)
>>iteration_2
输入初始值x0=1
输入迭代次数k=5
计算格式
(2)最终运行结果如下:
x=0
由此知,计算格式
(2)收敛。
(3)
>>iteration_3
输入初始值x0=1
输入迭代次数k=8
计算格式
(2)最终运行结果如下:
x=
由此知,计算格式(3)收敛。
(4)
>>iteration_4
输入初始值x0=1
输入迭代次数k=5
计算格式
(2)最终运行结果如下:
x=
由此知,计算格式(4)收敛。
(5)
>>iteration_5
输入初始值x0=1
输入迭代次数k=8
计算格式(5)最终运行结果如下:
x=
由此知,计算格式(5)收敛。
(6)
>>iteration_6
输入初始值x0=2
输入迭代次数k=5
计算格式(6)最终运行结果如下:
x=
事后误差估计控制迭代次数,程序如下
(①注:
此程序只能够在迭代式收敛的情况下有意义;
②如果要采用不同的计算格式,只要将matlab程序的子函数中的迭代式修改即可。
)
function[k,control,xk]=iteration
%k为输出的迭代次数
%control为控制条件,使循环结束
%xk为迭代方程的一个根
%此函数只能够在迭代式收敛的情况下有意义
N=input('输入最大迭代次数N=');
x
(1)=input('输入初始值x0=');
m=input('输入控制误差m=');
fori=1:
N
x(i+1)=fun(x(i))
control=abs(x(i+1)-x(i));
[(i-1)controlx(i)]
if(controlk=i;
xk=x(i);
break
end
i=i+1;
end
functiony=fun(x)
y=(3*x+1)^(1/3);
将程序存为m文件,并且进行调用,有如下运行方式(程序以计算格式(3)为例)
>>[kcontrolxk]=iteration
输入最大迭代次数N=30
输入初始值x0=1
输入控制误差m=
运行输出结果为:
x=
k=13
control=
xk=
有输出结果可以看出,方程的一个根为,迭代了13次,并且最后一次的偏差为。
3.初始值的选取对迭代收敛有何影响
如果函数在C[a,b]满足不动点的两个条件,那么对于任意的x0∈[a,b],得到的迭代序列{xk}收敛到函数的不动点。
在此情况下,初始值的选取对迭代收敛没有任何影响,只是影响迭代收敛的速度和到达误差的精度要求的次数。
4.分析迭代收敛和发散的原因。
f(x)=0改写成等价的形式x=
(x),迭代法是一种逐次逼近法,其基本思想是将隐式方程=
(x)归结为一组显式的计算公式,就是说迭代工程实质上是一个逐步显化的过程。
当迭代下去不能趋于某个极值,这种现象成为发散。
如图所示,图1为收敛的情况,图2为发散的情况。