在數值運算中,包括輸入輸出以及中間變數都是數值變數。而在符號變數中,變數都以字元形式保留
,數字也是當成字元,符號表示式包括符號函式和符號方程,兩者的區別在與前者不包括等號,
而後者必須帶等號,但他們的建立方法一樣。
1.建立符號函式
f='log(x)'
f = 'log(x)'
2.建立符號方程
a='a*x-2+b-5=0'
a = 'a*x-2+b-5=0'
3.建立符號微分方程
diff eq='dy-y=x'
ans =
12 -52 7 53 -76 76 -60 59
4.用sym命令來建立
x=sym('x')
x =x
5.用sym命令建立的另一種方式
syms x
>> f=sin(x)+cos(x)
f =cos(x) + sin(x)
符號函式得到的是精確的數值解,有時候需要進行數值轉換。函式如下
digits(d) :函式設定有效個數為d的近似解精度
vpa(s):符號表示式s在digits函式設定下的精度的數值解
vpa(s,d):符號表示式s在d下的精度的數值解
subs(s,old,new):將符號表示式s中的old換成new變數
numeric(s):將不含自由變數的符號表示式轉換成數值形式
補充:對於高版本的solve建議使用vpasolve
1.解方程
>> clear all
>> syms x;
>> s=solve([3*x-1==0],[x]);%得到解析解
>> digits(5);%設定5位有效數字
>> s
s =1/3
>> vpa(s)
ans =
0.33333
2.變數替換
>> syms x t
>> y=x-cos(x);
>> y1=subs(y,x,'pi')
y1 =
pi + 1
>> y2=subs(y,x,t)
y2 =
t - cos(t)
1.復合函式的運算
compose(f,g)%返回符合函式f(g(y))
compose(f,g,t)%返回以t為自變數的函式
compose(h,g,x,z) x為h的變數 復合h與g,把變數變為z
compose(f,g,x,y,z)復合 f 與g函式並把變數變為z
2.反函式的運算 finverse
g=finverse(f)單變數的反函式
syms x y
>> y=x^3+1;
>> finverse(y)
ans =
(x - 1)^(1/3)
g=finverses(f,z)多變數的反函式
>> syms x y
>> f=x^2+y;
>> finverse(f,y)
ans =
- x^2 + y
>> finverse(f,x)
ans =
(x - y)^(1/2)
1.用sym函式直接建立符號矩陣
a=str2sym('[sin(x);y+x]')%注意2018b版本使用sym會報錯
a =sin(x)
x + y
2.將數值矩陣轉化為符號矩陣
sym(b)
ans =
[ 2/3, 2^(1/2), 111/500]
[ 7/5, 3/2, 2473854946935173/2251799813685248]
1.符號矩陣的四則運算
a=str2sym('[sin(x);1/x]')
a =sin(x)
1/xb=str2sym('[sin(y);1/y]')
b =sin(y)
a+b
ans =
sin(x) + sin(y)
1/x + 1/y
2.矩陣分解
b=str2sym('[x,1;x+2,0]')
b =[ x, 1]
[ x + 2, 0]
>> [x,y]=eig(b)
x =[ (x/2 - (x^2 + 4*x + 8)^(1/2)/2)/(x + 2), (x/2 + (x^2 + 4*x + 8)^(1/2)/2)/(x + 2)]
[ 1, 1]
y =
[ x/2 - (x^2 + 4*x + 8)^(1/2)/2, 0]
[ 0, x/2 + (x^2 + 4*x + 8)^(1/2)/2]
a=str2sym('[1/x,sin(x);1/(x+2),1/(x+3)]')
a =[ 1/x, sin(x)]
[ 1/(x + 2), 1/(x + 3)]
>> d=diag(a)
d =1/x
1/(x + 3)
>> u=triu(a)
u =[ 1/x, sin(x)]
[ 0, 1/(x + 3)]
>> l=tril(a,-1)
l =[ 0, 0]
[ 1/(x + 2), 0]
u = triu(a
) 返回矩陣a
的上三角部分。
u = triu(a
,k
) 返回位於a
的第 k 條對角線上以及該對角線上方的元素。
1.符號極限
limit(f,x,a)%f在x->a的情況下的極限
limit(f)%當x->0情況下的極限
limit(f,x,a,right)%在x->a的情況下的右極限
2.符號積分
(1)不定積分
f1=int(cos(x))%關於x積分
f2=int(cos(x*t),t)%關於積分
(2)定積分
x=int(x*2,0,1);
(3)符號合計函式:symsum
syms k n;
>> x=symsum(k^2,0,10)
x =385
3.符號微分 diff
diff(sin(x^2))%求函式的一階導數;
ans =
2*x*cos(x^2)
>> diff(sin(x*y),x,2)%求對於x的二階導數
ans =
-y^2*sin(x*y)
1.線性方程組的符號解法:linsolve
a=str2sym('[10 -1 0;-1 10 -2;0 -2 10]')
a =[ 10, -1, 0]
[ -1, 10, -2]
[ 0, -2, 10]
>> b=str2sym('[9;7;6]')
b = 9
7 6>> x=linsolve(a,b)%求得解析解
x =473/475
91/95
376/475
>> vpa(x)
ans =
0.99578947368421052631578947368421
0.95789473684210526315789473684211
0.79157894736842105263157894736842
2.非線性方程組求解
x=solve([x^2+2*x==0],[x])
x =-2
0 >> x1=vpa(x)
x1 =
-2.0
0
dsolve('dx=-a*x') Matlab符號運算
一 宣告 宣告單個符號變數 sym a 宣告多個符號變數 syms a b c 二 符號表示式 提取分子分母 n,d numdem a 自變數為 v的符號函式的反函式 finverse f,v 求和 symsum s,v,a,b 三 符號表示式化簡 以直觀漂亮的形式顯示 pretty f 合併同類項...
matlab符號運算
sym打頭與符號相關 定義符號物件 sym syms f sym arg 將數字 字串和表示式arg轉換成符號物件f syms arg1 arg2 arg3 將符號 arg1 arg2 arg3.定義為基本符號物件 syms arg1 arg2 同上 符號表示式累計求和 symsum s symsu...
MATLAB的符號運算基礎
在數 算中,運算的結果如果是乙個數值,可以稱這類運算為數值運算 如果運算結果為表示式,在matlab中稱為符號運算,符號計算是對未賦值的符號物件 可以是常數 變數 表示式 進行運算和處理。matlab具有符號數學工具箱 symbolicmath toolbox 將符號運算結合到matlab的數值運算...