qinjiao符号变量.docx
《qinjiao符号变量.docx》由会员分享,可在线阅读,更多相关《qinjiao符号变量.docx(20页珍藏版)》请在冰豆网上搜索。
qinjiao符号变量
MATLAB符号运算
一、实验目的
掌握符号变量和符号表达式的创建,掌握MATLAB的symbol工具箱的一些基本应用。
二、实验内容
(1)符号变量、表达式、方程及函数的表示。
(2)符号表达式的操作和转换。
三、实验步骤
1.符号运算的引入
>>f=sym('sin(pi*x)/x')
>>limit(f,’x’,0)
>>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')%符号常量
>>B=sym('x')%符号变量
>>f=sym('2*x^2+3y-1')%符号表达式
>>clear
>>f1=sym('1+2')%有单引号,表示字符串
>>f2=sym(1+2)%无单引号
>>f3=sym('2*x+3')
>>f4=sym(2*x+3)%为什么会出错
>>x=1
>>f4=sym(2*x+3)
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')%有单引号,表示字符串
f1=
1+2
>>f2=sym(1+2)%无单引号
f2=
3
>>f3=sym('2*x+3')
f3=
2*x+3
>>f4=sym(2*x+3)%为什么会出错
?
?
?
Undefinedfunctionorvariable'x'.
>>x=1
x=
1
>>f4=sym(2*x+3)
f4=
5
>>
通过看MATLAB的帮助可知,sym()的参数可以是字符串或数值类型,无论是哪种类
型都会生成符号类型数据。
2)使用syms创建
>>clear
>>symsxyz%注意观察x,y,z都是什么类型的,它们的内容是什么
>>x,y,z
>>f1=x^2+2*x+1
>>f2=exp(y)+exp(z)^2
>>f3=f1+f2
>>clear
>>symsxyz
>>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+sin
(2)')
>>symsxy
>>f2=x^2+y+sin
(2)
>>x=sym('2'),y=sym('1')
>>f3=x^2+y+sin
(2)
>>y=sym('w')
>>f4=x^2+y+sin
(2)
>>f1=sym('x^2+y+sin
(2)')
f1=
x^2+y+sin
(2)
>>symsxy
>>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')
y=
w
>>f4=x^2+y+sin
(2)
f4=
22109510062103075/4503599627370496+w
>>
思考题:
symsx是不是相当于x=sym('x')?
3.符号算术运算
1)符号量相乘、相除
符号量相乘运算和数值量相乘一样,分成矩阵乘和数组乘。
>>a=sym(5);b=sym(7);
>>c1=a*b
>>c2=a/b
>>a=sym(5);B=sym([345]);
>>C1=a*B,C2=a\B
>>symsab
>>A=[5a;b3];B=[2*ab;2*ba];
>>C1=A*B,C2=A.*B
>>C3=A\B,C4=A./B
>>a=sym(5);b=sym(7);
>>c1=a*b
c1=
35
>>c2=a/b
c2=
5/7
>>a=sym(5);B=sym([345]);
>>C1=a*B,C2=a\B
C1=
[15,20,25]
C2=
[3/5,4/5,1]
>>symsab
>>A=[5a;b3];B=[2*ab;2*ba];
>>C1=A*B,C2=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=A\B,C4=A/B
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=
[-1/2*a*(-5+2*b)/(-b^2+a^2),1/2*(2*a^2-5*b)/(-b^2+a^2)]
[1/2*b*(a-6)/(-b^2+a^2),1/2*(-b^2+6*a)/(-b^2+a^2)]
>>
2)符号数值任意精度控制和运算
任意精度的VPA运算可以使用命令digits(设定默认的精度)和vpa(对指定对象以新的
精度进行计算)来实现。
>>a=sym('2*sqrt(5)+pi')
>>b=sym(2*sqrt(5)+pi)
>>digits
>>vpa(a)
>>digits(15)
>>vpa(a)
>>c1=vpa(a,56)
>>c2=vpa(b,56)
>>a=sym('2*sqrt(5)+pi')
a=
2*sqrt(5)+pi
>>b=sym(2*sqrt(5)+pi)
b=
8572296331135796*2^(-50)
>>digits
Digits=32
>>vpa(a)
ans=
7.6137286085893726312809907207421
>>c1=vpa(a,56)
c1=
7.6137286085893726312809907207420553550784061185981572696
>>c2=vpa(b,56)
c2=
7.6137286085893727261009189533069729804992675781250000000
>>
注意观察c1和c2的数据类型,c1和c2是否相等。
3)符号类型与数值类型的转换
使用命令sym可以把数值型对象转换成有理数型符号对象,命令vpa可以将数值型对
象转换为任意精度的VPA型符号对象。
使用double,numeric函数可以将有理数型和VPA
型符号对象转换成数值对象。
>>clear
>>a1=sym('2*sqrt(5)+pi')
>>b1=double(a1)%符号转数值
>>b2=numeric(a1)%符号转数值
>>a2=vpa(a1,70)%数值转符号
clear
a1=sym('2*sqrt(5)+pi')
a1=
2*sqrt(5)+pi
>>b1=double(a1)%符号转数值、
b1=
7.6137
>>b2=numeric(a1)%符号转数值
?
?
?
Undefinedcommand/function'numeric'.
>>b2=num(a1)
?
?
?
Undefinedcommand/function'num'.
>>a2=vpa(a1,70)
a2=
7.613728608589372631280990720742055355078406118598157269516739083128858
>>
4.符号表达式的操作和转换
1)独立变量的确定原则
独立变量的确定原则:
在符号表达式中默认变量是唯一的。
MATLAB会对单个英文小
写字母(除i、j外)进行搜索,且以x为首选独立变量。
如果表达式中字母不唯一,且无x,
就选在字母表顺序中最接近x的字母。
如果有相连的字母,则选择在字母表中较后的那一
个。
例如:
'3*y+z'中,y是默认独立变量。
'sin(a*t+b)'中,t是默认独立变量。
输入以下命令,观察并分析结果。
>>clear
>>f=sym('a+b+i+j+x+y+xz')
>>findsym(f)
>>findsym(f,1),findsym(f,2),findsym(f,3)
>>findsym(f,4),findsym(f,5),findsym(f,6)
>>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)
ans=
x
ans=
x,xz
ans=
x,xz,y
>>findsym(f,4),findsym(f,5),findsym(f,6)
ans=
x,xz,y,j
ans=
x,xz,y,j,b
ans=
x,xz,y,j,b,a
>>
2)符号表达式的化简
符号表达式化简主要包括表达式美化(pretty)、合并同类项(collect)、多项式展开
(expand)、因式分解(factor)、化简(simple或