7.1 matlab符号对象(符号对象的建立和四则运算)
1、符號對象的建立
(1)sym函數
sym函數用于建立單個符號對象,其常用調用格式為:
符號對象名=sym(A)
將由A來建立符號對象。其中,A可以是一個數值常量、數值矩陣或數值表達式(不加單引號),此時符號對象為一個符號常量;A也可以是一個變量名(加單引號),這時符號對象為一個符號變量。
(2)syms命令
syms命令可以一次定義多個符號變量,其—般調用格式如下:
syms 符號變量名1 符號變量名2 … 符號變量名n
其中,變量名不能加單引號,相互之間用空格隔開。
例1:符號常量的例子
t = sym(2); %將數值2轉換為符號對象并武值給t,得到一個表達式 t+1/2 sin(sym(pi/3)) %將π/3轉換為符號對象,并對該符號對象求正弦值,得到一個表達式 sin(pi/3) %對π/3做數值計算,得到一個數值計算結果%輸出結果 ans = 5/2ans = 3^(1/2)/2ans =0.8660例2:符號變量的例子
a = 5; %定義數值變量a,b b = -8; x = sym('a'); %定義符號變量x,y,它們份別代表變量a和b y = sym('b'); w = (a+b)*(a-b) %做數值計算 s = (x+y)*(x-y) %做符號計算 eval(s) %調用eval函數,將符號表達式轉換為數值結果,因為ab已經賦值%輸出結果 w =-39s = (a + b)*(a - b)ans =-39用符號對象進行計算更像是一種演算和推理,得到的是一個精確的數學表達武;數值計算的結果是一個數值。
例3:多個符號變量
syms a b c d; %定義多個符號變量 w1 = a+b+c+d w2 = a*b*c*d w3 = (a+b)*(c-d)%輸出結果 w1 = a + b + c + dw2 = a*b*c*dw3 = (a + b)*(c - d)2、符號對象的運算
(1)四則運算
符號表達式的四則運算與數值運算一樣,用+、-、*、/、^運算符實現,其運算結果依然是一個符號表表達式。
(2)關系運算
6種關系運算符:<、<=、>、>=、==、~=o
對應的6個函數:lt( )、le( )、gt( )、ge()、eq()、ne( )
若參與運算的是符號表達式,其結果是一個符號關系表達式;若參與運算的是符號矩陣,其結果是由符號關系表達式組成的矩陣。
在進行符號對象的運算前,可用assume函數對符號對象設置值域,函數調用格式為:
assume(condition)
assume(expr,set)
第一種格式指定變量滿足條件condition,第二種格式指定表達式expr屬于集合set。
(3)邏輯運算
3種邏輯運算符:&(與)、l(或)和~(非)。
4個邏輯運算函數: and( )、or( )、not( )和xor( )。
(4)因式分解與展開運算
MATLAB提供了對符號表達式進行達式分解 、展開、合并的函數,函數的調用格式為:
① factor(s):對符號表達式s分解因式。
② expand(s):對符號表達式s進行展開。
③ collect(s):對符號表達式s合并同類項。
④ collect(s,v):對符號表達式s按變量v合并同類項。
(5)其他運算
①提取有理分式的分子分母:[n,d]=numden(s)。
②提取符號表達式的系數:C=coeffs(s,x)。
③符號表達式化簡:simplify(s)。
④符號多項式與多項式系數向量之間的轉換:
符號多項式轉換為多項式系數向量: p=sym2poly(s)。
多項式系數向量轉換為符號多項式:s=poly2sym§。
(6)符號運算中變量的確定
①如果沒有明確指定自變量,MATLAB將按以下原則確定主變量并對其進行相應運算:
尋找除i、j之外,在字母順序上最接近x的小寫字母。若表達式中有兩個符號變量與x的距離相等,則ASCII碼大者優先。
② symvar()函數可以用于查找一個符號表達式中的符號變量,函數的調用格式為:
symvar(s,n)
函數返回符號表達式s中的n個符號變量。因此,可以用symvar(s,1)查找表達式s的主變量。
例4:四則運算
syms x; f = 2*x^2+3*x-5; g = x^2-x+7; f+g %即將同次項的系數相加減,其結果是一個符號表達式%輸出結果 ans =3*x^2 + 2*x + 2例5:關系運算
syms x; %定義符號變量 assume(x<0); %指定x小于0 abs(x)==x %建立關系表達式,x的絕對值等于x,x為負數,所以x的絕對值就相當于-x%輸出結果 ans =-x == xsyms x; assume(x,'positive'); %指定x為正數 abs(x)==x %x為正數,所以x的絕對值就是本身%輸出結果 ans =x == x例6:邏輯運算
syms x; y1 = x>0 & x<10 y2 = and(x>0,x<10) %邏輯與運算%輸出結果 y1 =0 < x & x < 10y2 =0 < x & x < 10 syms x; y3 = x>5 | x<-5 y4 = or(x>5,x<-5) %邏輯或運算%輸出結果 y3 = 5 < x | x < -5 y4 = 5 < x | x < -5 syms x; y5 = ~x y6 = not(x) %邏輯非%輸出結果 y5 = ~xy6 =~x syms x; y7 = xor(x>12,x<0) %邏輯異或運算%輸出結果 12 < x xor x < 0例7:因式分解與展開運算
syms a b; s = a^3-b^3; factor(s) %進行因式分解 factor(12) %將正數12分解質因子,素數的質因子只有它本身,用這個性質可以判斷一個數是否為素數%輸出結果 ans = [ a - b, a^2 + a*b + b^2]ans =2 2 3 syms x y z; s1 = x^2+23-3*x^3+5*x^2-y^3+12*z-y^3+2*y^4+20*z; expand(s1) %合并同類項%輸出結果 ans =- 3*x^3 + 6*x^2 + 2*y^4 - 2*y^3 + 32*z + 23例8:其它運算:求方程ax^2+bx+C=0的根。
方法一:提取表達式系數和多項式求根的方法 syms a b c x; %定義符號變量 f = a*x^2+b*x+c %建立符號表達式f g = coeffs(f,x) %調用函數將關于x的系數提取出來,得到排列順序為從低次到高次的系數向量 g = g(end:-1:1) %翻轉系數排序,得到系數向量的標準形式 roots(g)%輸出結果 f = a*x^2 + b*x + c g = [ c, b, a]g = [ a, b, c]ans =-(b + (b^2 - 4*a*c)^(1/2))/(2*a)-(b - (b^2 - 4*a*c)^(1/2))/(2*a) 方法二:代數方法求根 syms a b c x; solve(a*x*x+b*x+c == 0) %①直接將方程作為solve函數的參數求解syms a b c x; f = a*x*x+b*x+c==0; %②將方程作為符號表達式f,然后用solve函數求符號表達式f的解 solve(f)syms a b c x; solve(a*x*x+b*x+c-0) %③可以將符號方程所有的項都移到左邊syms a b c x; f = a*x*x+b*x+c; %④將方程作為符號表達式f,省略了右邊等于0 solve(f)%四種方法輸出結果一致 ans =-(b + (b^2 - 4*a*c)^(1/2))/(2*a)-(b - (b^2 - 4*a*c)^(1/2))/(2*a3、符號矩陣
符號矩陣也是一種符號表達式,所以符號表達式運算都可以在矩陣意義下進行。
注意:這些函數作用于符號矩陣時,是分別作用于矩陣的每一個元素。
例9:建立符號矩陣并化簡。
diag( )、inv( )、det()、rank( )、trace( )等都可以直接應用于符號矩陣。
總結
以上是生活随笔為你收集整理的7.1 matlab符号对象(符号对象的建立和四则运算)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.7 matlab数据插值与曲线拟合的
- 下一篇: 7.2 matlab符号微积分(符号函数