MATLAB在实际生活中的应用小论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 在实际问题中的分析与应用
自20世纪80年代以来,出现了多种科学计算语言,亦称数学软件,比较流行的有MATLAB 、Mathematical 、Maple 等。
因为他们具有功能强、效率高、简单易学等特点,在在许多领域等到广泛应用。
MATLAB 便是一种影响大、流行广的科学计算语言。
MATLAB 的语法规则简单,更加贴近人的思维方式。
MATLAB 是英文Matrix Laboratory(矩阵实验室)的缩写。
自1984年由美国Math Works 公司推向市场以来,得到了广泛的应用和发展。
在欧美各高等院校MATLAB 已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等诸多课程的基本教学工具,成为大学生、硕士生以及博士生必须掌握的基本技能。
在设计研究单位和工业部门,MATLAB 已被广泛的应用于研究和解决各种具体的工程问题。
近年来,MATLAB 在我国也开始流行,应用MATLAB 的单位和个人急剧增加。
可以预见,MATLAB 将在我国科学研究和工程应用中发挥越来越大的作用。
Mat lab 是当前数值计算方面应用地非常广泛的一种计算机软件,特别是在工程应用求解中发挥了重要作用。
其所具有的浅显易懂的编程语言、强大的绘图功能、大量的内部函数等都深深地吸引了我认真地去学习它。
同时在上《过程装备力学基础》时,其中涉及有很多的问题是超越方程、微积分的问题,难以用普通的线性方法求解,而Mat lab 在此方面有强大的功能,特别是超越方程的精确求解以及图形的绘制方面。
数学当中的绘制函数图象、绘制立体图形的交线(如绘制两个等直径圆柱体的交线)、求多项式的根等问题,这些问题如果依靠我们人工进行操作,则需要很多的时间和精力,当我们掌握了基本原理后,借助于MATLAB 进行解决则会大大提高效率和精确度。
仅举一些运用MATLAB 的例子。
常用控制命令:
click :%清屏; clear :%清变量; save :%保存变量; load :%导入变量 一、利用公式直接进行赋值计算
本金P 以每年n 次,每次i%的增值率(n 与i 的乘积为每年增值额的百分比)增加,当增加到r ×P 时所花费的时间T 为:(利用复利计息公式可得到下式)
)
01.01ln(ln )01.01(i n r
T i P P r nT +=
⇒+=⨯(12,5.0,2===n i r )
MATLAB 的表达形式及结果如下: >> r=2;i=0.5;n=12; %变量赋值 >> T=log(r)/(n*log(1+0.01*i)) 计算结果显示为:
T = 11.5813
即所花费的时间为T=11.5813 年。
分析:上面的问题是一个利用公式直接进行赋值计算问题,实际中若变量在某个范围变化取很多值时,使用MATLAB ,将倍感方便,轻松得到结果,其绘图功能还能将结果轻松的显示出来,变量之间的变化规律将一目了然。
若r 在[1,9]变化,i 在[0.5,3.5]变化;我们将MATLAB 的表达式作如下改动,结果如图1。
r=1:0.5:9; i=0.5:0.5:3.5; n=12;
p=1./(n*log(1+0.01*i)); T=log(r')*p; Plot (r, T)
Label('r') %给x 轴加标题 label('T') %给y 轴加标题
q=ones (1,length (i);
text(7*q-0.2,[T(14,1:5)+0.5,T(14,6)-0.1,T(14,7)-0.9],num2str(i'))
r
T
图1
从图1中既可以看到T 随r 的变化规律,而且还能看到i 的不同取值对T —r 曲线的影响(图中的六条曲线分别代表i 的不同取值)。
二、已知多项式求根
已知多项式为962001161031102
3
4
5
6
-+--+-=x x x x x x h ,求其根。
分析:对多项式求根问题,我们常用roots()函数。
MATLAB 的表达形式及结果如下: >> h=roots([1 -10 31 -10 -116 200 -96]) %中括号内为多项式系数由高阶到常数。
计算结果显示为(其中i 为虚数单位): h =
-2.0000 4.0000 3.0000 2.0000 + 0.0000i 2.0000 - 0.0000i 1.0000
如果已知多项式的根,求多项式,用poly()函数。
对上面得到的h 的值求多项式,其MATLAB 的表达形式及结果如下:
>>h=[-2.0000 4.0000 3.0000 2.0000+0.0000i 2.0000-0.0000i 1.0000]; >>c=poly (h) 计算结果显示为:
c =
1 -10 31 -10 -116 200 -96 三、方程组的求解
求解下面的方程组:⎪⎩⎪⎨⎧=++=++=++12
29447535
.768321
321321x x x x x x x x x
分析:对于线性方程组求解,常用线性代数的方法,把方程组转化为矩阵进行计算。
b ax =b a x 1
-=⇒b a x \=⇒ MATLAB 的表达形式及结果如下: >> a=[8 1 6;3 5 7;4 9 2]; %建立系数矩阵
>> b=[7.5;4;12]; %建立常数项矩阵
>> x=a\b %求方程组的解
计算结果显示为:
x =
1.2931
0.8972
-0.6236
四、数据拟合与二维绘图
在数学建模竞赛中,我们常会遇到这种数据表格问题,如果我们仅凭眼睛观察,很难看到其中的规律,也就更难写出有效的数学表达式从而建立数学模型。
因此可以利用MATLAB的拟合函数,即prolific() 函数,并结合MATLAB的绘图功能(利用plot()函数),得到直观的表示。
例:在化学反应中,为研究某化合物的浓度随时间的变化规律,测得一组数据如下表:
分析:
MATLAB 的表达形式如下:
t=[1:16]; %数据输入
y=[4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6];
plot(t,y,'o') %画散点图
p=politic(t,y,2) %二次多项式拟合
Hold on
xi=lenspiece(0,16,160); %在[0,16]等间距取160 个点
y I =polygala(p, xi); %由拟合得到的多项式及xi,确定y i
plot(xi, y I ) %画拟合曲线图
执行程序得到图2;
图2
显示的结果为
p=
-0.0445 1.0711 4.3252
p的值表示二阶拟合得到的多项式为:y= -0.0445t2+1.0711t+ 4.3252
下面是用lsqcurvefit()函数,即最小二乘拟合方法的Mat lab表达:
t= [1:16];
y= [4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6];
x 0=[0.1,0.1,0.1];
min=inline ('x(1)*t.^2+x(2)*tax(3)','x','t');
x=lsqcurvefit(zuixiao,x0,t,y) %利用最小二乘拟合
其显示的结果为:
x =
-0.0445 1.0711 4.3252
可以看出其得到的结果与politic函数的结果相同。
这说明在多项式拟合问题上这两个函数的效果是相同的。
下面的一个例子将体现lsqcurvefit()函数的优势。
例2: 在物理学中,为研究某种材料应力与应变的关系,测得一组数据如下表:
试计算a 、b 的值。
MATLAB 的表达形式如下:
x= [925, 1125, 1625, 2125, 2625, 3125, 3625];
y= [0.11, 0.16, 0.35, 0.48, 0.61, 0.71,0.85 ];
Plot (t,y,’o')
[p,resid1]=politic(x, y, 2)
Hold on
Xi=lenspiece (700, 3700, 3000);
Yi =polygala (pox);
Plot ( xi, y I )
X0= [0.1, 0.1];
Fife =inline ('a (1)+a(2)*log(x)','a' ,' x');
[a,resid2]=lsqcurvefit (ff f , x0,x,y)
plot( xi, ff f a, xi),'r')
执行程序得到图3,图中蓝色曲线为利用prolific()函数得到的曲线,红色曲线为利用lsqcurvefit()函数得到的曲线;
500
1000
1500
2000
2500
3000
3500
4000
-0.100.10.20.30.40.50.60.70.80.9
其显示的结果为: p =
-0.0000 0.0004 -0.2266 resid1 =
R: [3x3 double] D f: 4 Norms: 0.0331 a =
-3.5810 0.5344 resid2 = 0.0064
其中a 的值代表利用lsqcurvefit()函数得到的关系为:ε=-3.5810+0.5344σ
resid1、resid2 分别代表运用politic()函数、lsqcurvefit()函数得到的残差。
可以看出利用lsqcurvefit()函数残差更小,即得到了更好的拟合效果。
在数学建模的实际问题中,如果问题的机理不明,我们只能采用politic()函数,即多项式拟合的方法,以获得近似的数据描述函数;但如果通过分析,可以得到一些机理,那么采用最小二乘的方法将得到更好的效果,而且得到的拟合函数也更有意义。
五、隐函数的图形绘制
plot()只能绘制显函数图形,对于形如
0)sin()1ln(ln 1
=-++-+-x x y y y
的复杂隐函数,很难转化为显函数并利用plot()函数绘制图形,这时就可以用employ()函数直接绘制其曲线。
MATLAB 的表达形式如下:
>> e z plot ('1/y-log(y)+log(-1+y)+x-sin(x)') 执行程序得到图5
x
y
x
y
图5 图6
如果是形如下面的参数方程),0(,sin 3sin ,cos 3sin π∈==t t t y t t x ,同样可以利用e z plot()函数绘制其曲线。
MATLAB 的表达形式如下:
>> e z plot('sin(3*t)* cost (t)','sin(3*t)*sin(t)',[0,pi]) 执行程序得到图6。
六、三维图形绘制
假设有一个时间向量t ,对该向量进行下列运算则可以构成三个坐标值向量
t z t y t x ===,cos ,sin
对于上面的方程可以利用ezplot3()函数或plot3()函数绘制三维曲线。
这里仅列举ezplot3()函数的使用。
MATLAB 的表达形式如下: >> ezplot3 (‘sin (t)',’cost (t)','t',[0,6*pi]) 执行程序得到图7:
绘制下述曲面:πθθθ20,10),3cos(),(3≤≤≤≤=r r r z 其中 MATLAB 的表达形式如下: N r=12; nth=50; r= inscape (0, 1, nr);
Theta = inscape (0, 2* pi, nth); [R, T]=mesh grid (retreat) x=cost (theta')*r; y=sin (theta')*r;
Surf(x, y, R. ^3.*cos (3*T)) 执行程序得到图8。
x
z
图7 图8
除了surf()函数还有surf ()、surf()、mesh()、waterfall()函数也用于曲面的绘制,具体效果如图9所示,可以针对自己的需要选取适合的曲面绘制函数。
图9
MATLAB作图之三维绘图示例山体绘制
%三维绘图示例山体绘制
%mesh函数演示
x=1.0:0.1:2.0;
y=2.0:0.1:3.0;
[X,Y]=mesh grid(x, y );
z=[5.11 5.13 5.14 5.13 5.09 5.04 4.98 4.93 4.89 4.85 4. 85
5.39 5.49 5.51 5.46 5.32 5.14 4.94 4.74 4.59 4.49 4.48
5.61 5.77 5.81 5.71 5.51 5.23 4.90 4.59 4.36 4.21 4.19
5.73 5.92 5.97 5.86 5.62 5.27 4.88 4.51 4.23 4.05 4.03
5.74 5.92 5.97 5.86 7.62 5.27 4.88 4.51 4.21 4.04 4.02
5.63 5.79 5.84
6.74 10.53 9.23 8.91 4.59 4.33 4.18 4.16
5.42 5.53 5.56 5.49 7.35 5.16 4.93 4.73 4.55 4.45 4.44
5.14 5.18 5.19 5.17 11.12 5.05 4.97 4.90 4.84 4.81 4.80
4.48 4.80 4.79 4.82 4.87 4.94
5.02 5.10 5.16 5.19 5.20
4.56 4.45 4.43 4.49 4.64 4.84
5.06 5.28 5.45 5.55 5.56
4.36 4.19 4.16 4.25 4.47 4.76
5.09 5.41 5.66 5.81 5.83];
figure(1)
%画网格图
mesh(X,Y, z );
color map([0 1 0]);
label('x轴');
label('y轴');
label('z轴');
%画表面图
figure(2)
surf(X,Y,z);
color map(1 0 0)
x label('x轴');
y label('y轴');
z label('z轴');
x 轴
z 轴
x 轴
z 轴
七、二项分布的使用
飞机成功起飞的概率问题:
由16 架飞机组成的空军飞行中队要求做好立即起飞的准备,其中一架飞机不能立即起飞的概率为 20%,重新起飞需几分钟的时间,因此一架飞机立刻起飞的概率为0.80。
12 架飞机能够成功起飞的概率为多少?
分析:这是一个概率中的二项分布问题,常用bipods()函数。
h=bipods(12,16,0.80) %二项分布函数的概率值 计算结果为
h=0.2001
另一方面,至少有14架飞机立刻成功起飞的概率为:
h=1-binocdf(13,16,0.80) % 或 h=sum(binned(14:16,16,0.80)), 其中binned()为二项分布的累积概率值,计算结果为h=0.3518。
在实际的数学建模竞赛中,仅罗列一个一个的数据是枯燥而又不直观的,很难吸引人们的注意,也不容易打动评委们的心;因此,结合数值计算结果,并合理的利用MATLAB 的绘图功能会起到事半功倍的效果。
下面的程序为运行结果的绘图(图10)表示: n=1:16;
h=bin opt (n, 16, 0.80);
plot([nun],[zeros(1,16);h],'k') %二维绘图函数
text(8-.7:16-.7,h(8:16)+.005,num2str(h(8:16)',3)) %在图中进行注释函数 axis([0 17 0 0.27]) %坐标轴取值范围函数
x label('Number of aircraft launched on time') %给x 轴加标题 y label('probability') %给y 轴加标题 Set (gca,'XTick', 0:2:16)
set(gca,'XTickLabel',{'0 架','2 架','4 架','6 架','8 架','10 架','12 架','14 架','16 架'})
Number of aircraft launched on time
p r o b a b i l i t y
图10 图11 根据例5中的数据,用线性回归的方法画出95%的置信区间,见图11,程序如下: x=[1:16]; %数据输入
y=[4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6]; [presid1]=poly fit(x, y, 2)
[What, w]=polyclone (p, x, resid1, 0.05);
plot(x, yhat,'k-',x,yhat-w,'k--',x,yhat+w,'k--',x,y,'ks',[x ;x],[yeasty],'k-')
残差的进一步分析:
首先计算残差值,然后用函数norm plot 将其画在图12中,以观察残差是否服从正态分布。
程序为: x=[1:16]; %数据输入
y= [4 6.4 8 8.4 9.28 9.5 9.7 9.86 10 10.2 10.32 10.42 10.5 10.55 10.58 10.6]; [p ,resid1]=politic(x, y, 2) Norm plot(y-ploy l(p, x))
white('white') %设置背景为白色
Data
P r o b a b i l i t y
图12 图13 由图12看出,这些残差点与直线非常接近,由此得出结论,这些残差值非常接近于正态分布,选择 的模型是合适的。
通过对Mat lab 相关知识的运用,加强了Mat lab 软件的应用能力,加深了方程求根方法的理解,特别是对Mat lab 软件编程中的一些细节的把握中有了较大的提高。
无疑这次论文的写作过程是一个不断学习、不断提高的过程,如果Mat lab 的考核只是一次简单的
考试,可能我只学会了如何去解题,而对Mat lab 的理解还只是停留于表面,但是一次真正的实践,通过用Mat lab 中所学的去解决一个实际问题,这个锻炼无疑是更大的,其意义也更大。
对于这次编程任务的完成,我想一方面靠自己的努力,一方面依靠科技的对我们的帮助。
同时我也意识到自己对MATLAB 还不够了解,今后需要花更多时间在这门课上,以求更好的掌握MATLAB。
在学习的过程中,我感受到了MA TLAB软件其功能的强大,不仅可以很方便地用C语言来进行编程,而且还具有超强大的处理矩阵的能力,这对于解决那些复杂的矩阵方程是有很大的帮助的。
除此之外,就我这几天对MATLAB的接触,我还认识到它还可以直接画电路图来进行仿真处理问题。
丰富的模块类别涵盖大量的元器件,使画起图来非常得方便,仿真的效果也不错,速度也较快。
总之,这几天让我感觉到学会了MA TLAB在以后的工作与学习中将会有很大的作用,帮助我们解题进步。
当然,MATLAB还有很多强大的功能等待我们去探索,尤其是我们马上就要进入大二下半学期的学习当中,并且我想接下来一年,在大三的学习中,更多的专业课会接踵而至,能够掌握一款实用并且强大的软件是一件很必要的事情,现在,MA TLAB就摆在我们面前,我会用心学习MATLAB的其他的功能,希望可以为以后的专业学习和将来的工作带来便利。
专业:统计
班级:2012级统计一班
学号:20121050124
姓名:王欣妍。