matlab实验 非线性方程(组)求解
- 格式:docx
- 大小:124.84 KB
- 文档页数:11
数学实验报告
Matlab的简单应用
——非线性方程(组)求解
姓名班级学号学院
2013年5月12日
一、实验目的
1.熟悉MATLAB软件中非线性方程(组)的求解命令及其用法。
2.掌握求非线性方程近似根的常用数值方法——迭代法。
3.了解分叉与混沌概念。
二、实验问题
1.利用弦截法编程对方程x^5+x-1=0进行求解实验,并与二分法、牛顿切线法进行
比较;
2.方程f(x)=x^2+x-4=0在(0,4)内有唯一的实根,现构造以下三种迭代函数:
(1)g1(x)=4-x^2,迭代初值x0=4;
(2)g2(x)=4/(1+x),迭代初值x0=4;
(3)g3(x)=x-(x^2+x-4)/(2x+1),迭代初值x0=4;
分别用给出的3种迭代函数构造迭代数列x(k+1)=g1(x(k)),i=1,2,3,观察这些迭代数列是否收敛,若收敛能否收敛到方程f(x)=0的解。除此之外,你还能构造出其他收敛的迭代吗?
4.分别取不同的参数值r,做迭代数列x(n+1)=rx(n)(1-x(n)),n=0,1,2……,观察分
叉与混沌现象。
步骤1:首先,分别取参数r为0,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7, 3.0,3.3,
3.6,3.9等14个值,按迭代序列迭代150步,分别产生14个迭代序列
{x(k)},k=0,1,…,150;其次,分别取这14个迭代序列的后50个迭代值
(x100,x101,…,x150),画在以r为横坐标的同一坐标面rox上,每一个r取值对应的迭代值点为一列。
步骤2:对(1)中图进行观察分析,容易发现:
(1)当r为0,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7时,每个r对应的50个迭代值凝聚在一点,这说明对这些r的取值所产生的迭代序列是收敛的。
(2)当r为3,3.3时,r对应的50个迭代值凝聚在两个点,这说明这些r值所对应的迭代序列不收敛,但凝聚在两个点附近;同时也说明当r在2.7和3之间取值时,对
应的迭代序列从收敛到不收敛,轨道由一只分为两支开始出现分叉现象。
(3)当r由3.3到3.6再到3.9越来越大时,对应的50个迭代值凝聚的点也越来越多,表明r对应的迭代序列变化情况逐渐复杂,轨道分岔也越来越多,但会不
会还是按照一支分叉为两支的变化规律来变化呢?
步骤3:为了进一步研究上面所提到的问题,现在对r在2.7到3.9之间的取值进行加密迭代并作图,取步长为0.005时得到图像。
实验过程及结果分析
1.代码如下:
f=inline('x^5+x-1');
II/ 11
a=0;b=1;
x0=a;
k=1;
while abs(f(x0))>1.0e-5
x1=b-(b-x0)*f(b)/(f(b)-f(x0));
x0=x1;
vpa(x0,7)
k=k+1
plot(k,x0,'*')
hold on
end
结果:
……
k =
9
ans =
0.7548042
k =
10
ans =
0.7548515
k =
11
ans =
0.7548683
k =
12
ans =
0.7548743
k =
13
III
附:牛顿切线法
f=inline('x^5+x-1');
d1f=inline('5*x^4+1');
d2f=inline('20*x^3');
a=0;b=1;
if f(a)*d2f(a)>0
x0=a;
else
x0=b;
end
k=1;
while abs(f(x0))>0.00005
x1=x0-f(x0)/d1f(x0);
k=k+1
x0=x1
end
结果:
k =
2
x0 =
0.8333
IV/ 11
k =
3
x0 =
0.7644
k =
4
x0 =
0.7550
k =
5
x0 =
0.7549
2. (1)
x=0:0.01:4;
y1=x;
y2=4./(1+x);
plot(x,y1,x,y2)
hold on
x0=4;x1=4./(1+x0);s=[];ss=[];k=1;
while abs(x1-x0)>1.0e-5
x0=x1;s=[s,x0];
x1=4/(1+x0);ss=[ss,x1];
plot(s,ss,'r.')
pause(0.5)
vpa(x0,7)
k=k+1
end
结果:
……
k =
24
ans =
1.561563
k =
25
ans =
1.561546
k =
26
ans =
1.561557
V