MATLAB 第四章 符號計算
課程匯入
數值計算:必須先對變數賦值,然後才能參與運算,運算結果是數值。
符號計算:無須事先對變數賦值,而將所得到結果以標準的符號形式來表示。
符號計算特點
- 運算物件可以是沒賦值的符號變數
- 以推理解析的方式進行運算,因此不受計算誤差累積所帶來的困擾
一、符號物件和符號表達式
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.符號計算的運算子
二、符號運算中的函式運算
符號計算與數值計算的區別
- 數值計算保留8位有效位數,每次數值計算有一定的截斷誤差;符號計算不進行數值運算,無截斷誤差。
- 符號計算時間較長,數值計算時間較短
- 數值計算必須先對變數賦值;符號計算無需先賦值,但必須先定義,計算結果以標準的符號表達式形式給出。
二、符號數字及表示式操作
符號數字和數值數字很像,但是他們的型別不同,將影響他們的使用。比如:一些數值函式不接受符號數字,而只接受數值數字。
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])