数学实验报告方程求解实验.docx
《数学实验报告方程求解实验.docx》由会员分享,可在线阅读,更多相关《数学实验报告方程求解实验.docx(14页珍藏版)》请在冰豆网上搜索。
数学实验报告方程求解实验
重庆大学
学生实验报告
实验课程名称数学实验
开课实验室DS1421
学院年级专业班
学生姓名学号
开课时间至学年第学期
总成绩
教师签名
数学与统计学院制
开课学院、实验室:
数学与统计学院DS142实验时间:
2013年4月10日
课程
名称
数学实验
实验项目
名称
方程求解实验
实验项目类型
验证
演示
综合
设计
其他
指导
教师
成绩
实验目的
[1]复习求解方程及方程组的基本原理和方法;
[2]掌握迭代算法;
[3]熟悉MATLAB软件编程环境;掌握MATLAB编程语句(特别是循环、条件、控制等语句);
[4]通过范例展现求解实际问题的初步建模过程;
通过该实验的学习,复习和归纳方程求解或方程组求解的各种数值解法(简单迭代法、二分法、牛顿法、割线法等),初步了解数学建模过程。
这对于学生深入理解数学概念,掌握数学的思维方法,熟悉处理大量的工程计算问题的方法具有十分重要的意义。
基础实验
一、实验内容
1.方程求解和方程组的各种数值解法练习
2.直接使用MATLAB命令对方程和方程组进行求解练习
3.针对实际问题,试建立数学模型,并求解。
二、实验过程(一般应包括实验原理或问题分析,算法设计、程序、计算、图表等,实验结果及分析)
1.开启软件平台——MATLAB,开启MATLAB编辑窗口;
2.根据各种数值解法步骤编写M文件
3.保存文件并运行;
4.观察运行结果(数值或图形);
5.根据观察到的结果写出实验报告,并浅谈学习心得体会。
应用实验(或综合实验)
一、实验内容
基础实验
1.用图形放大法求解方程xsin(x)=1.并观察该方程有多少个根。
解:
函数y=x*sin(x)-1为偶函数,因此可以考虑其在[0,+∞]上的零点。
作出其在区间[0,20
]上的函数图像,程序如下:
x=0:
0.01:
20*pi;
y=x.*sin(x)-1;
plot(x,y),holdon,
line([0,20*pi],[0,0])
可以知道方程有无数组解。
求解其在区间[0,2
]上的解。
做出图象如下:
将图像放大:
所以2个解为x=1.1142和x=2.7726。
2.将方程x5+5x3-2x+1=0改写成各种等价的形式进行迭代,观察迭代是否收敛,并给出解释。
解:
成各种等价的形式为:
x=
/2+5
/2+1/2;
x=
;
x=
;
x=
;
x=
;
程序如下所示:
>>x
(1)=1;y
(1)=1;z
(1)=1;u
(1)=1;v
(1)=1;
fork=1:
20
x(k+1)=x(k)^5/2+2.5*x(k)^3+0.5;
y(k+1)=(y(k)*0.4-0.2-y(k)^5/5)^(1/3);
z(k+1)=(-5*z(k)^3+2*z(k)-1)^(1/5);
u(k+1)=-5/u(k)+2/u(k)^3-1/u(k)^4;
v(k+1)=0.4/v(k)-v(k)^3/5-0.2/v(k)^2;
end
>>x,y,z,u,v
结果:
x=
1.0e+62*
Columns1through10
0.00000.00000.00000.00002.5565InfInfInfInfInf
Columns11through20
InfInfInfInfInfInfInfInfInfInf
Column21
Inf
y=
Columns1through5
1.000000.2924+0.5065i0.4873+0.3750i0.4701+0.2548i
Columns6through10
0.3935+0.2364i0.3686+0.2837i0.3947+0.3044i0.4103+0.2922i0.4057+0.2811i
Columns11through15
0.3983+0.2821i0.3977+0.2867i0.4004+0.2877i0.4014+0.2863i0.4007+0.2854i
Columns16through20
0.4001+0.2857i0.4002+0.2862i0.4005+0.2862i0.4005+0.2860i0.4004+0.2860i
Column21
0.4004+0.2860i
z=
Columns1through5
1.00001.0675+0.7756i1.5607-0.3514i1.5818+0.8381i1.8323-0.6099i
Columns6through10
1.8377+0.8353i1.9443-0.7354i1.9458+0.8285i1.9884-0.7881i1.9889+0.8249i
Columns11through15
2.0055-0.8091i2.0057+0.8233i2.0121-0.8172i2.0122+0.8227i2.0147-0.8204i
Columns16through20
2.0147+0.8225i2.0156-0.8216i2.0156+0.8224i2.0160-0.8221i2.0160+0.8224i
Column21
2.0162-0.8222i
u=
Columns1through10
1.0000-4.00001.2148-3.45941.3901-3.12021.5261-2.89801.6290-2.7488
Columns11through20
1.7052-2.64711.7607-2.57751.8004-2.52961.8286-2.49671.8484-2.4740
Column21
1.8623
v=
Columns1through17
10NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
Columns18through21
NaNNaNNaNNaN
>>可以看出:
,
,
,
迭代不收敛
迭代收敛。
因为
迭代结果为Inf,
、
迭代结果为交错的数,
迭代结果为:
NaN,所以都不收敛。
只有
迭代结果为一系列变化不大的数,所以收敛。
3.求解下列方程组
直接使用MATLAB命令:
solve()和fsolve()对方程组求解。
解:
(1)使用solve()求解,程序如下:
>>[x,y]=solve('2*x-y=exp(-x)','-x+2*y=exp(-y)')
结果为:
x=
0.56714329040978387299996866221036
y=
0.56714329040978387299996866221036
使用fsolve()求解
(1)建立方程组的M-函数文件(fun.m):
functionf=fun(x)
f
(1)=2*x
(1)-x
(2)-exp(-x
(1));
f
(2)=-x
(1)+2*x
(2)-exp(-x
(2));
(2)运行程序
y=fsolve('fun',[1,1],1)
(3)运行结果:
y=
0.56710.5671
(2)使用solve()求解,程序如下:
>>[x,y,z]=solve('x^2-5*y^2+7*z^2=12','3*x*y+x*z-11*x=0','2*y*z+40*x')
结果为:
x=
-0.3717109049617391088072542051407
1.1793977050241834037202635753232
-387.07051006669788881412317135176+32.695733726773593273053059636369*i
-387.07051006669788881412317135176-32.695733726773593273053059636369*i
0
0
0
0
y=
2.7730345684959693301011247878491
5.183********74086637641552216877
-0.31161149637002233026597333810172-50.8105278886440945140172273605*i
-0.31161149637002233026597333810172+50.8105278886440945140172273605*i
0
0
(15^(1/2)*2*i)/5
-(15^(1/2)*2*i)/5
z=
2.6808962945120920096966256364527
-4.550565272732225991292465665063
11.934834489110066990797920014305+152.4315836659322835420516820815*i
11.934834489110066990797920014305-152.4315836659322835420516820815*i
(2*21^(1/2))/7
-(2*21^(1/2))/7
0
0
>>
使用fsolve()求解
(1)建立方程组的M-函数文件(fun1.m):
functionf=fun1(x)
f
(1)=x
(1)^2-5*x
(2)^2+7*x(3)^2-12;
f
(2)=3*x
(1)*x
(2)+x
(1)*x(3)-11*x
(1);
f(3)=2*x
(2)*x(3)+40*x
(1)
(2)运行程序
>>y=fsolve('fun1',[1,1,1],1)
(3)运行结果:
y=
0.00000.00001.3093
4.编写用二分法求方程根的函数M文件。
解:
函数M文件如下所示:
functiony=qj(fun,x)
fx0=fun((x
(1)+x
(2))/2);
while(abs(fx0)>=eps)
x0=(x
(1)+x
(2))/2;
fx0=fun(x0);
fx1=fun(x
(1));
if((fx0*fx1)<0)
x
(2)=x0;
fx2=fx0;
else
x
(1)=x0;
fx1=fx0;
end
end
y=x0;
检验:
(1)编写另一个人函数M文件fun.m
functioneq=fun(x)
eq=x^2-5*x+6;
运行,qj(@fun,[-1,2.5])
结果如下:
qj(@fun,[-1,2.5])
(2)编写另一个人函数M文件sfun.m
functioneq=sfun(x)
eq=tan(x)-sin(x);
运行qj(@sfun,[-1,0.1])
结果:
y=
-3.0518e-006
可见基本上满足要求,可以求方程的近似解。
总结与体会
1.了解了方程和方程根的求解,学会了使用一些函数,如:
fzero,fsolve和solve。
2.掌握迭代算法和一些求方程的思想,如二分法、图形放大法等。
3,编程还不熟练,需多加练习。
教师签名
年月日