Matlab符号运算.docx

上传人:b****2 文档编号:890578 上传时间:2023-04-30 格式:DOCX 页数:43 大小:158.36KB
下载 相关 举报
Matlab符号运算.docx_第1页
第1页 / 共43页
Matlab符号运算.docx_第2页
第2页 / 共43页
Matlab符号运算.docx_第3页
第3页 / 共43页
Matlab符号运算.docx_第4页
第4页 / 共43页
Matlab符号运算.docx_第5页
第5页 / 共43页
Matlab符号运算.docx_第6页
第6页 / 共43页
Matlab符号运算.docx_第7页
第7页 / 共43页
Matlab符号运算.docx_第8页
第8页 / 共43页
Matlab符号运算.docx_第9页
第9页 / 共43页
Matlab符号运算.docx_第10页
第10页 / 共43页
Matlab符号运算.docx_第11页
第11页 / 共43页
Matlab符号运算.docx_第12页
第12页 / 共43页
Matlab符号运算.docx_第13页
第13页 / 共43页
Matlab符号运算.docx_第14页
第14页 / 共43页
Matlab符号运算.docx_第15页
第15页 / 共43页
Matlab符号运算.docx_第16页
第16页 / 共43页
Matlab符号运算.docx_第17页
第17页 / 共43页
Matlab符号运算.docx_第18页
第18页 / 共43页
Matlab符号运算.docx_第19页
第19页 / 共43页
Matlab符号运算.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Matlab符号运算.docx

《Matlab符号运算.docx》由会员分享,可在线阅读,更多相关《Matlab符号运算.docx(43页珍藏版)》请在冰点文库上搜索。

Matlab符号运算.docx

Matlab符号运算

实验五符号计算

一.实验目的

掌握符号运算基本用法,重点掌握使用符号解法求解带代数方程组,以及常微分方程解析解及数值解。

二.实验原理与方法

与一般的数值计算不同,符号计算是对字符串符号进行分析和运算,为了便于理解,大家可以将符号计算看作“由计算机实现的数学公式推导”。

进行符号计算时,MATLAB负责将计算请求提交给其内置的MAPLE组件并返回MAPLE的计算结果。

MATLAB的符号计算历经多次的改进和完善,其功能已经非常强大,尤其是在大规模的简单公式推导、逻辑推导等应用中有重要应用。

Matlab的符号数学工具箱可以完成几乎所有得符号运算功能。

这些功能主要包括:

符号表达式的运算,符号表达式的复合、化简,符号矩阵的运算,符号微积分、符号函数画图,符号代数方程求解,符号微分方程求解等。

此外,工具箱还支持可变精度运算,既支持符号运算并以指定的精度返回结果。

符号对象的创建

MATLAB符号运算工具箱处理的对象主要是符号常量、符号变量【注:

符号变量即为由字母(除了i与j)与数字构成的、字母打头的字符串】以及符号表达式。

要实现符号运算,首先需要将处理对象定义为符号变量或符号表达式。

命令1:

sym

功能:

定义一个符号常量、符号变量或符号表达式。

格式

(1):

s=sym(A)%如果输入参数A为一串,则生成的s为一符号常量或者符号变量;如果输入参数A为数值标量或者矩阵(包括符号矩阵),则所得s为所给数值标量或者矩阵的符号表达式;

格式

(2):

x=sym('x')%创建以x命名的符号变量并保存为x

格式(3):

x=sym('x','real')%创建以x命名的符号变量,并限定该符号变量为‘实’符号变量,也即conj(x)等于x。

格式(4):

x=sym('x','positive')%创建以x命名的符号变量,并限定该符号变量为“正、实”符号变量。

格式(5):

x=sym('x','unreal')%创建以x命名的一般的符号变量,并限定该符号变量为“非实”符号变量。

格式(6):

S=sym(A,flag)%flag可为:

'r','d','e','f'

将数值标量或者矩阵A转换为符号形式,转换浮点数方法由可选参数flag指定,flag可取'f','r','e'or'd'

默认为'r'。

参数

作用

d

返回最接近的十进制数值(默认位数为32位)

f

返回该符号值最接近的浮点表示

r

