符號(hào)計(jì)算工具箱 Symbolics Toolbox(符號(hào)計(jì)算工具箱)是MATLAB的一個(gè)擴(kuò)展工具箱,用于進(jìn)行符號(hào)計(jì)算和代數(shù)運(yùn)算。它提供了一系列函數(shù)和工具,可以處理符號(hào)表達(dá)式、求解方程、進(jìn)行代數(shù)簡(jiǎn)化、計(jì)算符號(hào)導(dǎo)數(shù)和積分等任務(wù)。
Symbolics Toolbox(符號(hào)計(jì)算工具箱)是將數(shù)學(xué)應(yīng)用于科學(xué)和工程的一套有用工具。本書的其他部分已經(jīng)給出了使用符號(hào)功能進(jìn)行應(yīng)用的示例,以檢查文獻(xiàn)中找到的解析解。此外,基于解析解的預(yù)測(cè)與基于計(jì)算方法的預(yù)測(cè)進(jìn)行了比較。本章介紹的符號(hào)數(shù)學(xué)工具包括:
代數(shù):多項(xiàng)式、向量和矩陣。 使用Symbolics Toolbox,MATLAB可以被視為21世紀(jì)學(xué)生的"數(shù)學(xué)手冊(cè)"。在過去,科學(xué)和工程學(xué)生需要購(gòu)買一本"標(biāo)準(zhǔn)"數(shù)學(xué)手冊(cè)。如今,很少有學(xué)生擁有并使用數(shù)學(xué)手冊(cè)。計(jì)算機(jī)和像MATLAB這樣的工具以積極的方式改變了這種情況。然而,對(duì)于本書的第二作者來說,證明MATLAB是這個(gè)世紀(jì)的手冊(cè)是一次有趣的實(shí)踐。本章介紹了符號(hào)計(jì)算工具的應(yīng)用,以手冊(cè)信息的回顧為基礎(chǔ),并提供了我們?cè)?jīng)期望在手冊(cè)中查找的信息類型的示例,因此我們可以通過應(yīng)用MATLAB等計(jì)算機(jī)工具來找到這些信息。
在應(yīng)用符號(hào)工具箱或其他允許用戶進(jìn)行符號(hào)分析的計(jì)算機(jī)工具時(shí),主要問題(如果這算是個(gè)問題的話)是,為了有效地使用工具,你需要對(duì)提出的數(shù)學(xué)問題有一定的了解。換句話說,如果你想對(duì)函數(shù) 關(guān)于變量 進(jìn)行求導(dǎo),你需要知道函數(shù)和求導(dǎo)的含義,即找到 關(guān)于 的導(dǎo)數(shù) 的含義。
另一個(gè)例子是求解二次方程的解。你需要知道這是什么類型的方程以及解代數(shù)方程的含義。因此,如果你知道要問什么,MATLAB的符號(hào)計(jì)算工具就可以幫助你找到符號(hào)數(shù)學(xué)問題的答案。
本章討論了將符號(hào)計(jì)算應(yīng)用于可以通過數(shù)學(xué)手冊(cè)解答的數(shù)學(xué)問題,以展示MATLAB中可用的符號(hào)工具的強(qiáng)大功能。當(dāng)然,這些工具要比本章提供的相對(duì)簡(jiǎn)單的示例更強(qiáng)大。一旦你熟練掌握了這個(gè)工具箱,你就可以擴(kuò)展工具箱的應(yīng)用范圍,研究更困難的問題,甚至可能超出傳統(tǒng)應(yīng)用數(shù)學(xué)解決科學(xué)和工程問題的能力。
典型手冊(cè)中涵蓋的符號(hào)數(shù)學(xué)主題包括代數(shù)、三角學(xué)、微積分、積分、求導(dǎo)和微分方程等。手冊(cè)提供的信息旨在幫助學(xué)生、工程師或科學(xué)家在解決技術(shù)問題的過程中,在解決數(shù)學(xué)問題時(shí)取得進(jìn)展。在科學(xué)、技術(shù)、工程和數(shù)學(xué)(STEM)的堅(jiān)實(shí)教育背景下,才能有效地利用手冊(cè)和/或像MATLAB這樣的工具。當(dāng)然,MATLAB和手冊(cè)都需要定期使用,以熟練掌握應(yīng)用這些工具來尋找解決方案的能力。我們將涉及手冊(cè)中涵蓋的一些主題,幫助指導(dǎo)讀者在嘗試使用MATLAB中的符號(hào)計(jì)算工具箱時(shí)獲得幫助。我們將從代數(shù)開始,包括線性代數(shù)、向量代數(shù)和矩陣代數(shù)。然后,我們將研究求導(dǎo)和積分。接下來,我們將研究積分變換,特別是拉普拉斯變換。最后,我們將探討微分方程的符號(hào)解法。
17.1 代數(shù)
17.1.1 多項(xiàng)式
17.1.2 向量
17.1.3 矩陣
17.1 代數(shù) 在1.1.6節(jié)中,我們介紹了如何解決線性方程組的方法。其中一個(gè)示例應(yīng)用了MATLAB Symbolics中的solve工具。讓我們通過求解二次方程組 來擴(kuò)展該示例。應(yīng)用1.1.6節(jié)中所示的相同過程,在命令窗口中輸入并執(zhí)行以下命令,我們得到了以下結(jié)果。結(jié)果也在下面進(jìn)行了說明:
>> syms x y >> [x y] = solve(x^2 + 3 *y, y^2 + 2 *x) x =0 -(-12 )^(2 /3 )/2 -((3 ^(1 /2 )*(-12 )^(1 /3 )*i )/2 + (-12 )^(1 /3 )/2 )^2 /2 -((3 ^(1 /2 )*(-12 )^(1 /3 )*i )/2 - (-12 )^(1 /3 )/2 )^2 /2 y =0 (-12 )^(1 /3 ) - (3 ^(1 /2 )*(-12 )^(1 /3 )*i )/2 - (-12 )^(1 /3 )/2 (3 ^(1 /2 )*(-12 )^(1 /3 )*i )/2 - (-12 )^(1 /3 )/2
結(jié)果表明, 和 各有四個(gè)根。其中兩個(gè)是實(shí)根,兩個(gè)是復(fù)根。這表明MATLAB處理復(fù)數(shù)而不僅僅是實(shí)數(shù)。這是MATLAB的另一個(gè)重要功能。在MATLAB中,默認(rèn)情況下(除非重新賦值),i
和j
表示 這個(gè)數(shù)的符號(hào)。
17.1.1 多項(xiàng)式 大多數(shù)理工科學(xué)生可以背誦二次方程的根,這對(duì)于用MATLAB進(jìn)行結(jié)果檢查非常有幫助。二次方程可以寫成如下形式:( ) 我們可以使用MATLAB中的solve
函數(shù)來解這個(gè)方程??梢詧?zhí)行以下腳本來實(shí)現(xiàn):
clear;clc syms a b c x solve(a*x^2 + b*x + c)
在命令窗口中的答案為:
ans = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a)
因此,正如預(yù)期的那樣,二次方程的解為:
對(duì)于兩個(gè)解都是實(shí)數(shù)的情況,需要滿足 。如果等號(hào)成立,那么兩個(gè)根是相等的。如果 ,那么根是復(fù)數(shù)且不相等的。還可以使用另一種一行命令來解決這個(gè)方程,可以在命令窗口中這樣寫:
syms a b c x; solve(a*x^2 +b*x+c)
solve
函數(shù)的輸出是一個(gè)2×1
的符號(hào)數(shù)據(jù)類型數(shù)組。因?yàn)檫@是一個(gè)二次方程,所以我們期望得到兩個(gè)解。
接下來,讓我們來看看三次多項(xiàng)式:
為了找到這個(gè)方程的根,我們可以執(zhí)行以下腳本:
clear; clc syms a b c d x solve(a*x^3 + b*x^2 + c*x + d)
在這種情況下,由于我們要解決一個(gè)三次方程,答案(ans)是一個(gè)3×1
的符號(hào)數(shù)據(jù)類型數(shù)組。答案可能會(huì)非常冗長(zhǎng),因此在這里不再重復(fù),它會(huì)在命令窗口中顯示出來。
讓我們考慮另一個(gè)例子。我們來解下面的方程:
在命令窗口中執(zhí)行了以下命令:
syms a c x; solve(a*x^4 + c*x); solution = simplify(ans ); solution
得到的解為:
solution =0 (-c/a)^(1 /3 ) ((3 ^(1 /2 )*i - 1 )*(-c/a)^(1 /3 ))/2 -((3 ^(1 /2 )*i + 1 )*(-c/a)^(1 /3 ))/2
接下來使用Latex格式化這個(gè)解:
latex(solution)
得到的Latex表示為:
\left(\begin{array}{c} 0 \\ {\left(-\frac{c}{a}\right)}^{\frac{1 }{3 }}\\ \frac{\left( - 1 + \sqrt {3 }\, \mathrm{i }\right)\, {\left(-\frac{c}{a}\right)}^{\frac{1 }{3 }}}{2 }\\ -\frac{\left(1 + \sqrt {3 }\, \mathrm{i }\right)\, {\left(-\frac{c}{a}\right)}^{\frac{1 }{3 }}}{2 } \end {array}\right)
該文字處理軟件支持Latex語法。這個(gè)轉(zhuǎn)換為L(zhǎng)atex格式的表示給出了這個(gè)四次方程的四個(gè)根的數(shù)組。
需要注意的是,其中兩個(gè)根是復(fù)數(shù)。
最后,讓我們使用solve函數(shù)來解三個(gè)線性方程的聯(lián)立方程組。我們來解如下方程組:
在命令窗口中執(zhí)行以下命令,得到:
syms x y z [x, y, z] = solve(x + y + z - 1 , 2 *x + 3 *y + z - 1 , x + y + 3 *z) x =3 y =-3 /2 z =-1 /2
這個(gè)方程組的解是 , , 。
需要注意的是,在符號(hào)計(jì)算中有多種實(shí)現(xiàn)solve函數(shù)(或解決方案工具)的方法。如果得到的是數(shù)值解(如上述的例子),則需要將其轉(zhuǎn)換為double類型的數(shù)據(jù),以便在MATLAB腳本中使用(這在1.1.6節(jié)中已經(jīng)有所示范)。
17.1.2 向量 單行或單列的數(shù)組是向量。讓我們考慮以下3分量向量: ,
有兩種常見的方法可以對(duì)這些數(shù)學(xué)對(duì)象進(jìn)行乘法運(yùn)算,大多數(shù)學(xué)生都熟悉這兩種方法。它們是內(nèi)積(點(diǎn)積)和外積(叉積)。可以通過以下符號(hào)命令(來自編輯器)來計(jì)算它們:
format compact syms a1 a2 b1 b2 c1 c2 real %聲明了一些符號(hào)變量 并指定它們?yōu)閷?shí)數(shù)。這樣做是為了告訴計(jì)算機(jī)這些變量具有實(shí)數(shù)屬性 x1 = [a1, b1, c1] x2 = [a2, b2, c2] x1_dot_x2 = dot (x1, x2) x1_cross_x2 = cross (x1, x2) format
在命令窗口中的結(jié)果如下所示:
x1 = [ a1, b1, c1] x2 = [ a2, b2, c2] x1_dot_x2 = a1*a2 + b1*b2 + c1*c2 x1_cross_x2 = [ b1*c2 - b2*c1, a2*c1 - a1*c2, a1*b2 - a2*b1]
使用format compact
命令可以得到上面緊湊的輸出結(jié)果。而最后一個(gè)命令format
用于恢復(fù)命令窗口的默認(rèn)輸出格式。將結(jié)果寫成如下形式:
內(nèi)積是一個(gè)標(biāo)量。
外積是一個(gè)向量。它是一個(gè)三分量向量(與用于相乘的向量具有相同的分量數(shù))。
17.1.3 矩陣 讓我們考慮以下被稱為矩陣的數(shù)學(xué)對(duì)象。我們可以把這兩個(gè)物體加減。我們可以把這兩個(gè)物體乘除。我們將使用符號(hào)工具箱來完成這些操作
在MATLAB中執(zhí)行以下腳本:
format compact syms a11 a12 a21 a22 b11 b12 b21 b22 Ma = [a11 a12; a21 a22] Mb = [b11 b12; b21 b22] Msum = Ma + Mb Mproduct = Ma*Mb
命令窗口中的結(jié)果如下:
Ma = [ a11, a12] [ a21, a22] Mb = [ b11, b12] [ b21, b22] Msum = [ a11 + b11, a12 + b12] [ a21 + b21, a22 + b22] Mproduct = [ a11*b11 + a12*b21, a11*b12 + a12*b22] [ a21*b11 + a22*b21, a21*b12 + a22*b22]
這兩個(gè)矩陣的加法涉及逐項(xiàng)加法。
乘積得到的矩陣與相乘的矩陣大小相同;結(jié)果中的每一項(xiàng)都是一行Ma乘以Mb上的一列之和。學(xué)習(xí)乘法矩陣,如下所示,驗(yàn)證矩陣乘法的過程。這兩個(gè)矩陣的乘積是:
讓我們分析一下下面這個(gè)矩陣的一些性質(zhì):
syms c11 c12 c21 c22 real Mc = [c11 c12; c21 c22] Mcdet = det(Mc); Mcinv = inv(Mc); Mc*inv(Mc);disp (’ Mc * Mcinv = Imatrix’) Imatrix = simple(ans ) Mcdet Mcinv [EigenVectorsMc EigenValuesMc] = eig(Mc)
除了特征向量和特征值,下面的輸出在命令窗口。后者被轉(zhuǎn)換為L(zhǎng)atex,報(bào)告如下。
Mc = [ c11, c12] [ c21, c22] Mc * Mcinv = Imatrix Imatrix = [ 1 , 0 ] [ 0 , 1 ] Mcdet = c11*c22 - c12*c21 Mcinv = [ c22/(c11*c22 - c12*c21), -c12/(c11*c22 - c12*c21)] [ -c21/(c11*c22 - c12*c21), c11/(c11*c22 - c12*c21)]
與這個(gè)矩陣相關(guān)的特征值是:
這是對(duì)角化矩陣的結(jié)果(一個(gè)在幾何上解釋為旋轉(zhuǎn)坐標(biāo)系以找到矩陣只有有限對(duì)角項(xiàng)的坐標(biāo)的過程)。這個(gè)發(fā)生的坐標(biāo)系是由正交特征向量給出的。這個(gè)例子對(duì)應(yīng)的特征向量是:
接下來讓我們考慮3 × 3對(duì)稱矩陣的分析,即,
通過實(shí)現(xiàn)以下腳本詳細(xì)檢查了這個(gè)矩陣。它是一個(gè)重要的數(shù)學(xué)對(duì)象,在結(jié)構(gòu)力學(xué)中扮演著重要的角色,在結(jié)構(gòu)力學(xué)中它是應(yīng)力張量的形式。
format compact syms a b c d e f real M = [a d e dbf e f c] Mdet = det(M); Minv = inv(M); M*inv(M);disp (’ M * Minv = Imatrix’) Imatrix = simple(ans ) Mdet Minv [EigenVectorsM EigenValuesM] = eig(M) format
在命令窗口的結(jié)果,除了相當(dāng)長(zhǎng)的特征值,特征向量和逆表達(dá)式如下:
M = [ a, d, e] [ d, b, f] [ e, f, c] M * Minv = Imatrix Imatrix = [ 1 , 0 , 0 ] [ 0 , 1 , 0 ] [ 0 , 0 , 1 ] Mdet = - c*d^2 + 2 *d*e*f-b*e^2 - a*f^2 + a*b*c
我們知道矩陣M的逆可以正確確定,因?yàn)?span style="cursor:pointer;"> ,其中 是單位矩陣。
使用MATLAB的符號(hào)工具解決該對(duì)稱矩陣的特征值問題可以通過以下代碼獲得結(jié)果:
[EigenVectors_M, EigenValues_M] = eig(M);
其中,EigenVectors_M
是一個(gè)矩陣,包含了對(duì)應(yīng)于特征值的特征向量的列向量,而EigenValues_M
是一個(gè)對(duì)角矩陣,包含了特征值。你可以通過查看這兩個(gè)變量來獲取特征值和對(duì)應(yīng)的特征向量的結(jié)果。
如果矩陣表示固體材料中某一點(diǎn)的應(yīng)力狀態(tài),則特征值為主應(yīng)力,特征向量為主方向。這一信息在分析材料強(qiáng)度時(shí)很重要。類似的矩陣也出現(xiàn)在流體力學(xué)的建模中。