matlab实验 非线性方程(组)求解

  • 格式:docx
  • 大小:124.84 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数学实验报告

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