趙 華
(黔南民族師范學院 物理與電子科學學院,貴州 都勻 558000)
近幾十年來,隨著計算機的普及和相關技術的迅速發展,許多使用方便、功能強大的數學計算軟件應運而生。相關課程的學習如果能和這些軟件的使用結合起來,就能夠將學生從繁瑣的數學計算中解脫出來,取得事半功倍的效果[1]。一直以來,MATLAB是影響和應用最廣泛的數學計算軟件之一。

MATLAB數值計算處理的對象是具體的數字。因此,應將問題中所有的計算對象首先數值化,用矩陣的形式表示出來。即使是一個單獨的數字,也要視為一個1行1列的矩陣。MATLAB中所有量之間的相互計算都要滿足矩陣的運算法則。這通常可以用循環語句或者相關命令實現。
另外,MATLAB中還定義了不同于一般矩陣運算的群運算,即兩個相同維數的矩陣對應的元素直接進行相應的計算。為了與矩陣作為整體運算相區別,群運算在運算符號前面加符號“.”。除了幾個專門說明的函數外,所有的MATLAB函數也都適用于元素的群運算。這種運算法則能夠極大的簡化編程,提高運算效率。學習MATLAB數值計算,應熟練掌握并能靈活運用群運算。

以函數y=xsin(x)為例說明。下面給出了x在[0,10]區間的函數及其一階和二階導數的函數曲線圖。需要注意的是對自變量做diff運算后,數組元素的個數減少一個,作圖的時候應相應的減少一個點。
clear all%清除所有變量
dx=0.01;%兩個相鄰自變量的間隔
x=0:dx:10;%自變量數值化
lx=length(x);%自變量樣點數目
y=x.*sin(x);%函數值數值化
dy=diff(y);%函數值差分
y1=dy/dx;%一階導數
y2=diff(y1)/dx;
plot(x,y)
hold on
%diff運算后,矩陣元數量減少一個,繪圖時要除去x的一個點
plot(x(1:(lx-1)),y1)
plot(x(2:(lx-1)),y2)

圖1 函數y=xsin(x)及其導函數曲線圖Fig.1 Curves of y=xsin(x) and its derivative functions

clear all %清除變量
a=linspace(0,3,100);
dx=0.01; %x步長
for m=1:100 %對a取不同的值分別計算
x=0:dx:a(m);%間隔dx對x進行取樣
y=2/sqrt(pi)*exp(-x.^2);%x樣點上對應的被積函數y值
n=length(x)-1;%[0,a]被分成區間的個數比x樣點個數少1
S(m)=sum(y(1:n))*dx;%歐拉法求解積分
end
plot(a,S)%繪制a與積分值之間的函數曲線圖

圖2 誤差函數隨其積分上限的函數曲線圖Fig.2 Error function as a function of its upper limit of integration
在數學中,泰勒級數用無限項的連加式來表示一個函數。泰勒級數是一個重要的數學工具,在函數分析和定理證明等方面有廣泛的應用。另外,泰勒級數也是一個非常重要的近似計算處理手段。

clear all
dx=0.01;%自變量步長
x=-3:dx:3;%作圖范圍
lx=length(x);%自變量取樣點個數
y=sin(x);%被分析函數
plot(x,y);%被分析函數繪圖
hold on
x0=0;%泰勒級數展開位置
y0=sin(x0);%函數在x=0處的值
for n=1:10
fn=diff(y,n)/dx^n;%函數的n階導數
F0(n)=fn(round((lx-n)/2));%函數的n階導數在x0處對應值
end
F(1,:)=sin(x0)+F0(1)*x;%函數的線性展開式
plot(x,F(1,:))%繪圖
for n=2:6
F(n,:)=F(n-1,:)+F0(n)*x.^n/factorial(n);%函數n階泰勒級數展開式
plot(x,F(n,:))%繪圖
end
中小型工業企業的創始人普遍都不是受過高等教育的高精尖人才,大多是憑著自身努力和鉆研起家的草根,雖然有很強的毅力和拼搏精神,但是由于缺乏理論教育,企業往往做每一件事都是摸著石頭過河。企業內部工作中推諉扯皮現象屢見不鮮,每個人都覺得自己很忙,但是工作的結果又都往往很粗糙、漏洞百出。企業管理層面對這些現象,總是頭疼醫頭,腳疼醫腳,不知道主要問題出在哪里,也不清楚該采取哪種預案應對這些不足,無法形成系統的管理體系。

圖3 正弦函數及其泰勒級數展開函數的曲線圖Fig.3 Curves of Sine function and its expansion functions of Taylor series

clear all %清除變量
T=2*pi;%周期
L=T/2;
dx=0.001;%自變量步長
x=-pi:dx:pi;%自變量取值范圍
lx=length(x);%數值計算樣點個數
f=abs(x)./x;%方波信號函數
plot(x,f)%方波信號曲線
x(lx)=[];
f(lx)=[];%除去最后一個樣點
a0=1/L*sum(f)*dx;%計算a0
%計算系數
for n=1:10
a(n)=1/L*sum(f.*cos(n*pi*x/L)*dx);
b(n)=1/L*sum(f.*sin(n*pi*x/L)*dx);
end
%展開到n=1級并作圖
F(1,:)=a0/2+a(1)*cos(pi*x/L)+b(1)*sin(pi*x/L);
plot(x,F(1,:))
%展開到n=2到n=10級并作圖
for n=2:10
F(n,:)=F(n-1,:)+a(n)*cos(n*pi*x/L)+b(n)*sin(n*pi*x/L);
plot(x,F(n,:))
end

圖4 方波信號函數及其傅里葉級數展開函數曲線圖Fig.4 Curves of square wave signal function and its expansion functions of Fourier series
在理工課程的學習中,大量的計算問題可以通過數值計算進行分析,得到有意義的結果。數值計算從數學基本定義出發,計算過程十分直觀,能夠很好地展示問題的數學本質。本研究通過具體的例子,根據相關計算的基本數學定義,基于MATLAB軟件介紹了幾個常見數學問題數值計算處理方法。這對于MATLAB的初學者理解和掌握數值計算具有幫助。將MATLAB和理工課程的學習相結合,會顯著提高學生的學習效果,激發學習興趣,起到事半功倍的效果。