数学建模上机实验报告.docx
《数学建模上机实验报告.docx》由会员分享,可在线阅读,更多相关《数学建模上机实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
数学建模上机实验报告
数学实验与数学建模实验报告
学院:
软件学院
完成时间:
2011年1月8日
数学实验学习体会
(每个人必须要写1500字以上,占总成绩的20%)
第一次做实验,好多都不会,原因很多的。
第一个实验时,不知道如何输入需要的函数表达式,问好多同学后才知道的,再输入后不知道如何运行,环境不熟悉。
第二个实验时,不知到如何生成随机矩阵,问同学也没有解决,最后是查质料才明白的。
这两个是最基础的,可竟然不会,这说明还要努力的,这没得商量。
本来都是基础实验,为何会不会呢?
显然是不认真和不好好学,再加上刚进大学,好多不知道如何入手,处于迷茫境地造成的。
我原以为数学建模就像初中怎么解应用题一样觉得对解决一些常用的数学应用题很有用,但我知道它学的竟然是MATLAB,弄的是程序,还要学好英语,对矩阵也有一定要求。
而我英语是非常差的,所以刚开始时对MATLAB立的英语单词很多不会,所以很困难去用这个软件。
而且矩阵我们没学过,所以很难懂。
数学建模实验用了好多数学函数,我虽然数学知识好,但对于这方面的经验简直是一窍不通,一切从头学起,在做第三个实验时,难得我们几个都流汗,都没接触过,弄了半天没有结果,我们四个用了半个小时才找到用这种方法解决它,从中学到和作好重要。
虽然第一次只作了四个实验,但学到的东西也是很多的,至少学到了如何编写和如何运行,还知道了向他人寻求帮助,能力是最重要的。
当我遇到矩阵时,我很难处理,因为我原以为数学建模就像初中怎么解应用题一样觉得对解决一些常用的数学应用题很有用,但我知道它学的竟然是MATLAB,弄的是程序,还要学好英语,对矩阵也有一定要求。
而我英语是非常差的,所以刚开始时对MATLAB立的英语单词很多不会,所以很困难去用这个软件。
而且矩阵我们没学过,所以很难懂。
第二次实验,虽说比第一次快了一点,但还是好多不会的,感觉自己的东西好少。
我学的是软件,因此这次处理的还是很顺利的,就是好多与我学的有点不一样,需要按照现在的命令来处理。
速度自然慢了下来,就是这五个实验中,第一个函数中,函数的输入很难,出了好多错误,有没声明的,有不符合matlab要求的,有不能出结果的,还有不知什么原因的,总之挺不好说的。
第二个和第三个是常见的,没遇到多大问题,只是调了一些代码,这让我知道,不同语言之间有好多相通的。
就是第五个实验要处理数组,不知如何声明,运行不了,再者就是不知如何才能保证某些数不变,某些数变,这我是用c++的知识解决的,出了一个警告。
第三个作图实验中,好多函数挺难弄得,函数声明不合法是最频繁的,其次是语句间的逗号和分号用错,再者就是把因变量的名字定义错了或者重复了,或者就是拉下了,这一点是我需要注意的,也是必须改掉的。
随着上机的次数增多,老师讲解的越来越起作用,我对这个课程的学习慢慢的明白了是怎样的一个过程,虽说这个课程很难,但只要用心学,就不会有问题的。
随着上机的次数增多,我对一些基本的数学问题,尤其是一些刚接触的教学内用有了新的认识,慢慢的明白了matlab的优越性,但是数学建木真的很难,尤其是课后的这几次上机,对它的用途几乎一窍不通。
随着一次一次用的增多,也就慢慢的明白了。
当初选这门课,是因为我的数学很好,但是真正接触之后才明白,这与我想的根本不一样的,这简直就是一个应用软件,用来解决一些超复杂的数学问题的,对我这个学习软件的人来说本来就是一种幸事。
虽说当初很愿意,后来又很烦,但既然选了这门课,就应该坚持到底,所以我很用心学,即使听不懂,那也没关系的。
这要我用心学了,我就不后悔。
当初直说上课,没说做实验的事,也就没当回事,只是做一下笔记,上课认真听。
可经过做实验,发现知识的获得不是简单的听就能获得的,而是需要大量的练习,再加上深入的理解和自己亲身实践和思考才能获得。
做第四次和第五次实验时,对于一些很难的数学问题,我又回到了我处理问题的方面来。
我们几个组织分工,去查资料,去网上查询要找的内用,慢慢的出试图寻找解决的方法,虽说很费时间,但我从中学到很多不同寻常的道理。
要想解决大的问题,有时一个人的力量根本就不够,我们需要好多人的集体合作,这要才能有时间限制的作业在很短的时间内完成。
我们都知道,数学建模有很大的用处。
但学好它真的不是件容易的事。
这需要我发非很多时间去琢磨他这样做的原因,有没有更好的办法来解决这样的问题。
虽说我的知识很少,受到很多限制,到我相信只要我去思考就会有结果的,只是时间的问题。
就如刚开始时,我连怎么输入程序的下一行的不知道,怎样把函数f(x)的x定义自变量也不知道。
但通过了看资料书和上网搜索我知道了。
学任何东西开始都难的,就看谁能坚持到最后!
曾经我也试图下载MATLAB软件,但没找到资源,所以没下到,这对于我课后复习与操作带来了不少困难。
所幸一同学他有,从他那拷贝过来,后来就相当简单了点。
但这只是没办法的事,如果我学的很好,根本就不需要这样做的,每周的上机时间就够我用了,我可以解决很多问题而不用有所担心的,只是我学的不够多,受到很多限制。
通过学习我也明白了,MATLAB是个非常好的数学软件,它能代替人们计算,解决很多数学问题,这样就能节约我们不少时间,但作为大学生,尤其大一的,我们不能过分的依赖这个软件,我们应该要学会用笔解决问题,但用它来验证我们计算的正确与否还是有帮助的。
但如果我们毕业了后,对于那些我们只要花上点时间就能做出的,我们用MATLAB来做就方便多了,以后遇到很多问题我们不可能一一自己完成,我们既然学了计算机,学了程序,学了MATLAB,何不用它来代替我们计算呢?
总之,虽说我学的不够好,但我认为学了数学建模,掌握MATLAB,对我以后的工作会非常有用的。
我已经从中学到了很多东西,我还会从中学到许多我想不到的东西的。
实验一:
Matlab基本操作
一、实验基本情况
【实验重点】Matlab软件的一些基本操作和常用命令
【实验难点】Matlab软件的一些基本操作和常用命令
二、实验内容
【目的要求】
通过本实验使学生了解Matlab软件,学会Matlab软件的一些基本操作和常用命令,熟悉Matlab软件的一些数值计算功能。
【实验内容】
1、计算
的值。
2、产生一个5阶魔术方阵,并执行如下操作:
(1)将矩阵的第2行3列元素赋值给变量c
(2)将由矩阵第2,3,4行第3,5列构成的子矩阵赋值给变量d
3、给出区间[0,1]上的6个等分点数据。
4、建立如下矩阵
(1)
(2)
【注意事项】
1、注意编写Matlab计算式与书写体之间的区别。
2、Matlab命令与其他程序语言的区别。
3、注意养成良好的编程习惯。
作业答案:
(1)
1.369^2+sin(7/10*pi)*(26.48)^(1/2)/2.9
ans=
3.3097
(2)
E=magic(5)
E=
17241815
23571416
46132022
101219213
11182529
>>c=E(2,3)
c=
7
d=E(2:
1:
4,3:
2:
5)
d=
716
1322
193
(3)
c=0:
1/7:
1
c=
00.14290.28570.42860.57140.71430.85711.0000
(4)
1.d=diag([2007,2007,2007,2007,2007,2007,2007,2007,2007,2007])
d=
2007000000000
0200700000000
0020070000000
0002007000000
0000200700000
0000020070000
0000002007000
0000000200700
0000000020070
0000000002007
2
D=10*ones(10,10)
D=
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
10101010101010101010
>>E=diag([-10,-10,-10,-10,-10,-10,-10,-10,-10,-10,])
E=
-10000000000
0-1000000000
00-100000000
000-10000000
0000-1000000
00000-100000
000000-10000
0000000-1000
00000000-100
000000000-10
>>F=D+E
F=
0101010101010101010
1001010101010101010
1010010101010101010
1010100101010101010
1010101001010101010
1010101010010101010
1010101010100101010
1010101010101001010
1010101010101010010
1010101010101010100
实验二:
Matlab程序设计
一、实验基本情况
【实验重点】顺序、循环和选择三种语句的用法
【实验难点】顺序、循环和选择三种语句的用法
二、实验内容
【目的要求】
学会编写简单的Matlab程序,掌握条件、循环和选择三种语句的用法。
【实验内容】
1、已知函数
计算
,并作出该函数的曲线图。
2、用for-end循环语句求:
100!
和
。
3、用while-end循环语句求不超过1000的偶数之和与奇数之和。
4、建立一个命令M-文件:
求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。
例如,153是一个水仙花数,因为153=13+53+33。
5、建立如下矩阵
(1)
(2)
【注意事项】
1、用规范、合法的Matlab命令编写程序,尽可能使程序模块化。
2、给变量命名时,尽量使变量容易识别。
3、注意养成良好的编程习惯。
作业答案:
(1)
x=input('x=?
');
ifx>=-1&x<0
y=x+1
elseifx>=0&x<1
y=1
elseifx>=1&x<=2
y=x^2
end
图像
x=linspace(-1,2);
y=[];
forx0=x
ifx0>=-1&x0<0
y=[y,x0+1];
elseifx0>=0&x0<1
y=[y,1];
elseifx0>=1&x0<=2
y=[y,x0^2];
end
end
plot(x,y)
(2)
1y=1;n=100;
fori=1:
100
y=y*i;
end
y
y=
9.3326e+157
2y=0;n=100;
fori=1:
100;
y=y+i;
end
y
y=
5050
(3)偶数和sum=0;
n=1;
while2*n<=1000;
sum=sum+2*n;
n=n+1;
end
sum
sum=
250500
奇数和
sum=0;
n=1;
while2*n-1<=1000;
sum=sum+2*n-1;
n=n+1;
end
sum
sum=
250000
(3)form=100:
999
m1=fix(m/100);
m2=rem(fix(m/10),10);
m3=rem(m,10);
ifm==(m1)^3+(m2)^3+(m3)^3
disp(m)
end
end
153
370
371
407
(5)
1
a=diag([10:
10:
100])
a=
10000000000
02000000000
00300000000
00040000000
00005000000
00000600000
00000070000
00000008000
00000000900
000000000100
b=ones(10)
b=
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
c=tril(b,-1)
c=
0000000000
1000000000
1100000000
1110000000
1111000000
1111100000
1111110000
1111111000
1111111100
1111111110
d=a+c
d=
10000000000
12000000000
11300000000
11140000000
11115000000
11111600000
11111170000
11111118000
11111111900
111111111100
2
a=diag([2007,2007,2007,2007,2007])
a=
20070000
02007000
00200700
00020070
00002007
b=diag(20:
10:
50,1)
b=
020000
003000
000400
000050
00000
a+b
ans=
200720000
020073000
002007400
000200750
00002007
实验三:
使用Matlab作图
一、实验基本情况
【实验重点】Matlab软件绘制二维、三维曲线曲面图形命令
【实验难点】利用Matlab软件绘制一些特殊函数的图形
二、实验内容
【目的要求】
掌握用Matlab软件绘制简单曲线、曲面图形,并通过绘制一些特殊函数的图形,更加深入地理解相关函数的性质,了解函数的性态。
【实验内容】
1.在同一坐标系下面画出
和
在区间
上的曲线图。
2.作下列函数的图形
(1)
(2)
3.绘制三维螺旋线:
4.作出下列曲面的3维图形,
1)
;
2)环面:
。
【注意事项】
1、注意数据点的选取,疏密应适当。
2、画曲面图时,注意网格点的选取。
作业答案:
(1)
x=(0:
pi/100:
2*pi);
y1=0.2*exp(0.1*x)+sin(0.5*x);
y2=0.2*exp(0.1*x)+cos(0.5*x);
plot(x,y1,'b')
holdon
plot(x,y2,'r')
(2)
1
t=(0:
pi/100:
2*pi);
x=2*(cos(t)).^3;
y=2*(sin(t)).^3;
plot(x,y)
2
t=(0:
pi/100:
2*pi);
x=2*(t-sin(t));
y=2*(1-cos(t));
plot(x,y,'g')
(3)
t=0:
0.00001:
pi;
x=2*cos(t);
y=2*sin(t);
z=0.5*t;
plot3(x,y,z,'r')
grid
(4)
1ezplot('sin(pi.*sqrt(x^2+y^2))',[0,2*pi])
2u=0:
pi/100:
2*pi;
v=0:
pi/100:
2*pi;
x=(1+cos(u)).*cos(v);
y=(1+cos(u)).*sin(v);
z=sin(u);
plot3(x,y,z,'rp');
grid;
实验四:
使用Matlab解决微积分问题
一、实验基本情况
【实验重点】MATLAB符号变量与符号表达式创建方法和命令使用。
【实验难点】用符号微积分方法和命令解决数学问题。
二、实验内容、实验用具与时间安排
【目的要求】
掌握MATLAB中求函数极限命令;掌握MATLAB导数和微分命令;掌握MATLAB不定积分和定积分命令;掌握MATLAB级数求和与泰勒级数展开命令。
【实验内容】
1、求下列函数的极限:
(1)
(2)
(3)
(4)
2、按要求实现下面的求导运算:
(1)已知
,求
;
(2)已知
,求
。
3、已知函数
。
使用Matlab软件,完成下面的实验任务:
(1)求出函数
的一阶导数,二阶导数,并画出它们相应的曲线。
(2)观察函数的单调区间,凹凸区间,以及极值点和拐点。
4、使用Matlab软件,完成下列积分运算:
(1)求不定积分
;
(2)求定积分:
;
(3)求二重积分:
;
(4)求三重积分:
。
5、试求解无穷级数的和
6、试求出函数
的麦克劳林幂级数展开式的前9项,并求出关于
的Taylor幂级数展开式的前5项。
7、求微分方程y’+y+xy2=0的通解.
8、求微分方程的通解及满足初始条件y(0)=2的特解.
9、求微分方程的通解及满足初始条件y(0)=0的特解.
【注意事项】
1、注意Matlab符号变量的定义。
2、实验之前复习微积分的相关知识。
作业答案:
(1)
1symsx
limit((cos(x)-exp(-(x^2/2)))/x^4,x,0)
ans=
-1/12
2symsx
limit(1+(2/x)^(3*x),x,inf)
ans=
Inf
3symsx
limit(1/x,x,0,'right')
ans=
Inf
4symsx;
limit((2^x-log(2^x)-1)/(1-cos(x)),x,0)
ans=
log
(2)^2
(2)
1symsx
diff(exp(2*x)*log(x^2+1).*tan(-x),x,1)
ans=
-2*exp(2*x)*log(x^2+1)*tan(x)-exp(2*x)*log(x^2+1)*(tan(x)^2+1)-(2*x*exp(2*x)*tan(x))/(x^2+1)
symsx
diff(exp(2*x)*log(x^2+1).*tan(-x),x,3)
ans=
(12*x*exp(2*x)*tan(x))/(x^2+1)^2-8*exp(2*x)*log(x^2+1)*tan(x)-2*exp(2*x)*log(x^2+1)*(tan(x)^2+1)^2-(6*exp(2*x)*(tan(x)^2+1))/(x^2+1)-12*exp(2*x)*log(x^2+1)*(tan(x)^2+1)-4*exp(2*x)*log(x^2+1)*tan(x)^2*(tan(x)^2+1)-(24*x*exp(2*x)*(tan(x)^2+1))/(x^2+1)-(24*x*exp(2*x)*tan(x))/(x^2+1)-(12*exp(2*x)*tan(x))/(x^2+1)+(12*x^2*exp(2*x)*(tan(x)^2+1))/(x^2+1)^2-12*exp(2*x)*log(x^2+1)*tan(x)*(tan(x)^2+1)+(24*x^2*exp(2*x)*tan(x))/(x^2+1)^2-(16*x^3*exp(2*x)*tan(x))/(x^2+1)^3-(12*x*exp(2*x)*tan(x)*(tan(x)^2+1))/(x^2+1)
2symsxy;
z=((x^2+y^2)*exp((x^2+y^2)/x*y));
diff(z,x)
=
2*x*exp((x^2+y^2)/x*y)+(x^2+y^2)*(2*y-(x^2+y^2)/x^2*y)*exp((x^2+y^2)/x*y)
symsxy;
z=((x^2+y^2)*exp((x^2+y^2)/x*y));
diff(z,x,2)
=
2*exp((x^2+y^2)/x*y)+4*x*(2*y-(x^2+y^2)/x^2*y)*exp((x^2+y^2)/x*y)+(x^2+y^2)*(-2/x*y+2*(x^2+y^2)/x^3*y)*exp((x^2+y^2)/x*y)+(x^2+y^2)*(2*y-(x^2+y^2)/x^2*y)^2*exp((x^2+y^2)/x*y)
symsxy;
z=((x^2+y^2)*exp((x^2+y^2)/x*y));
diff(z