點擊上方藍字關注 無距書鄉 獲取即時更新
今天介紹一個新內容——符號變量及其函數,再展示一下符號函數的應用,多項式操作和Taylor級數展開。
符號變量
在介紹matlab一文中,我們寫道在matlab中使用變量時不需要預先定義,但是在特殊情況下我們是需要先定義變量然後才能使用的,這種情況就是符號變量。在matlab中用 syms 聲明一個符號變量。聲明了符號變量後就可以構造一個函數了,然後可以在基礎上應用,例如簡單的函數求值。示例如下:
在matlab 中使用subs命令獲取函數在某點的值,subs 是substitute 的簡寫,意為將x的值代入函數中。
符號函數
有了符號變量之後,我們就可以對符號函數表達式做各種操作了。例如因式分解和因式展開等。在matlab中使用factor做因式分解,使用expand做因式展開。示例如下:
對於多項式做完因式分解後,可以很容易看出來它的根。如果你還記得,上述表達式就是上一篇中我們使用過的求根的方程的等號左邊項。
對於一個連乘的表達式,matlab也是可以做多項式展開的,還是以上面的表達式為例,示例如下:
可以看到fx 做因式分解後再做展開後得到的表達式與fx是相同的。
再看看三角函數的情形。
在符號函數的情形下,也可以做多項式簡化和合併同類項。在matlab中使用simplify 來做多項式簡化;使用collect 來做同類項合併。簡述述如下:
多項式簡化:
多項式合併:
符號函數方程求解
首先我們通過符號變量來構建一個一元二次方程的符號函數,再用上一篇我們說到的solve命令來求解這個方程,可以預見答案應該是一元二次方程的求根公式。示例如下:
對於一元三次方程也是可以的,但是解的表達形式比較複雜,這裡貼一下。
解的完整形式如下:
(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) - b/(3*a) - (- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) (- b^2/(9*a^2) + c/(3*a))/(2*(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)) + (3^(1/2)*((- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) + (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3))*i)/2 - b/(3*a) - (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)/2 (- b^2/(9*a^2) + c/(3*a))/(2*(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)) - (3^(1/2)*((- b^2/(9*a^2) + c/(3*a))/(((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (c/(3*a) - b^2/(9*a^2))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3) + (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3))*i)/2 - b/(3*a) - (((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2))^(1/3)/2這就是一元三次方程的求根公式,仔細觀察會發現上篇中我們解一元三次方程時給出的結果就是用的這個公式。
泰勒級數
這是本篇比較重要的部分,也是讀者朋友們平時接觸到的比較多的一個知識點。這個公式的重要性想必學習過的讀者們是十分有感受的,必考知識點,畢竟沒有什麼函數是不能用Taylor級數來解決的。在後面的科學計算中也會大量使用Taylor展開做近似計算。既然Taylor級數這麼重要,那我們就來看看在matlab 中怎樣做Taylor級數展開。在matlab中用taylor()命令做Taylor級數展開。
首先,我們來查看一下Taylor級數的幫助說明。
根據說明文件,我們可看到taylor方法有3種基本調用形式:
taylor(f),默認做五階展開,在x=0處展開,就是常用的麥克勞林級數;
taylor(f,x),默認做五階展開,在x=0處展開,x可以是一個向量,也就是多元函數的情形;
taylor(f,x,a),默認做五階展開,在x=a處展開,x可以是一個向量,a也可以是一個向量,也是多元函數的情形。
下面來看看常見函數的Taylor級數吧。
sin(x):
例如,上圖中我們對sin(x)做Taylor展開,默認展開到5階。我們可以通過關鍵字『Order』來說明展開到幾階。
cos(x):
exp(x):
ln(x):
sqrt(1+x):
最後,總結如下,今天我們學習了:
符號變量的使用方法;
符號函數的因式分解和展開,多項式的簡化和合併同類項;
符號函數方程求解;
Taylor級數的方法。
這麼簡單實用的工具,不來用一下嗎!
長按識別二維碼關注我
點個讚,攜手共進
回復「ishare」加入社區