重庆大学数学实验实验报告.docx
《重庆大学数学实验实验报告.docx》由会员分享,可在线阅读,更多相关《重庆大学数学实验实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
重庆大学数学实验实验报告
重庆大学
学生实验报告
实验课程名称数学实验
开课实验室
学院年级专业班
学生姓名学号
开课时间至学年第学期
总成绩
教师签名
数学与统计学院制
开课学院、实验室:
数学与统计DS1421实验时间:
2010年3月23日
课程
名称
数学实验
实验项目
名称
MATLAB方程求解
实验项目类型
验证
演示
综合
设计
其他
指导
教师
肖剑
成绩
实验目的
[1]复习求解方程及方程组的基本原理和方法;
[2]掌握迭代算法;
[3]熟悉MATLAB软件编程环境;掌握MATLAB编程语句(特别是循环、条件、控制等语句);
[4]通过范例展现求解实际问题的初步建模过程;
通过该实验的学习,复习和归纳方程求解或方程组求解的各种数值解法(简单迭代法、二分法、牛顿法、割线法等),初步了解数学建模过程。
这对于学生深入理解数学概念,掌握数学的思维方法,熟悉处理大量的工程计算问题的方法具有十分重要的意义。
一、实验内容
1.方程求解和方程组的各种数值解法练习
2.直接使用MATLAB命令对方程和方程组进行求解练习
3.针对实际问题,试建立数学模型,并求解。
二、实验过程(一般应包括实验原理或问题分析,算法设计、程序、计算、图表等,实验结果及分析)
基础实验
1.用图形放大法求解方程xsin(x)=1.并观察该方程有多少个根。
程序:
x=-50:
0.01:
50
y=x.*sin(x)-1
plot(x,y)
line([-50,50],[0,0])
结果:
有无穷个根
图像放大:
x=-8:
0.01:
-6
y=x.*sin(x)-1
plot(x,y)
line([-8,-6],[0,0])
求得一个解为—6.44
分析:
2.将方程x5+5x3-2x+1=0改写成各种等价的形式进行迭代,观察迭代是否收敛,并给出解释。
①迭代函数为
,算法设计为:
x1=0;
x2=(x1^5+5*x1^3+1)/2;
whileabs(x1-x2)>10^(-5)
x1=x2;
x2=(x1^5+5*x1^3+1)/2;
end
x1
输出结果为:
x1=Inf
因此x=(x)迭代不收敛,则不直接使用(x)迭代,用加速迭代函数
,
算法设计为:
x1=0;
x2=(-4*x1^5-10*x1^3+1)/(-5*x1^4-15*x1^2+2);
whileabs(x1-x2)>10^(-5)
x1=x2;
x2=(-4*x1^5-10*x1^3+1)/(-5*x1^4-15*x1^2+2);
end
x1
输出结果为:
x1=-0.7685
②迭代函数为
,算法设计为:
x1=1;
x2=((2*x1-x1^5-1)/5)^(1/3);
whileabs(x1-x2)>10^(-5)
x1=x2;
x2=((2*x1-x1^5-1)/5)^(1/3);
end
x1
输出结果为:
x1=Inf-Infi
因此x=(x)迭代不收敛,则不直接使用(x)迭代,用加速迭代函数
,算法设计为:
x1=0;
x2=((0.4*x1-0.2*x1^5-0.2)^(1/3)-1/15*(0.4*x1-0.2*x1^5-0.2)^(-2/3)*(2*x1-5*x1^5))/(1-(1/15*(0.4*x1-0.2*x1^5-0.2)^(-2/3)*(2-5*x1^4)));
whileabs(x1-x2)>10^(-5)
x1=x2;
x2=((0.4*x1-0.2*x1^5-0.2)^(1/3)-1/15*(0.4*x1-0.2*x1^5-0.2)^(-2/3)*(2*x1-5*x1^5))/(1-(1/15*(0.4*x1-0.2*x1^5-0.2)^(-2/3)*(2-5*x1^4)));
end
x1
输出结果为:
x1=0.4004+0.2860i
③迭代函数为
,算法设计为:
x1=0;
x2=(2*x1-5*x1^3-1)^(1/5);
fork=1:
100
x1=x2;
x2=(2*x1-5*x1^3-1)^(1/5);
end
x1
输出结果为:
x1=2.0162-0.8223i
若用加速迭代函数
,算法设计为:
x1=0;
x2=((2*x1-5*x1^3-1)^(1/5)-1/5*(2*x1-5*x1^3-1)^(-4/5)*(2*x1-15*x1^3))/(1-1/5*(2*x1-5*x1^3-1)^(-4/5)*(2-15*x1^2));
fork=1:
100
x1=x2;x2=((2*x1-5*x1^3-1)^(1/5)-1/5*(2*x1-5*x1^3-1)^(-4/5)*(2*x1-15*x1^3))/(1-1/5*(2*x1-5*x1^3-1)^(-4/5)*(2-15*x1^2));
end
x1
输出结果为:
x1=-0.1483+0.7585i
④迭代函数为
,算法设计为:
x1=1;
x2=0.2*(2/x1-1/x1^2-x1^3);
fork=1:
100
x1=x2;
x2=0.2*(2/x1-1/x1^2-x1^3);
end
x1
输出结果为
x1=NaN
因此x=(x)迭代不收敛,则不直接使用(x)迭代,用加速迭代函数
,算法设计为:
x1=1;
x2=((2/x1-1/x1^2-x1^3)-x*(-2/x1^2+2/x1^3-3*x1^2))/(5-(-2/x1^2+2/x1^3-3*x1^2));
fork=1:
100
x1=x2;
x2=((2/x1-1/x1^2-x1^3)-x*(-2/x1^2+2/x1^3-3*x1^2))/(5-(-2/x1^2+2/x1^3-3*x1^2));
end
x1
输出结果为:
x1=3.4802308631248458912724395623836
⑤迭代函数为
,算法设计为:
x1=1;
x2=2/x1^3-5/x1-1/x1^4;
fork=1:
100
x1=x2;
x2=2/x1^3-5/x1-1/x1^4;
end
x1
输出结果为:
x1=1.8933
若用加速迭代函数
,算法设计为:
x1=1;
x2=((2/x1^3-5/x1-1/x1^4)-x*(-6/x^4+5/x^2+4/x^5))/(1-(-6/x^4+5/x^2+4/x^5));
fork=1:
100
x1=x2;
x2=((2/x1^3-5/x1-1/x1^4)-x*(-6/x^4+5/x^2+4/x^5))/(1-(-6/x^4+5/x^2+4/x^5));
end
x1
输出结果为:
x1=1.7968059417612661783255756706113
3.求解下列方程组
(1)①用solve()对方程组求解
程序:
[x,y]=solve('2*x-y-exp(-x)','-x+2*y-exp(-y)')
结果:
x=
.56714329040978387299996866221036
y=
.56714329040978387299996866221036
②用fsolve()对方程组求解:
建立M文件,程序:
functionf=qhs(x)
f
(1)=2*x
(1)-x
(2)-exp(-x
(1));
f
(2)=-x
(1)+2*x
(2)-exp(-x
(2));
输入fsolve('qhs',[1,1])
结果:
ans=
0.56710.5671
(2)
①用solve()对方程组求解
程序:
[x1,x2,x3]=solve('x1^2-5*x2^2+7*x3^2+12','3*x1*x2+x1*x3-11*x1','2*x2*x3+40*x1')
double(x1)
double(x2)
double(x3)
结果:
ans=
1.0e+02*
0.0100
0
0
-0.0031
0
0
-3.8701+0.3270i
-3.8701-0.3270i
ans=
5.0000
1.5492
-1.5492
2.9579
0
0
-0.3123-50.8065i
-0.3123+50.8065i
ans=
1.0e+02*
-0.0400
0
0
0.0213
0+0.0131i
0-0.0131i
0.1194+1.5242i
0.1194-1.5242i
②用fsolve()对方程组求解:
程序:
functionf=qhst(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);
外部调用fsolve('qhst',[1,1])
结果:
Optimizationterminated:
first-orderoptimalityislessthanoptions.TolFun.
y=
0.00001.54920.0000
直接使用MATLAB命令:
solve()和fsolve()对方程组求解。
4.编写用二分法求方程根的函数M文件。
以以解方程x2-x-2=0为例
functionf=fc(x)
f=x^2-*x-2;
functionf=qiugen(x)
m=x
(1);n=x
(2);
while(n-m)>10^(-5)
iffc(m)==0
f=m;
break;
elseiffc(n)==0
f=n;
break;
elseiffc((m+n)/2)==0
f=(m+n)/2;
break;
elseiffc(m)*fc((m+n)/2)<0
n=(m+n)/2;
f=(m+n)/2;
else
m=(m+n)/2;
f=(m+n)/2;
end
end
end
end
end
在函数体外部调用函数,输入:
>>x=[0.5,2];root=qiugen(x)
输出结果
root=1.0000
应用实验
一、实验内容
炮弹发射角的问题
炮弹发射视为斜抛运动,已知初始速度为200m/s,问要击中水平距离360m、垂直距离160m的目标,当忽略空气阻力时,发射角应多大?
此时炮弹的运行轨迹如何?
进一步思考:
如果要考虑水平方向的阻力,且设阻力与(水平方向)速度成正比,系数为0.1(1/s),结果又如何?
此时炮弹的运行轨迹如何?
二、问题分析
总结与体会
通过该实验的学习,能灵活应用MATLAB软件解决一些简单问题,能借助MATLAB软件的绘图功能,对函数的特性进行探讨,联想,猜想,发现进而证实其中的规律。
教师签名
年月日