函式簡介
函式功能:在MATLAB中,該符號變數的優點是,使用符號變數運算得到的只是一個解析解,例如,在符號變數運算過程π就用π表示,而不是具體的近似數值3.14或3.14159。使用符號變數進行運算能最大限度減少運算過程中因捨入造成的誤差。符號變數也便於進行運算過程的演示。
語法格式:
S = sym(A)將非符號對象(如,數字,表達式,變數等)A轉換為符號對象,並存儲在符號變數S中。
x = sym('x')
創建符號變數x,其名字是'x'。示例:alpha = sym('alpha')
x = sym('x', 'real')
這裡假設x是實數,因此有x的共軛conj(x)等於x。示例:r = sym('Rho','real')
k = sym('k', 'positive')
這裡創建一個正的(實數)符號變數。
x = sym('x', 'clear')
創建一個沒有額外屬性的純形式上的符號變數x(例如,創建符號變數x,但是並沒指定它是正的或它是一個實數)。為了兼容舊的MATLAB版本,x = sym('x','unreal')的功能和x = sym('x', 'clear')一樣。
S = sym(A, flag)
把一個數值標量或矩陣轉換為符號型的對象。這裡flag參數的值可以是:'r', 'd', 'e', or 'f',它指定了對浮點數進行轉換時的規則:
'f':表示“floating-point”。這樣,所有的數值都用N*2^e或-N*2^e這種形式表示。N和e都為整數,且N不小於0。例如,sym(1/10, 'f')被轉換為3602879701896397/36028797018963968。
'r':表示“rational”(有理數形式)。這裡,所有的浮點數都被表示成形如p/q(分數形式)、p*pi/q、2^q、10^q、sqrt(p)等形式(p、q都是符號型的有理數)。這種表示方法減少了表達式中因捨入造成的誤差。但有時候這種方法並不能準確表示一個值。如果找不到最逼近的有理數來表示一個浮點數,這個數就會被表示成p*2^q(其中p、q都是較大的整數)這種形式,以期來準確的表示它的值。例如,sym(4/3,'r')將產生符號量'4/3',但sym(1+sqrt(5),'r')將被表示成7286977268806824*2^(-51)。
'e':表示“estimate error”。這種形式會在'r'的基礎上添加一個由包含eps的符號表達式表示的誤差值。這個誤差值表示一個有理數的理論值和用浮點數形式表示的實際值之間的誤差。例如,sym(3*pi/4,'e')將被表示成3*pi/4*(1+3143276*eps/65)。
'd':表示“decimal”(十進制)。我們知道,在實際生活中我們習慣用十進制,但計算機中則用二進制,一個簡單的十進制浮點數3.14用二進制表示便不能準確的表示。因此,更好的減少誤差的方法便是在計算機中引入十進制來表示一個數。這種情況下,數字都取自調用vpa函式後產生的數字集合。雖然用16位有時候並不能準確表示一個浮點數,但大多數情況下,我們也許並不希望用超過16位數字來表示一個浮點數。例如,通過調用digits(10),我們得到的浮點數都由10位數字構成,sym(4/3,'d')將產生1.333333333這個符號數字。雖然調用digits(20)後我們可以使用20位數字來表示一個浮點數, 這樣sym(4/3,'d')就是 1.3333333333333332593,但是我們看到只有前16位數值是準確的,後面的幾位數值已經產生了誤差,因此大多數情況下用超過16位的數字來表示一個浮點數是不必要的。
相關函式:syms、eps、vpa、digits、findsym、symvar
程式示例
>> PI = sym(pi);
>> R = sym(5);
>> areas = PI * R ^ 2
areas = 25*pi
>> class(areas)
ans =sym
>> sym(1/3)
ans =1/3
>> sym(sqrt(5))
ans =5^(1/2)
>> sym(sqrt(5) + 1)
ans =910872158600853/281474976710656
>> sym(1)/sym(3) + sym(1)
ans =4/3
>> y = sin(sym('x'))
y =sin(x)
>> diff(y)
ans = cos(x)
>> diff(y,2)
ans =-sin(x)
>> z = sym('x') ^ 2 + sin(sym('y'))
z =x^2 + sin(y)
>> diff(z,'x')
ans =2*x
>> diff(z,'y')
ans =cos(y)