四MATLAB符號運算

2023-01-03 19:36:04 字數 5232 閱讀 8853

一.實驗目的

掌握符號變數和符號表示式的建立,掌握matlab的symbol工具箱的一些基本應用。

二.實驗內容

(1)符號變數、表示式、方程及函式的表示。

(2)符號為積分運算。

(3)符號表示式的操作和轉換。

(4)符號微分方程求解。

三.實驗步驟

1.符號運算的引入

在數值運算中如果求lim(sin(pi*x)/x(x-0),則可以不斷讓x趨近0,一球的表示式趨近什麼數,但是終究不能令x=0,在數值運算中0不能做除數。matlab的符號運算能解決這類問題。輸入如下命令:

>> f=sym('sin(pi*x)/x')

f =sin(pi*x)/x

>> limit(f,'x',0)

ans = pi

2.符號常量、符號變數、符號表示式的建立

1)使用sym()建立

輸入以下命令,觀察workspace中a,b,f是什麼型別的資料,占用多少位元組的記憶體空間。

>> a=sym('1')

a = 1

>> b=sym('x')

b = x

>> f=sym('2*x^2+3*y-1')

f =2*x^2+3*y-1

>> clear

>> f1=sym('1+2'),f2=sym(1+2),f3=sym('2*x+3'),f4=sym(2*x+3)

f1 =

1+2f2 =3

f3 =

2*x+3

??? undefined function or variable 'x'.

>> x=2,f4=sym(2*x+3)

x = 2

f4 = 7

sym()的引數可以是字串或數值型別,無論你是哪種型別都會生成符號型別資料。

2)使用syms建立

>> clear

>> syms x y z

>> x,y,z

x =x

y =y

z =z

>> f1=x^2+2*x+1

f1 =

x^2+2*x+1

>> f2=exp(y)+exp(z)^2

f2 =

exp(y)+exp(z)^2

>> f3=f1+f2

f3 =

x^2+2*x+1+exp(y)+exp(z)^2

用符號型別的變數經過運算(加減乘除)得到。又如:

>> f1=sym('x^2+y+siin(2)')

f1 =

x^2+y+siin(2)

>> syms x y

>> f2=x^2+y+sin(2)

f2 =

x^2+y+4095111552621091/4503599627370496

>> x=sym('2'),y=sym('1')

x =2

y =1

>> f3=x^2+y+sin(2)

f3 =

26613109689473571/4503599627370496

>> y=sym('w'),f4=x^2+y+sin(2)

y =w

f4 =

22109510062103075/4503599627370496+w

思考題:syms x是不是相當於x=sym(『x』)? 答:不等於,前者是符號x作用於整個工作空間,除非clear,後者只作用於變數x。

3.符號矩陣建立

>> syms a1 a2 a3 a4

>> a=[a1 a2;a3 a4]

a =[ a1, a2]

[ a3, a4]

>> a(1),a(3)

ans =

a1ans =

a2>> b=sym('[b1 b2;b3 b5]')

b =[ b1, b2]

[ b3, b5]

>> c1=sym('sin(x)'),c2=sym('x^2'),c3=sym('3*y+z'),c4=sym('3'),c=[c1 c2;c3 c4]

c1 =

sin(x)

c2 =

x^2c3 =

3*y+z

c4 =

3c =

[ sin(x), x^2]

[ 3*y+z, 3]

思考題:分別用sym和syms建立符號表示式:f1=cosx+(-(sin(x))^2)^(1/2),f2=y/exp(-2*t)。

答:>> sym('f1=cos(x)+(-(sin(x))^2)^(1/2)'),sym('f2=y/exp(-2*t)')

ans =

f1=cos(x)+(-(sin(x))^2)^(1/2)

ans =

f2=y/exp(-2*t)

>> syms x y t

>> f1=cos(x)+(-(sin(x))^2)^(1/2),f2=y/exp(-2*t)

f1 =

cos(x)+(-sin(x)^2)^(1/2)

f2 =

y/exp(-2*t)

4.符號算術運算

1)符號量相乘、相除(分成矩陣乘和陣列乘)。

>> a=sym(5);b=sym(7);

>> c1=a*b,c2=a/b

c1 =

35c2 =

5/7>> a=sym(5);b=sym([3 4 5]);

>> c1=a*b,c2=a\b

c1 =

[ 15, 20, 25]

c2 =

[ 3/5, 4/5, 1]

>> syms a b

>> a=[5 a;b 3];b=[2*a b;2*b a]

b =[ 2*a, b]

[ 2*b, a]

>> c1=a*b,c2=a.*b,c3=a\b,c4=a./b

