四 MATLAB符号运算

更新时间:2023-10-11 01:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验四 MATLAB符号运算

一.实验目的

掌握符号变量和符号表达式的创建,掌握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+2 f2 = 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 = a1 ans = 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^2 c3 =

3*y+z c4 = 3 c =

[ 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 = 35 c2 = 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.6137286085893726312809907207420553550784061185981572696 c2 =

7.6137286085893727261009189533069729804992675781250000000 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 = 1 a2 =

7.613728608589372631280990720742055355078406118598157269516739083128858 5.符号表达式的操作和转换 1)独立变量的确定原则

独立变量的确定原则:在符号表达式中默认变量是唯一的。Matlab会对单个英文小写字母(除i,j)进行搜索,且以为首选独立变量。如果表达式中字幕唯一,且无x,就选在字母表顺序中最接近x的字母。如果有相连的字母,则选择在字母表中较后的那一个; 输入以下命令: >> clear

本文来源:https://www.bwwdw.com/article/qusf.html

Top