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%的增值率(ni的乘积为每年增值额的百分比)增加,当增加到r×P
时所花费的时间T为:(利用复利计息公式可得到下式)
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'))
图1
从图1中既可以看到Tr的变化规律,而且还能看到i的不同取值对Tr曲线的影响(图中的六条曲线分别代表i的不同取值)。
二、已知多项式求根
已知多项式为,求其根。
分析:对多项式求根问题,我们常用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
三、方程组的求解
求解下面的方程组:       
分析:对于线性方程组求解,常用线性代数的方法,把方程组转化为矩阵进行计算。
         
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()函数),得到直观的表示。
例:在化学反应中,为研究某化合物的浓度随时间的变化规律,测得一组数据如下表:
T(分)
1
2
3
4
5
6
7
8
y
4
6.4
8.0
8.4
9.28
9.5
9.7
9.86
T(分)
9
10
11
12
13
14
15
16
y
10
10.2
10.32
10.42
10.5
10.55
10.58
10.6
分析:
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: 在物理学中,为研究某种材料应力与应变的关系,测得一组数据如下表:
应力σ
925
1125
1625
2125
2625
3125
3625
应变ε
0.11
0.16
0.35
0.48
0.61
0.71
0.85
如果假定应力与应变有如下关系(σ为应力值,ε为应变值):
试计算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= matlab学好了有什么用[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()函数得到的曲线;
其显示的结果为:
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 σ
resid1resid2 分别代表运用politic()函数、lsqcurvefit()函数得到的残差。可以看出利用lsqcurvefit()函数残差更小,即得到了更好的拟合效果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。