c1 =

[ 10*a+2*a*b, 5*b+a^2]

[ 2*a*b+6*b, b^2+3*a]

c2 =

[ 10*a, a*b]

[ 2*b^2, 3*a]

c3 =

[ 2*a*(b-3)/(-15+a*b), (a^2-3*b)/(-15+a*b)]

[ 2*b*(a-5)/(-15+a*b), -(5*a-b^2)/(-15+a*b)]

c4 =

[ 5/2/a, a/b]

[ 1/2, 3/a]

2)符號數值任意精度控制和運算

任意精度的vpa運算可以使用命令digits(設定預設的精度)和vpa(對指定物件以新的精度進行計算)來實現。

>> a=sym('2*sqrt(5)+pi'),b=sym(2*sqrt(5)+pi)

a =2*sqrt(5)+pi

b =8572296331135796*2^(-50)

>> digits

digits = 32

>> vpa(a),c1=vpa(a,56),c2=vpa(b,56)

ans =

7.6137286085893726312809907207421

c1 =

7.c2 =

7.3)符號型別與數值型別的轉換

使用double,numeric函式可以將有理數型和vpa型符號物件轉換成數值物件。

>> clear

>> a1=sym('2*sqrt(5)+pi'),b1=double(a1),b2=isnumeric(b1),a2=vpa(a1,70)

a1 =

2*sqrt(5)+pi

b1 =

7.6137

b2 =

1a2 =

7.5.符號表示式的操作和轉換

1)獨立變數的確定原則

獨立變數的確定原則:在符號表示式中預設變數是唯一的。matlab會對單個英文小寫字母(除i,j)進行搜尋,且以為首選獨立變數。

如果表示式中字幕唯一,且無x,就選在字母表順序中最接近x的字母。如果有相連的字母,則選擇在字母表中較後的那乙個;

輸入以下命令:

>> clear

>> f=sym('a+b+i+j+x+y+xz')

f =a+b+i+j+x+y+xz

>> findsym(f)

ans =

a, b, j, x, xz, y

>> findsym(f,1),findsym(f,2),findsym(f,3),findsym(f,4),findsym(f,5),findsym(f,6)

ans =

xans =

x,xz

ans =

x,xz,y

ans =

x,xz,y,j

ans =

x,xz,y,j,b

ans =

x,xz,y,j,b,a

2)符號表示式的化簡

(1)合併同類項collect

>> syms x t;f=(x^2+x*exp(-t)+1)*(x+exp(-t));

>> f1=collect(f),f2=collect(f,'exp(-t)')

f1 =

x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t)

f2 =

x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x

(2)顯示格式美化pretty

>> pretty(f1),pretty(f2)

322x + 2 exp(-t) x + (1 + exp(-t) ) x + exp(-t)

2 22

x exp(-t) + (2 x + 1) exp(-t) + (x + 1) x

(3)多項式展開expand函式。展開(x-1)^12。

>> syms x;

>> f=(x-1)^12;

>> pretty(expand(f))

12 11 10 9 8 7 6 5

1 + x - 12 x + 66 x - 220 x + 495 x - 792 x + 924 x - 792 x

4 3 2

495 x - 220 x + 66 x - 12 x

(4)因式分解fator函式,分解x^12-1。

運算符號由來

500多年以前,德國有一位數學家叫威德曼。他在橫線上加一豎 用來表示增加的意思,在 上去掉一豎 用來表示減少 去掉的意思。於是,加號 和減號 就產生了。但是它們被大家公認,作為運算符號,是從1514年被荷蘭數學家荷伊克正式應用開始。是1557年英國劍橋大學的列科爾德引入的。後來德國數學家萊布尼茲倡議...

實驗一MATLAB基本操作及運算

一 實驗目的 1 理解matlab資料物件的特點 2 掌握基本matlab運算規則 3 掌握matlab幫助的使用方法 二 實驗的裝置及條件 計算機一台 帶有matlab7.0以上的軟體環境 三 實驗內容 要求建立乙個名為的,把與實驗內容1 7相關的實驗命令都放入該檔案中,題與題之間用相應注釋分割。...

四則混合運算和簡便運算

龔山完小吳玲 在小學的時候我們主要學習的就是一些的計算很簡便的運算方法,這些的知識點都是繼續學習數學的基礎,只有打好基礎才能夠更好的學習。下面給大家的是小學六年級數學教案 運算定律與簡便演算法四則混合運算,大家可以在實際的基礎上借鑑。一.教學目的 1.使學生掌握加法和乘法的運算定律,能夠比較熟練地運...