1. 程式人生 > 其它 >MATLAB 第四章 符號計算

MATLAB 第四章 符號計算

課程匯入

數值計算:必須先對變數賦值,然後才能參與運算,運算結果是數值。
符號計算:無須事先對變數賦值,而將所得到結果以標準的符號形式來表示。

符號計算特點

  1. 運算物件可以是沒賦值的符號變數
  2. 以推理解析的方式進行運算,因此不受計算誤差累積所帶來的困擾

一、符號物件和符號表達式

1.符號物件

符號變數、符號常量、符號數字、符號矩陣、符號表達式和符號函式
任何符號物件必須藉助專門的sym或syms定義
任何包含符號物件的表示式、方程也一定是符號物件

2.符號常量

當數值常量作為sym()的輸入變數時,就建立了符號常量,雖然看上去是一個數值量,但已經是一個符號物件了

3.符號變數(內容可變的符號物件)

符號變數的命名規則和數值變數的命名規則相同

建立符號變數

單個符號變數建立函式sym

多個符號變數建立函式syms

符號矩陣建立

syms a b c d
A=[a,b;c,d]

自由符號變數

確定規則

預設首選x
然後與x的ASCII碼值之差的絕對值小的字母優先
字母優先次序為x(120),y(121),w(119),z(122),v(118)等
symvar(expression):按英文字母表的順序列出式中所有符號變數
symvar(expression,n):按靠近x的ASCII順序列出n個符號變數

syms u z v w a;
f = sym(3);
eq = sin(f)*u*z^2+v*z+f*w-a;
symvar(eq)
symvar(eq,3)
ww = solve(eq,w)
ww = solve(eq,a)

4.符號表達式

符號表達式是由符號常量、符號變數、符號函式運算子以及專用函式連線起來的符號物件。
符號表達式包括:符號函式和符號方程。
區別:符號函式不帶等號,符號方程帶等號

5.符號函式

6.符號方程

7.符號計算的運算子

二、符號運算中的函式運算

符號計算與數值計算的區別

  1. 數值計算保留8位有效位數,每次數值計算有一定的截斷誤差;符號計算不進行數值運算,無截斷誤差。
  2. 符號計算時間較長,數值計算時間較短
  3. 數值計算必須先對變數賦值;符號計算無需先賦值,但必須先定義,計算結果以標準的符號表達式形式給出。

二、符號數字及表示式操作

符號數字和數值數字很像,但是他們的型別不同,將影響他們的使用。比如:一些數值函式不接受符號數字,而只接受數值數字。

1.數值數字轉符號數字

2.符號數字轉數值數字

num = double(num):符號數字轉為數值數字
B = eval(A):符號矩陣轉為數值矩陣

3.符號數字的任意精度限制

數值計算則會出現舍入誤差(雙精度浮點型,64位)
符號運算是在完全準確的情況下進行的;但是計算時間長,儲存空間大。
需要控制符號運算中參加變數有效數字個數
控制有效位的函式:vpa(x,n)
x是符號或數值,有效位數為n位,預設32

>> format long %顯示15位數值有效位
>> 1/2+1/3
ans = 0.833333333333333
>> ss=sym(1/2+1/3)
ss =5/6
>> sv=vpa(1/2+1/3,6)
 sv =0.833333

4.符號表達式的基本操作

simplify化簡各類表示式

R = simplify(S)
運用simplify指令將S轉換成最簡短形式
注:S可以是符號表達式或符號矩陣。

syms x;
f = (1/x^3+6/x^2+12/x+8)^(1/3)
g = simplify(f)

5.符號表達式的置換操作

自動提取

>> syms a b c d W
>> [V,D]=eig([a b;c d]) %求解符號矩陣的特徵值D與特徵向量V
 V =
[ (a/2 + d/2 - (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2)/c - d/c,
  (a/2 + d/2 + (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2)/c - d/c;1, 1]

>> [RVD,W]=subexpr(V,W)
RVD =
[ (a/2 - W/2 + d/2)/c - d/c, (W/2 + a/2 + d/2)/c - d/c]
[                         1,                                              1]
 
W =
(a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)

人為指定

R = subs(S,Old,New)
新符號變數New替代原來符號表達式S中的變數Old
數值代替所有符號變數則結果轉化為數值資料。

syms x y
ss = x - sin(x)-1/sin(x);
ss1 = subs(ss,sin(x),y)
ss2 = subs(ss,x,4)

多重替換:R = subs(S,{old1,old2,...},{New1,New2,...})

三、符號微積分

1.符號表達式F的極限(limit)

syms x k
y = (1 - 1/x)^(k*x)
limit(y,x,inf)

2.符號表達式F的求導(diff)

syms t x
f = [t^3 - exp(x),t/x;t*cos(x),log(x)];
dfdx = diff(f,x)
d2fdt2 = diff(f,t,2)
dfdtdx = diff(diff(f,t),x)
syms x y
g = (x^3*y - 5*y)/(2*x^2 + 7);
dg = diff(g,y)
res = subs(dg,[x,y],[1,2])

3.符號表達式F的積分(int)


4.級數求和(symsum)


5.泰勒級數(taylor)




4.符號方程求解