matlab中的符號運算

2021-09-27 01:25:14 字數 4317 閱讀 9768

在數值運算中,包括輸入輸出以及中間變數都是數值變數。而在符號變數中,變數都以字元形式保留

,數字也是當成字元,符號表示式包括符號函式和符號方程,兩者的區別在與前者不包括等號,

而後者必須帶等號,但他們的建立方法一樣。

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的數值運算...