1 / 43

Symbolic

Symbolic. http://apec.nui.edu.tw 長庚大學 機械系 吳俊仲 小幅修改. ˙ 基本簡介. 1.Symbolic Math 與 Matlab 的不同。 Matlab: 運算為數值運算 (numerical calculation) ex: 運用 quad 函數函數計算方程式的積分。 Symbolic Math : 運算為符號運算 (symbolic calculation) ex: 計算 or 微分式.

mimir
Download Presentation

Symbolic

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Symbolic http://apec.nui.edu.tw 長庚大學 機械系 吳俊仲 小幅修改

  2. ˙基本簡介 1.Symbolic Math與Matlab的不同。 Matlab: 運算為數值運算(numerical calculation) ex:運用quad函數函數計算方程式的積分。 Symbolic Math: 運算為符號運算(symbolic calculation) ex:計算 or微分式

  3. quad(‘func’,a,b,tol):以辛普森法積分函數func,積分下限為a,上限為b,誤差設定為tol(預設為 )。 ex:計算 值 >> quad('sin(x)',0,pi) ans = 2.0000

  4. 2.建立符號物件: 要運用Symbolic Math運算,必須先建立符號物件。

  5. ex:>> a=sym(5/3) a = 5/3 >> a+5/3 ans = 10/3 >>sqrt(a) ans= 1/3*30^(1/2) 若sym函數中的數值為小數,在建立符號後,sym會自動將 其轉換為分數。 ex:>>s=sym(0.254) ans= 127/500

  6. 在一個運算式中,只要有一項是符號物件,則matlab會把整在一個運算式中,只要有一項是符號物件,則matlab會把整 個運算結果化成符號式。 ex: >>sym(2)/7+7/12+9/7 ans= 181/84 >>whos Name Size Bytes Class ans 1x1 136 sym object Grand total is 7 elements using 136 bytes 上例表示,原本僅建立2為符號,結果運算之後的答案亦為 符號。

  7. 在符號運算當中,符號與數值的區分很重要,必須在符號運算當中,符號與數值的區分很重要,必須 要清清楚楚的瞭解,否則往後的計算會常常出現錯 誤。可用whos指令來確定。 ex:欲建立一個數學式符號f,其中一方法可用下法。 >>f=sym(‘a*x^2+b*x+c’) f= a*x^2+b*x+c >>whos Name Size Bytes Class f 1x1 146 sym object Grand total is 12 elements using 146 bytes 由上可知,只有f為符號,其中的a b c x 皆仍為數值, matlab並不會主動將其變更為符號,與之前的例子結果不 同。

  8. 因此,我們通常以下面方式建立一數學式符號f,以便之後因此,我們通常以下面方式建立一數學式符號f,以便之後 的符號運算不會出任何差錯。 >>syms a b c x >>f=sym(‘a*x^2+b*x+c’) f= a*x^2+b*x+c >>whos Name Size Bytes Class a 1x1 126 sym object b 1x1 126 sym object c 1x1 126 sym object f 1x1 146 sym object x 1x1 126 sym object Grand total is 20 elements using 650 bytes

  9. 3.建立符號式陣列 先將符號變數建立好,以此符號變數建立陣列則此陣列即為 符號陣列(symbolic array)。 ex: >>syms a b c d e >>m=[a 0 b;b 1 0;c d e] m= [ a, 0, b] [ b, 1, 0] [ c, d, e] >>det(m) ans= a*e+b^2*d-c*b 亦可對此陣列做運算,例如求其det。

  10. 4.任意精準度的計算 Symbolic Math toolbox裡提供了三種不同的精準度運算。 numeric Matlab內建的浮點數運算 rational Maple的精確值分數運算 vpa Symbolic Math內的任意精準運算

  11. vpa任意精準度運算 vpa為variable precision arthmetic的縮寫,全名為變動精 準度的數學運算,可以使用任意精準度來算數學式。

  12. ex:圓週率pi >>pi ans= 3.1416 Matlab預設小數點後面四位。 >>digits digits=32 vpa(pi) ans= 3.1415926535897932384626433832795 小數點後為32位

  13. >>digits(10) digits=10 >>vpa(pi) Ans= 3.1415926535 小數點後面為10位 >>vpa(sqrt(2)+sqrt(3),15) ans= 3.146264369941972 亦可自己指定精準度來計算某個算式。

  14. ‧基本代數運算 1.代數的基本處理

  15. Ex: >> syms a b >> expand((a+b)^3) ans = a^3+3*a^2*b+3*a*b^2+b^3 將(a+b)^ 3展開得到上式 >> factor(ans) ans = (a+b)^3 再將上式因式分解,即為原式(a+b)^3

  16. expand亦可用於對三角函數與指數函數展開。 ex: >> syms a b >> expand(cos(a+b)) ans = cos(a)*cos(b)-sin(a)*sin(b) 上式即為cos之合角公式。 ex: >> expand(exp(a+b^2+3)) ans = exp(a)*exp(b^2)*exp(3)

  17. Ex: >> F=expand((a+b)*(a^2+b^2+1)) F = a^3+a*b^2+a+a^2*b+b^3+b >> collect(F,a) ans = a^3+a^2*b+(1+b^2)*a+b^3+b >> collect(F,b) ans = b^3+a*b^2+(1+a^2)*b+a^3+a 以上為collect之例,將同一雙變數多項式F,變為分別為以 a為變數之多項式以及以b為變數之多項式。

  18. simplify Ex:化簡 >> syms a b x >> simplify(exp(4*log(sqrt(a+b)))) ans = (a+b)^2 Ex:化簡 >> simplify((x^2+2*x+1)/(x+1)) ans = x+1

  19. subs Ex:將數字2帶入多項式 中。 >> syms x a >> subs(x^2+2*x+1,2) ans = 9 >> 將符號(a+1)帶入 中,並化簡之。 >> subs(x^2+2*x+1,a+1) ans = (a+1)^2+2*a+3 >> simplify(ans) ans = a^2+4*a+4

  20. subs函數亦可進行多個變數的代換。 Ex: >> syms a b x >> subs(sin(a+b),{a,b},{sym('R'),x}) ans = sin(R+x) 上式為分別將sin(a+b)中的ab置換成符號R及x。

  21. >> Q=subs(sin(a+b),a,magic(2)) Q = [ sin(1+b), sin(3+b)] [ sin(4+b), sin(2+b)] Matlab會自動先計算magic(2)+b的運算,在對矩陣裡的每個 元素進行sin運算。 >> subs(Q,sym('sqrt(2)')) ans = [ sin(1+2^(1/2)), sin(3+2^(1/2))] [ sin(4+2^(1/2)), sin(2+2^(1/2))] >> eval(ans) ans = 0.6649 -0.9559 -0.7637 -0.2693

  22. 2.多項式與分式的相關運算 與多項式運算相關之指令

  23. poly2sym,sym2poly與coeffis Ex: >> syms x y >> P=poly2sym([1 2 3 4 5],x) P = x^4+2*x^3+3*x^2+4*x+5 >> sym2poly(P) ans = • 2 3 4 5 >> coeffs(P) ans = [ 5, 4, 3, 2, 1] >>

  24. Ex:多項式 >> syms x y >> Q=6*x^2*y^2+2*x*y-7*y^3 Q = 6*x^2*y^2+2*x*y-7*y^3 >> coeffs(Q)  ans = [ 6, 2, -7] >> coeffs(Q,x) ans = [ -7*y^3, 2*y, 6*y^2] >> coeffs(Q,y) ans = [ 2*x, 6*x^2, -7] >> 若未對多項式指定某特定變數,則 matlab無法判別,即會以原多項式符 號皆當作變數,對其取係數,但不排 列大小。

  25. Ex:多項式  >> syms x y >> coeffs((x+y)*(x^2+y^2),x) ??? Error using ==> sym.maple Error, invalid arguments to coeffs Error in ==> sym.coeffs at 35 c = maple('coeffs',p,x); 將上多項式展開後 >> coeffs(expand((x+y)*(x^2+y^2)),x) ans = [ y^3, y^2, 1, y] 利用coeffs取出多項式的係數時,多項式必須為標準型式,亦即必須為展開後的式子,否則指令無法執行。

  26. [n,d]=numden(expr) Ex: >> [n,d]=numden(sym(12/5)) n = 12 d = 5 >>

  27. 使用numden指令時,若只給予一個變數,則此指令只會傳回分子部分。左例的n或是q,都皆為R的分子。使用numden指令時,若只給予一個變數,則此指令只會傳回分子部分。左例的n或是q,都皆為R的分子。 Ex: >> syms x >> R=(x^3+2*x^2+3*x+6)/(x^2+3) R = (x^3+2*x^2+3*x+6)/(x^2+3) >> n=numden(R) n = x^3+2*x^2+3*x+6  >> q=numden(R) q = x^3+2*x^2+3*x+6 >>

  28. [q,r]=quorem(expr) Ex: >> [q,r]=quorem(x^5,x^2+3) q = x^3-3*x r = 9*x 以下驗證 >> q*(x^2+3)+r ans = (x^3-3*x)*(x^2+3)+9*x >> simplify(ans) ans = x^5 >>

  29. ‧方程式求解 1.簡單的solve函數 solve算是symbolic math toolbox的全能求解函數,功能與 fzero函數有很大的不同。fzero函數僅能解數值解,而solve 可解符號解。 基本指令用法

  30. Ex:解 >> syms a b c x y >> eqn=a*x^2+b*x+c eqn = a*x^2+b*x+c >> sol=solve(eqn,x) sol = 1/2/a*(-b+(b^2-4*a*c)^(1/2)) 1/2/a*(-b-(b^2-4*a*c)^(1/2)) >> simplify(ans) ans = -1/2*(b-(b^2-4*a*c)^(1/2))/a -1/2*(b+(b^2-4*a*c)^(1/2))/a

  31. 以下驗證 >> subs(eqn,sol) ans = 1/4/a*(-b+(b^2-4*a*c)^(1/2))^2+1/2*b/a*(-b+(b^2-4*a*c)^(1/2))+c 1/4/a*(-b-(b^2-4*a*c)^(1/2))^2+1/2*b/a*(-b-(b^2-4*a*c)^(1/2))+c >> simplify(ans) ans = 0 0 >>

  32. 複數解 >> solve(x^3+x-2) ans = -1/2+1/2*i*7^(1/2) -1/2-1/2*i*7^(1/2) >> 三角函數解 >> solve(2*asin(3*x)-acos(5*x)) ans = -5/36+1/36*97^(1/2) >>

  33. Ex:解 之x解。 >> solve(2*cos(3*x)^2-4*y,x) ans = 1/3*acos(2^(1/2)*y^(1/2)) 1/3*pi-1/3*acos(2^(1/2)*y^(1/2)) >> 以下驗證 >> subs(2*cos(3*x)^2-4*y,ans) ans = 0 0 >>

  34. 指數函數解 解 >> solve(x^(1+log2(x))-(2*x)^3) ans = 2*exp((log(2)^2+log(8)*log(2))^(1/2)) 2/exp((log(2)^2+log(8)*log(2))^(1/2)) >>

  35. 以下驗證 >> subs(x^(1+log2(x))-(2*x)^3,ans) ans = (2*exp((log(2)^2+log(8)*log(2))^(1/2)))^(1+log(2*exp((log(2)^2+log(8)*log(2))^(1/2)))/log(2))-64*exp((log(2)^2+log(8)*log(2))^(1/2))^3 (2/exp((log(2)^2+log(8)*log(2))^(1/2)))^(1+log(2/exp((log(2)^2+log(8)*log(2))^(1/2)))/log(2))-64/exp((log(2)^2+log(8)*log(2))^(1/2))^3 >> simplify(ans) ans = 0 0 >>

  36. 絕對值函數 Ex: >> syms x y >> sol(abs(x^2-4)-2) >> solve(abs(x^2-4)-2) ans = [6^(1/2),-6^(1/2),2^(1/2),-2^(1/2)] >> eval(ans) ans = 2.4495 -2.4495 1.4142 -1.4142 >>

  37. ‧求解聯立方程式 Solve亦可解決聯立方程式問題,用法與解單一方程式相同,只要多加入變數即可。

  38. Ex:解聯立方程式 >> syms a b c d e f x y >> sol=solve(2*x+y-4,x^2+y^2-4) sol = x: [2x1 sym] y: [2x1 sym]

  39. >> sol.x ans = 2 6/5 >> sol.y ans = 0 8/5 >> sol.x(2) ans = 6/5 >>

  40. Ex:解聯立方程式 >> sol=solve(a*x+b*y-c,d*x+e*y-f,x,y) sol = x: [1x1 sym] y: [1x1 sym] >> [sol.x;sol.y] ans = (-b*f+c*e)/(a*e-d*b) (a*f-d*c)/(a*e-d*b)

  41. diff(f) — 求f的微分 diff(f,v) — 對f 求v微分 diff(f,n) — 對f 求n微分 diff(f,v,n) —對f 求v的 n 階微分 例:syms a x f=sin(a*x) df=diff(f) dfa=diff(f,a,2) 微分

  42. int(f) — 對 f求不定積分 int(f,v) — 對 f的v求不定積分 int(f,v,a,b) — 對 f的v在(a,b) 區間求定積分 findsym(f) —可以找出f中的每个变量 注意:當函数的積分不存在,Matlab返回原來的積分表達式。 積分

  43. int(‘被積分式’,‘變數’,‘積分下限’,‘積分上限’)——定積分int(‘被積分式’,‘變數’,‘積分下限’,‘積分上限’)——定積分 例:int(-2*x/(1+x^2)^2) ans = 1/(1+x^2) int(log(x)) int(log10(x)) int(sin(x),x,-pi,pi) ——如不寫,為不定積分

More Related