返回该符号值最接近的有理数型(为系统默认方式),可表示为p/q、p*q、10^q、pi/q、2^q和sqrt(p)形式之一

e

返回最接近的带有机器浮点误差的有理值

例:

a=[122/3;45pi]

b=sym([122/3;45pi])

输出结果为:

a=

1.00002.00000.6667

4.00005.00003.1416

b=[1,2,2/3]

[4,5,pi]

例:

c=sqrt(sym

(2))

输出结果为:

c=2^(1/2)%注意sqrt

(2)得到的是浮点十进制小数

例:

d=sym

(2)/sym(5)

输出结果为:

d=2/5%注意2/5结果是0.4000

例:

e=sym

(2)/sym(5)+sym

(1)/sym(3)

输出结果为:

e=11/15

例:

f=sym('sin

(2)')

输出结果为:

f=sin

(2)

例:

g=sym(2*sqrt(5)+pi,'d')

输出结果为:

7.6137286085893727261009189533070

例:

h=sym('a*x^2+b*x+c')

输出结果为:

h=a*x^2+b*x+c

例:

I=sym('[a,b;c,d]')

输出结果为:

I=[a,b]

[c,d]

命令2:

syms

功能:

创建多个符号对象

格式:

(1)symsarg1arg2...argN,

或者syms(‘arg1’,‘arg2’,...,‘argN’)

说明:

该用法与下面语句实现相同的功能

arg1=sym('arg1');arg2=sym('arg2');...argN=sym('argN')

(2)symsarg1arg2...,argn,real

或者syms(‘arg1’,‘arg2’,...,‘argN’,real)

说明:

该用法与下面语句实现相同的功能

arg1=sym('arg1','real');

arg2=sym('arg2','real');...

argN=sym('argN','real')

(3)symsarg1arg2...argN,unreal

或者syms(‘arg1’,‘arg2’,...,‘argN’,’unreal’)

(4)symsarg1arg2...argN,positive

或者syms(‘arg1’,‘arg2’,...,‘argN’,‘positive’)

例:

symsabxt%定义a,b,x,t均为符号变量

例:

比较符号矩阵与字符串矩阵的不同。

A=sym('[a,b;c,d]');%A为符号矩阵

B='[a,b;c,d]'%B为字符串矩阵

结果为:

A=

[a,b]

[c,d] 

B=

[a,b;c,d]

C=sym(B)%转换为符号矩阵

观察三个变量的区别:

NameSizeBytesClass

A2x2312symobject

B1x918chararray

C2x2312symobject

命令3r=findsym(S)

功能:

从一符号表达式中或符号矩阵中找出符号变量

格式:

r=findsym(S)%以字母表的顺序返回表达式S中的所有符号变量,若S中没有任何的符号变量,则findsym返回一空字符串。

r=findsym(S,n)%返回字母表中接近x的n个符号变量

symsaxyztalphabeta

S1=findsym(sin(pi*t*alpha+beta))

S2=findsym(x+i*y-j*z+eps-nan)

S3=findsym(a+y,pi)

计算结果为;

S1=alpha,beta,t

S2=NaN,x,y,z

S3=a,y

符号矩阵的算术运算

命令:

+、-、*、.*、\、.\、/、./、^、.^、’、.’

功能:

符号矩阵的算术操作

用法如下:

A+B、A-B:

符号阵列的加法与减法。

若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。

A*B:

符号矩阵乘法。

A*B为线性代数中定义的矩阵乘法。

按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。

或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信息。

A.*B:

符号数组的乘法。

A.*B为按参量A与B对应的分量进行相乘。

A与B必须为同型阵列,或至少有一个为标量。

即:

An*m.*Bn*m=(aij)n*m.*(bij)n*m=Cn*m=(cij)n*m,则cij=aij*bij,i=1,2,…,n;j=1,2,…,m。

A\B矩阵的左除法。

X=A\B为符号线性方程组A*X=B的解。

我们指出的是,A\B近似地等于inv(A)*B。

若X不存在或者不唯一,则产生一警告信息。

矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。

A.\B数组的左除法。

A.\B为按对应的分量进行相除。

若A与B

为同型阵列时,An*m.\Bn*m=(aij)n*m.\(bij)n*m=Cn*m=(cij)n*m,

则cij=aij\bij,i=1,2,…,n;j=1,2,…,m。

若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。

A/B矩阵的右除法。

X=B/A为符号线性方程组X*A=B的解。

我们指出的是,B/A粗略地等于B*inv(A)。

若X不存在或者不唯一,则产生一警告信息。

矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。

A./B数组的右除法。

A./B为按对应的分量进行相除。

若A与B为同型阵列时,An*m./Bn*m=(aij)n*m./(bij)n*m=Cn*m=(cij)n*m,则cij=aij/bij,i=1,2,…,n;j=1,2,…,m。

若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。

A^B矩阵的方幂。

计算矩阵A的整数B次方幂。

若A为标量而B为方阵,A^B用方阵B的特征值与特征向量计算数值。

若A与B同时为矩阵,则返回一错误信息。

A.^B数组的方幂。

A.^B为按A与B对应的分量进行方幂计算。

若A与B为同型阵列时,An*m..^Bn*m=(aij)n*m..^(bij)n*m=Cn*m=(cij)n*m,则cij=aij^bij,i=1,2,…,n;j=1,2,…,m。

若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。

A'矩阵的Hermition转置。

若A为复数矩阵,则A'为复数矩阵的共轭转置。

即,若A=(aij)=(xij+i*yij),则

A.'数组转置。

A.'为真正的矩阵转置,其没有进行共轭转置。

symsabcdefgh;

A=[ab;cd];

B=[ef;gh];

C1=A.*B

C2=A.^B

C3=A*B/A

C4=A.*A-A^2

symsa11a12a21a22b1b2;

A=[a11a12;a21a22];

B=[b1b2];

X=B/A;%求解符号线性方程组X*A=B的解

x1=X

(1)

x2=X

(2)

计算结果为:

C1=

[a*e,b*f]

[c*g,d*h]

C2=

[a^e,b^f]

[c^g,d^h]

C3=

[-(a*c*f+c*b*h-a*e*d-b*d*g)/(a*d-b*c),(a*b*h-b^2*g+a^2*f-b*a*e)/(a*d-b*c)]

[-(-c*e*d+c*d*h+c^2*f-d^2*g)/(a*d-b*c),(a*d*h+a*c*f-b*c*e-b*d*g)/(a*d-b*c)]

C4=

[-b*c,b^2-a*b-b*d]

[c^2-a*c-d*c,-b*c]

x1=

(-a22*b1+b2*a21)/(a12*a21-a11*a22)

x2=

-(-a12*b1+a11*b2)/(a12*a21-a11*a22)

符号对象的基本运算

函数1:

collect

功能:

合并同类项

格式:

(1)R=collect(S)%对于多项式S中的每一函数,collect(S)按缺省变量x的次数合并系数。

(2)R=collect(S,v)%对指定的变量v计算,操作同上。

例:

symsxy;

R1=collect((exp(x)+x)*(x+2))

R2=collect((x+y)*(x^2+y^2+1),y)

R3=collect([(x+1)*(y+1),x+y])

计算结果为:

R1=

x^2+(exp(x)+2)*x+2*exp(x)

R2=

y^3+x*y^2+(x^2+1)*y+x*(x^2+1)

R3=

[(y+1)*x+y+1,x+y]

函数2:

colspace

功能:

求列空间的基

格式:

B=colspace(A)%返回矩阵B,其列向量形成由矩阵A的列向量形成的空间的坐标基,其中A可以是符号或数值矩阵。

而size(colspace(A),2)等于rank(A)。

即由A生成的空间维数等于A的秩。

例:

symsabc

A=sym([1,a;2,b;3,c])

B=colspace(A)

计算结果为:

A=

[1,a]

[2,b]

[3,c]

B=

[1,0]

[0,1]

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

函数3:

compose

功能:

复合函数计算

格式:

compose(f,g)%返回复合函数f[g(y)],其中f=f(x),g=g(y)。

其中符号x为函数f中由命令findsym(f)确定的符号变量,符号y为函数g中由命令findsym(g)确定的符号变量。

compose(f,g,z)%返回复合函数f[g(z)],其中f=f(x),g=g(y),符号x、y为函数f、g中由命令findsym确定的符号变量。

compose(f,g,x,z)%返回复合函数f[g(z)],变量x为函数f中的自变量f=f(x)。

令x=g(z),再将x=g(z)代入函数f中。

compose(f,g,x,y,z)%返回复合函数f[g(z)]。

变量x为函数f中的自变量f=f(x),变量y为函数g中的自变量g=g(y)。

令x=g(y),再将x=g(y)代入函数f=f(x)中,得f[g(y)],最后用指定的变量z代替变量y,得f[g(z)]。

例:

symsxyztuv;

f=1/(1+x^2*y);h=x^t;g=sin(y);p=sqrt(-y/u);

C1=compose(f,g)%令x=g=sin(y),再替换f中的变量%x=findsym(f)。

C2=compose(f,g,t)%令x=g=sin(t),再替换f中x=findsym(f)。

C3=compose(h,g,x,z)%令x=g=sin(z),再替换h中的变量x。

C4=compose(h,g,t,z)%令t=g=sin(z),再替换h中的变量t。

C5=compose(h,p,x,y,z)%令x=p(y)=sqrt(-y/u),替换h中的

%变量x,再将y换成z。

C6=compose(h,p,t,u,z)%令t=p(u)=sqrt(-y/u),替换h中的变量t,再将u换成z。

计算结果为:

C1=

1/(1+sin(y)^2*y)

C2=

1/(1+sin(t)^2*y)

C3=

sin(z)^t

C4=

x^sin(z)

C5=

((-z/u)^(1/2))^t

C6=

x^((-y/z)^(1/2))

函数4:

conj

功能:

符号复数的共轭

格式:

conj(X)%返回符号复数X的共轭复数

例:

X=real(X)+i*imag(X),则conj(X)=real(X)-i*imag(X)

函数5:

real

功能:

符号复数的实数部分

格式:

real(Z)%返回符号复数z的实数部分

函数6:

imag

功能:

符号复数的虚数部分

格式imag(Z)%返回符号复数z的虚数部分

函数7:

digits

功能:

设置变量的精度

格式:

(1)digits(d)%设置当前的可变算术精度的位数为整数d位

(2)d=digits%返回当前的可变算术精度位数给d

(3)digits%显示当前可变算术精度的位数

说明:

设置有意义的十进制数值的、在Maple软件中用于做可变算术精度(命令为:

vpa)计算的数字位数。

其缺省值为32位数字。

例:

z=1.0e-16%z为一很小的数

x=1.0e+2%x为较大的数

digits(14)

y1=vpa(x*z+1)%大数1“吃掉”小数x*y

digits(15)

y2=vpa(x*z+1)%防止“去掉”小数x*y

计算结果为:

z=

1.0000e-016

x=

100

y1=

1.0000000000000

y2=

1.00000000000001

函数8:

double

功能:

将符号转换为MATLAB的数值形式

格式:

R=double(S)%将符号对象S转换为数值对象R。

若S为符号常数或表达式常数,double返回S的双精度浮点数值表示形式;若S为每一元素是符号常数或表达式常数的符号矩阵,double返回S每一元素的双精度浮点数值表示的数值矩阵R。

例:

gold_ratio=double(sym('(sqrt(5)-1)/2'))%计算黄金分割率。

T=sym(hilb(4))

R=double(T)

计算结果为:

gold_ratio=

0.6180

T=

[1,1/2,1/3,1/4]

[1/2,1/3,1/4,1/5]

[1/3,1/4,1/5,1/6]

[1/4,1/5,1/6,1/7]

R=

1.00000.50000.33330.2500

0.50000.33330.25000.2000

0.33330.25000.20000.1667

0.25000.20000.16670.1429

函数9:

expand

功能:

符号表达式的展开

格式:

R=expand(S)%对符号表达式S中每个因式的乘积进行展开计算。

该命令通常用于计算多项式函数、三角函数、指数函数与对数函数等表达式的展开式。

例:

symsxyabct

E1=expand((x-2)*(x-4)*(y-t))

E2=expand(cos(x+y))

E3=expand(exp((a+b)^3))

E4=expand(log(a*b/sqrt(c)))

E5=expand([sin(2*t),cos(2*t)])

计算结果为:

E1=

x^2*y-x^2*t-6*x*y+6*x*t+8*y-8*t

E2=

cos(x)*cos(y)-sin(x)*sin(y)

E3=

exp(a^3)*exp(a^2*b)^3*exp(a*b^2)^3*exp(b^3)

E4=

log(a*b/c^(1/2))

E5=

[2*sin(t)*cos(t),2*cos(t)^2-1]

函数10:

factor

功能:

符号因式分解

格式:

factor(X)%参量x可以是正整数、符号表达式阵列或符号整数阵列。

若X为一正整数,则factor(X)返回X的质数分解式。

若x为多项式或整数矩阵,则factor(X)分解矩阵的每一元素。

若整数阵列中有一元素位数超过16位,用户必须用命令sym生成该元素。

例:

symsabxy

F1=factor(x^4-y^4)

F2=factor([a^2-b^2,x^3+y^3])

F3=factor(sym('12345678901234567890'))

计算结果为:

F1=

(x-y)*(x+y)*(x^2+y^2)

F2=

[(a-b)*(a+b),(x+y)*(x^2-x*y+y^2)]

F3=

(2)*(3)^2*(5)*(101)*(3803)*(3607)*(27961)*(3541)

函数11:

numden

功能:

符号表达式的分子与分母

格式[N,D]=numden(A)

说明:

将符号或数值矩阵A中的每一元素转换成整系数多项式的有理式形式,其中分子与分母是相对互素的。

输出的参量N为分子的符号矩阵,输出的参量D为分母的符号矩阵。

例3-11

symsxyabcd;

[n1,d1]=numden(sym(sin(4/5)))

[n2,d2]=numden(x/y+y/x)

A=[a,1/b;1/cd];

[n3,d3]=numden(A)

计算结果为:

n1=

6461369247334093

d1=

9007199254740992

n2=

x^2+y^2

d2=

y*x

n3=

[a,1]

[1,d]

d3=

[1,b]

[c,1]

函数12:

simple

功能:

搜索符号表达式的最简形式

格式:

(1)r=simple(S)%该命令试图找出符号表达式S的代数上的简单形式,显示任意的能使表达式S长度变短的表达式,且返回其中最短的一个。

若S为一矩阵,则结果为整个矩阵的最短形式,而非是每一个元素的最简形式。

若没有输出参量r,则该命令将显示所有可能使用的算法与表达式,同时返回最短的一个。

(2)[r,how]=simple(S)%没有显示中间的化简结果,但返回能找到的最短的一个。

输出参量r为一符号,how为一字符串,用于表示算法。

例:

symsx

R1=simple(cos(x)^4+sin(x)^4)

R2=simple(2*cos(x)^2-sin(x)^2)

R3=simple(cos(x)^2-sin(x)^2)

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

R5=simple(cos(x)+i*sin(x))

R6=simple((x+1)*x*(x-1))

R7=simple(x^3+3*x^2+3*x+1)

[R8,how]=simple(cos(3*acos(x)))

计算的结果为:

R1=

1/4*cos(4*x)+3/4

R2=

3*cos(x)^2-1

R3=

cos(2*x)

R4=

cos(x)+i*sin(x)

R5=

exp(i*x)

R6=

x^3-x

R7=

(x+1)^3

R8=

4*x^3-3*x

how=

expand

函数13:

simplify

功能:

符号表达式的化简

格式:

R=simplify(S)

说明:

使用Maple软件中的化简规则,将化简符号矩阵S中每一元素。

例:

symsxabc

R1=simplify(sin(x)^4+cos(x)^4)

R2=simplify(exp(c*log(sqrt(a+b))))

S=[(x^2+5*x+6)/(x+2),sqrt(16)];

R3=simplify(S)

计算结果为:

R1=

2*cos(x)^4+1-2*cos(x)^2

R2=

(a+b)^(1/2*c)

R3=

[x+3,4]

函数14:

size

功能:

符号矩阵的维数

格式:

(1)d=size(A)%若A为m*n阶的符号矩阵,则输出结果d=[m,n]。

(2)[m,n]=size(A)%分别返回矩阵A的行数于m,列数于n。

(3)d=size(A,n)%返回由标量n指定的A的方向的维数:

n=1为行方向,n=2为列方向。

例:

syms

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2