实验四 MATLAB 符号运算一、实验目的掌握符号变量和符号表达式的创建,掌握MATLAB 的symbol 工具箱的一些基本应用。
二、实验内容(1) 符号变量、表达式、方程及函数的表示。
(2) 符号微积分运算。
(3) 符号表达式的操作和转换。
(4) 符号微分方程求解。
三、实验步骤1. 符号运算的引入 在数值运算中如果求xx x πsin lim 0→,则可以不断地让x 接近于0,以求得表达式接近什么数,但是终究不能令0=x ,因为在数值运算中0是不能作除数的。
MATLAB 的符号运算能解决这类问题。
输入如下命令:>>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 =Pi2. 符号常量、符号变量、符号表达式的创建1) 使用sym( )创建输入以下命令,观察Workspace 中A 、B 、f 是什么类型的数据,占用多少字节的内存空间。
>> A=sym('1')>> B=sym('x')>> f=sym('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)>> 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)??? Undefined function or variable 'x'. >> x=1x =>> f4=sym(2*x+3)f4 =通过看MATLAB的帮助可知,sym( )的参数可以使字符串或数值类型,无论是哪种类型都会生成符号类型数据。
2)使用syms 创建>>syms x y z>>x,y,z>> f1=x^2+2*x+1>>f2=exp(y)+exp(z)^2>> f3=f1+f2>> clear>> syms x y z>> x,y,zx =xy =yz =z>> f1=x^2+2*x+1f1 =x^2+2*x+1>> f2=exp(y)+exp(z)^2f2 =exp(y)+exp(z)^2>> f3=f1+f2f3 =x^2+2*x+1+exp(y)+exp(z)^2通过以上实验,知道生成符号表达式的第二种方法:由符号类型的变量经过运算(加减乘除等)得到,又如:>> f1=sym('x^2+y+sin(2)')>> syms x y>> 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)>> syms x y>> f2=x^2+y+sin(2)f2 =x^2+y+4095111552621091/4503599627370496>> x=sym('2'),y=sym('1')x =2y =1>> f3=x^2+y+sin(2)f3 =26613109689473571/4503599627370496>> y=sin('w')??? Undefined function or method 'sin' for input arguments of type 'char'.>> y=sym('w')y =w>> f4=x^2+y+sin(2)f4 =22109510062103075/4503599627370496+w思考题:syms x 是不是相当于?)'('x sym x =理解:这两个式子是不相同的。
syms x 是定义x 为符号变量,而?)'('x sym x =是给x 赋值。
3. 符号复诊创建】>> syms a1 a2 a3 a4>> A=[a1 a2;a3 a4]>> A(1),A(3)>> syms a1 a2 a3 a4>> A=[a1 a2;a3 a4]A =[ a1, a2][ a3, a4]>> A(1),A(3)ans =a1ans =或者>> B=sym('[ b1 b2;b3 b4]') >> c1=sym('sin(x)')>> c2=sym('x^2')>> c3=sym('3*y+z')>> c4=sym('3')>> C=[c1 c2;c3 c4]>> B=sym('[ b1 b2;b3 b4]') B =[ b1, b2][ b3, b4]>> c1=sym('sin(x)')c1 =sin(x)>> c2=sym('x^2')c2 =x^2>> c3=sym('3*y+z')c3 =3*y+z>> c4=sym('3')c4 =3>> C=[c1 c2;c3 c4]C =[ sin(x), x^2][ 3*y+z, 3]练习:分别用sym 和syms 创建符号表达式:.,2sin cos 221t e y f x x f -=-+=4.符号算术运算1) 符号量相乘、相除符号量相乘运算和数值量相乘一样,分成矩阵乘和数组乘。
>> a=sym(5);b=sym(7);>> c1=a*b>> c2=a/b>> a=sym(5);B=sym([3 4 5]);>> C1=a*B,C2=a\B>> syms a b>> A=[5 a;b 3];B=[2*a b;2*b a];>> C1=A*B, C2=A.*B>> C3=A\B,C4=A./B>> a=sym(5);b=sym(7);>> c1=a*bc1 =35>> c2=a/bc2 =5/7>> a=sym(5);B=sym([3 4 5s]??? s]|Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.>> a=sym(5);B=sym([3 4 5]);>> C1=a*B,C2=a\BC1 =[ 15, 20, 25]C2 =[ 3/5, 4/5, 1]>> syms a b>> A=[5 a;b 3];B=[2*a b;2*b a];>> C1=A*B, C2=A.*BC1 =[ 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./BC3 =[ 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)>> 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)>> digitsDigits = 32>> vpa(a)ans =7.6137286085893726312809907207421>> digits(15)>> vpa(a)ans =7.61372860858937>> c1=vpa(a,56)c1 =7.6137286085893726312809907207420553550784061185981572696>> c2=vpa(b,56)c2 =7.6137286085893727261009189533069729804992675781250000000注意观察c1和c2的数据类型,c1和c2是否相等。