当前位置:文档之家› Matlab符号计算(含作业)

Matlab符号计算(含作业)

Matlab符号计算(含作业)
Matlab符号计算(含作业)

第 2 章符号计算

符号计算:

解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,获得解析结果。

符号计算建立在数值完全准确表达和推演严格解析的基础之上,所得结果完全准确。

特点:

一.相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。

二.在相当一些场合,符号计算解算问题的命令和过程,显得比数值计算更自然、更简明。

三.大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。

2.1符号对象和符号表达式

MATLAB依靠基本符号对象(包括数字、参数、变量)、运算符及一些预定义函数来构造和衍生符号表达式和符号方程。

2.1.1基本符号对象和运算算符

1.生成符号对象的基本规则

●任何基本符号对象(数字、参数、变量、表达式、函数)都必须借助

专门的符号命令sym、syms、symfun定义。

●任何包含符号对象的表达式或方程,将继承符号对象的属性。

2.精准符号数字和符号常数

符号(类)数字的定义:

sym(Num) 采用精准数值类数创建精准的符号数字(推荐格式!)

sc=sym(Num) 采用精准数值类数创建精准的符号常数sc(推荐格式!)

说明:若输入量Num是精准的浮点数(如0.321、10/3等),能生成精准的符号数字;

若输入量Num是诸如sin(0.3)的数值表达式,那么就只能生成由数字表达式获得的16位精度的近似符号数字。

sym('Num') 采用有理分数字符串创建精准的符号数字

sc=sym('Num') 采用有理分数字符串创建精准的符号常数sc

说明: Num必须处于(英文状态下的)单引号内,构成字符串(关于字符串参见附录A);

只有当字符串数字'Num'采用诸如321/1000、10/3等整数构成的有理分数形式表达时,sym('Num') 才能生成精准的符号数字;

若字符串数字用诸如0.321、3.21e-1等“普通小数或科学记述数”表达,那么只能产生“近似符号数字”。在默认情况下,该近似符号数字为32位精度。

【例2.1-1】

(1)创建完全精准的符号数字或数字表达式

clear all

R1=sin(sym(0.3)) % 输入量为普通小数

R2=sin(sym(3e-1)) % 输入量为科学记述数

R3=sin(sym(3/10)) % 输入量为有理分数

R4=sin(sym('3/10')) % 输入量为“整数构成的有理分数”字符串数字

disp(['R1属于什么类别?答:',class(R1)])

disp(['R1与R4是否相等?(是为1,否为0)答:',int2str(logical(R1==R4))]) R1 =

sin(3/10)

R2 =

sin(3/10)

R3 =

sin(3/10)

R4 =

sin(3/10)

R1属于什么类别?答:sym

R1与R4是否相等?(是为1,否为0)答:1

(2)产生具有32位精度的“近似”符号数字(杜绝使用!)

S1=sin(sym('0.3')) % sym的输入量是字符串小数,生成32位精度下的

% 近似符号数,进而在sin作用下给出近似符号数。

S2=sin(sym('3e-1')) % syms的输入量是字符串科学记述数。

eRS=vpa(abs(R1-S1),64);

disp(['S1属于什么类别?答:',class(S1)])

disp(['S1与R1是否相同?答: ',int2str(logical(R1==S1))])

disp('S1与R1的误差为')

disp(double(eRS))

S1 =

0.29552020666133957510532074568503

S2 =

0.29552020666133957510532074568503

S1属于什么类别?答:sym

S1与R1是否相同?答: 0

S1与R1的误差为

6.3494e-41

(3)产生具有16位精度的“近似”符号数字(杜绝使用!)

F1=sym(sin(3/10)) % sym的输入量为双精度表达式sin(3/10),

% 就只能创建出仅16位精度的近似符号数。

F2=sym(sin(0.3)) % 同上

eFS=vpa(abs(F1-S1),32);

disp(['F1属于什么类别?答:',class(F1)])

disp(['S1与F1是否相同?答: ',int2str(logical(F1==S1))])

disp('F1与S1的误差为')

disp(double(eFS))

F1 =

5323618770401843/18014398509481984

F2 =

5323618770401843/18014398509481984

F1属于什么类别?答:sym

S1与F1是否相同?答: 0

F1与S1的误差为

2.8922e-17

3.基本符号变量

经典教科书里,表达式e-ax sinbx中的a,b称为参数,x为变量。在MATLAB的符号计算中,a、b、x统称为基本符号变量,其中,x总被默认为“待解(自由)符号变量”,其他被作为“符号参数”处理。

定义基本符号变量的命令格式:

para=sym(' para') 定义单个复数域符号变量para

para=sym(' para', 'Flag') 定义单个Flag指定域符号变量para

syms para 定义单个复数域符号变量para的另一种方式syms para Flag 定义单个Flag指定域符号变量para的另一种方式

syms para1 para2 paraN 定义多个复数域符号变量para1 para2 paraN syms para1 para2 paraN Flag 定义多个Flag指定域符号变量para1 para2 paraN

●符号参数名不要用处于“字母表中小写字母x及其两侧的英文字母”开头。

●Flag表示数域的限定性假设,可具体取以下词条:

positive 正实数域;

real 实数域。

●默认值是复数域符号变量

●sym命令只能对单变量作用,syms不能用于对数值、常数相关的定义。

4.符号计算中的各种算符

●与数值计算中的算符在形状、名称和使用方法上相同。

2.1.2符号计算中的函数命令

2.1.3符号表达式和符号函数

1. 符号表达式和符号函数

(1)为表达某种数学算式、实现某种计算目的,采用基本符号对象(数字、常数、变量)、运算符、MATLAB函数命令等基本要素编写而成的M码。

(2)为表达变量间抽象(或具体)约束关系而编写的M码。在符号函数中,构成函数关系的变量名必须明确指定。即,在定义符号函数时,不仅要指定函数名,而且要指定变量名。比如syms f(x,y)就定义了一个以x、y为变量的抽象符号函数f。

2 自由符号变量

解题通常是围绕自由符号变量进行。

确定自由符号变量的规则:

●在专门指定变量名的符号运算中,解题一定围绕指定变量名进行。

●x是首选自由符号变量,其后的次序规则是:与x的ASCII码值之差

的绝对值小的字母优先;差绝对值相同时,ASCII码值大的字母优先。

●自动识别符号变量时,字母的优先次序为x,y,w,z,v等,大写后排。自动识别表达式中自由、独立的符号变量的命令:

symvar(expression) 列出表达式中的所有基本符号变量

symvar(expression, n) 列出表达式中n个认定的自由变量

【例2.1-2】

1)各种符号对象的创建

clear

syms a b c x y u v % 定义基本符号对象 syms F(X,Y,Z) % 定义“抽象”符号函数 k=sym(3) % 定义符号常数 G=sym('p*sqrt(q)+r*sin(t)') % 创建符号表达式

EXPR=a*G*u+(b*x^2+k)*v % 创建“衍生”符号表达式 f(x,y)=a*x^2+b*y^2-c % 创建“具体”符号函数 disp(F) % 显示抽象符号函数 k = 3 G =

p*q^(1/2) + r*sin(t) EXPR =

v*(b*x^2 + 3) + a*u*(p*q^(1/2) + r*sin(t)) f(x, y) =

a*x^2 + b*y^2 - c F(X, Y, Z)

symbolic function inputs: X, Y, Z

2)symvar 对EXPR 符号表达式的作用

symvar(EXPR) % % ans =

[ a, b, p, q, r, t, u, v, x]

symvar(EXPR,20) % ans =

[ x, v, u, t, r, q, p, b, a]

symvar(EXPR,1) % ans = x

3)symvar 对符号函数的作用

disp(symvar(f)) % [ a, b, c, x, y]

disp(symvar(f,2)) % [ x, y]

【例2.1-3】用符号法求方程2uw zw v +=的解。 1)产生符号表达式和符号函数

clear

syms u v w z %

Eq=u*w^2+z*w-v % 表达式 g(z)=u*w^2+z*w ==v % 函数

Eq =

u*w^2 + z*w - v g(z) =

u*w^2 + z*w == v

2)symvar 认定的自由变量

symvar(Eq,1) %

<5>

ans =

w

symvar(g(z),1) % <6>

ans =

w

3)solve对默认自由变量解方程

R1=solve(Eq) % 关于w解方程u*w^2+z*w-v=0 <7>

R2=solve(g) % 关于w解g(z)所表达的方程 <8>

R1 =

-(z + (z^2 + 4*u*v)^(1/2))/(2*u)

-(z - (z^2 + 4*u*v)^(1/2))/(2*u)

R2 =

-(z + (z^2 + 4*u*v)^(1/2))/(2*u)

-(z - (z^2 + 4*u*v)^(1/2))/(2*u)

4)对变量z求解

S1=solve(Eq,z) % <9> S2=solve(g(z),z) % <10> S1 =

(- u*w^2 + v)/w

S2 =

(- u*w^2 + v)/w

5)检验求解结果的正确性

disp(simplify(subs(Eq,z,S1))) % S1代替z,观察Eq是否为0

disp(simplify(g(S2))) % S2代替z,观察g(S2)方程式是否成立

TRUE

〖说明〗不要把g(z)理解为以z为自由变量的符号函数。

【例2.1-4】symvar确定自由变量是对整个矩阵进行的。

syms a b t u v x y

A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v] %

symvar(A,1) %

A =

[ a + b*x, u + sin(t)]

[ x*exp(-t), v + log(y)]

ans =

x

2.1.4符号对象的识别

为了函数命令与数据对象的适配,MATLAB提供了用于识别数据对象属性的命令:

class(var) 给出变量var的数据类别(如double,sym等)

isa(var, 'Obj') 若变量var是Obj代表的类型,给出1,表示“真”

whos 给出所有MATLAB内存变量的属性

【例2.1-5】数据对象及其识别命令的使用。

(1)

clear

a=1;b=2;c=3;d=4; % 产生4个数值变量

Mn=[a,b;c,d] % 利用已赋值变量构成数值矩阵

Mc='[a,b;c,d]' % 字符串中的a,b,c,d与前面输入的数值变量无关Ms=sym(Mc) %Ms是一个符号矩阵,它与前面各变量无关

Mn =

1 2

3 4

Mc =

[a,b;c,d]

Ms =

[ a, b]

[ c, d]

(2)

SizeMn=size(Mn)

SizeMc=size(Mc)

SizeMs=size(Ms)

SizeMn =

2 2

SizeMc =

1 9

SizeMs =

2 2

(3)

CMn=class(Mn)

CMc=class(Mc)

CMs=class(Ms)

CMn =

double

CMc =

char

CMs =

sym

(4)

isa(Mn,'double')

isa(Mc,'char')

isa(Ms,'sym')

ans =

1

ans =

1

ans =

1

(5)

whos Mn Mc Ms

Name Size Bytes Class Attributes

Mc 1x9 18 char

Mn 2x2 32 double

Ms 2x2 60 sym

2.1.5符号运算机理和变量假设

1.符号运算的工作机理

符号计算是由MuPAD引擎在其专有的内存工作空间中执行,而只是把计算结果送回到MATLAB的内存空间。

每当借助sym或syms命令定义一个带限定性假设的符号变量时,就发生以下过程:

●启动MuPAD引擎,并开启一个专供MuPAD使用的内存空间

●被定义变量保存至Matlab内存空间

●对变量的限定性假设被保存在MuPAD内存空间中,并对此后的MuPAD的工作方式进

行约束。

2.对符号变量的限定性假设

assume(assumption)清空后由assumption定义的新假设

assume(expr,set)清空后进行“符号表达式expr属于集合set”的新假设设置

assumeAlso(assumption) 继续追加由assumption定义的新假设

assumeAlso(expr,set) 继续追加由“符号表达式expr属于集合set”的新假设

a=sym('a',res) 创建带res限定性假设的符号变量a

syms a res 同上

说明:

●在不对符号变量进行专门设置的情况下,MuPAD符号计算总把变量默认为“复数变量”。

●assumption是那些可以用符号表达式、符号方程、符号关系、符号逻辑描述的假设。

●set可取字符串'integer'、'rational'、'real'中的任何一个,分别表示整数集、有理数集、实数集。

●res只能取字符串'positive'或'real'中的任何一个,表示创建变量是实数或正数。

3.清除变量和撤销假设

由于符号变量和其假设存放在不同的内存空间,因此删除符号变量和撤销关于变量的假设是两件需要分别处理的事。具体执行命令如下:

clear x % 清除MATLAB内存中的x变量

syms x clear % 撤销MuPAD内存中对变量x的任何假设,而恢复为“复数”变量syms('x','clear')% 功能同上

assumptions(x) % 显示符号变量x的限定性假设

assumptions % 显示MuPUD内存中已带限定性假设的全部符号变量

reset(symengine) % 重启MuPUD引擎,清空MuPUD内存中所有内容

【例2.1-6】符号变量的默认数域是复数域。

1)在默认的复数域求根

clear all % 清空MATLAB内存,清除MuPAD中的所有假设

syms x %

f=x^3+475*x/100+5/2; %

r=solve(f,x) %求使f=0的全部根

r =

-1/2

(79^(1/2)*i)/4 + 1/4

1/4 - (79^(1/2)*i)/4

assumptions(x) % 获悉MuPAD内存中关于x的假设

ans =

Empty sym: 1-by-0

2)求实数根

assume(x,'real') % 限定x为实数的方法一

r21=solve(f,x) %

r21 =

-1/2

syms x clear %

assume(imag(x)==0) % 限定x为实数的方法二

r22=solve(f,x)

r22 =

-1/2

disp(assumptions(x)) %

imag(x) == 0

3)第一、四象限根

sym(x,'clear') %

assume(real(x)>0) %

r3=solve(f,x)

ans =

x

r3 =

(79^(1/2)*i)/4 + 1/4

1/4 - (79^(1/2)*i)/4

disp(assumptions(x)) %

0 < real(x)

4)第一象限根

assumeAlso(imag(x)>0) %

r4=solve(f,x)

r4 =

(79^(1/2)*i)/4 + 1/4

disp(assumptions(x))

[ 0 < imag(x), 0 < real(x)]

2.2符号数字及表达式的操作

2.2.1 符号数字转换成双精度数字

Nd=double(Num_sym) 把符号数字Num_sym转换为双精度数字Nd 说明:

●一般情况下,Nd是符号数字Num_sym双精度近似。

● 2.1.1-2节中,已经介绍了sym(Num)能把数字类数字转换成符号数字

●注意:命令double('Num')是把字符串数字'Num'转换为各数字字符的

ASCII码值数组。

2.2.2符号数字的任意精度表达形式

为了兼顾计算精度和速度,或使某些无法用“封闭解析式”表达的计算结果以简洁的“任意精度符号数”表达。MATLAB提供了控制符号数字或表达式数字精度的命令:

digits 显示当前环境下十进制符号数字的有效位数

digits(n) 把十进制符号数字有效位数设定为n

xs=vpa(x) 据表达式x得到digits指定精度下的符号数字xs

xs=vpa(x,n) 据表达式x得到n位有效数字的符号数字xs

说明:

·MATLAB对digits命令的默认精度设置是32位。

·vpa(x,n)只在运行的当时起作用。

【例2.2-1】digits, vpa命令的使用。

(1)重新启动符号计算引擎,产生准确符号数字

reset(symengine) % 重新启动符号计算引擎

sa=sym('1/3+sqrt(2)') % 定义准确符号数字表达式

sa =

2^(1/2) + 1/3

(2)变精度算法的计算结果,有效位数的含义

digits %观察当前有效位数

Digits = 32

format long

a=1/3+sqrt(2) % 定义双精度数

sa_Plus_a=vpa(sa+a,20) % 给出20位有效数字结果

sa_Minus_a=vpa(sa-a,20) %

a =

1.747546895706428

sa_Plus_a =

3.4950937914128567869

sa_Minus_a =

-0.000000000000000022658064826339973669

(3)digits设置和vpa指定对“数位”的不同影响

sa32=vpa(sa) % 采用默认设置的32位有效数字

digits(48) % 设置48位有效数字

sa5=vpa(sa,5) % 仅影响sa5数位,对其后无影响。

sa48=vpa(sa) %仍为48位有效数字

sa32 =

1.747546895706428382135022057543

sa5 =

1.7475

sa48 =

1.74754689570642838213502205754303141190300520871

2.2.3 符号表达式的基本操作

collect (合并同类项)

factor (进行因式或因子分解) numden (提取公因式)等 最常用:

simplify(EXPR) 对EXPR (符号表达式或矩阵)运用多种方法进行一轮简化

simplify(EXPR,'Steps',value,'IgnoreAnalyticConstraints',true) 多轮纯粹表达形式简化

【例2.2-2】简化3

2381261+++=

x

x x f 。 syms x

f=(1/x^3+6/x^2+12/x+8)^(1/3) g1=simplify (f) f =

(12/x + 6/x^2 + 1/x^3 + 8)^(1/3) g1 =

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

g2=simplify(f,'Steps',10,'IgnoreAnalyticConstraints', true) % g2 =

1/x + 2

2.2.4 表达式中的置换操作

1. 公因子法简化表达

RS=subexpr(S) 从S 中自动提取公因子sigma ,并把采用sigma 重写的S 赋给RS RS=subexpr(S,'w') 从S 中自动提取公因子,记为w ,并把采用w 重写的S 赋给RS [RS,w]=subexpr(S,'w') 该调用格式的效果与RS=subexpr(S, 'w')相同 说明:S :符号表达式、符号表达式矩阵 【例2.2-3】对符号矩阵?

?

?

???d c b a 进行特征向量分解。 (1)

clear % 清空所有内存变量

A=sym('[a b;c d]') % 经字符串直接定义符号矩阵

[V,D]=eig(A) % 符号矩阵的特征值、特征向量分解 A =

[ a, b] [ c, d] V =

[(a/2+d/2-a^2-2*a*d+d^2+4*b*c)^(1/2)/2)/c-d/c, (a/2+d/2+(a^2-2*a*d+ d^2+4*b*c)^(1/2)/2)/c-d/c] [ 1, 1] D = [a/2 + d/2 - (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2, 0] [ 0, a/2 + d/2 + (a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)/2]

(2)

subexpr([V;D]) % 自动提取公因式 who % 列出工作内存中的变量 sigma =

(a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)

ans =

[ (a/2 + d/2 - sigma/2)/c - d/c, (a/2 + d/2 + sigma/2)/c - d/c]

[ 1, 1]

[ a/2 + d/2 - sigma/2, 0]

[ 0, a/2 + d/2 + sigma/2]

Your variables are:

A D V ans sigma

(3)

Dw=subexpr(D,'w') % 把自动提取的公因式记为w,Dw是用w重记D后的表达w =

(a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)

Dw =

[ a/2 + d/2 - w/2, 0]

[ 0, a/2 + d/2 + w/2]

(4)

[RVD,w]=subexpr([V;D],'w') % <7> % 给出合成矩阵[V;D]的公因式表达方式

RVD =

[ (a/2 + d/2 - w/2)/c - d/c, (a/2 + d/2 + w/2)/c - d/c]

[ 1, 1]

[ a/2 + d/2 - w/2, 0]

[ 0, a/2 + d/2 + w/2]

w =

(a^2 - 2*a*d + d^2 + 4*b*c)^(1/2)

2.通用置换命令

RES=subs(ES,old,new) 用new置换ES中的old后产生符号结果RES

RES=subs(ES,new) 用new置换ES中的自由变量后产生符号结果RES

【例2.2-4】用简单算例演示subs的置换规则。

1)产生符号函数

clear

syms a b x;

f1=a*sin(x)+b

f1 =

b + a*sin(x)

2)被字符串置换

f2=subs(f1,sin(x),'log(y)') %<4>

class(f2) %

f2 =

b + a*log(y)

ans =

sym

3)单个符号参数被置换

f3=subs(f1,a,sym(3.11)) %<6>

class(f3) %

f3 =

b + (311*sin(x))/100

ans =

sym

4)单个符号变量被数组置换

f4=subs(f1,x,[0,pi/2,pi]) %<8>

class(f4)

f4 =

[ b, a + b, b]

ans =

sym

5)所有变量被置换

format % 恢复双精度数字显示的默认设置format compact % 在Notebook中紧凑显示

t=0:pi/10:2*pi; % (1*21)双精度数组

f5=subs(f1,{a,b,x},{2,3,t}); %<13> 置换得到符号数字数组class(f5)

plot(t,f5,'r:','LineWidth',5) %<15>

%

ans =

sym

6)两次置换

k=[0.6;0.8;1]; %(3*1)数组

f6=subs(subs(f1,{a,b},{k,2}),x,t);%<17>

class(f6)

plot(t,f6) %<19>

ans =

sym

2.3 符号微积分

2.3.1 极限和导数的符号计算

大学本科高等数学中的大多数微积分问题,都能用符号计算解决,手工笔算演绎的烦劳都可以由计算机完成。

limit(f,v,a) 求极限 )(lim v f a

v →

limit(f,v,a,'right') 求右极限 lim ()v a

f v +

limit(f,v,a,'left') 求左极限 lim ()v a

f v -

【例2.3-1】两种重要极限kt kt t sin lim 0→和kx

x x ??? ?

?-∞→11lim 。

syms t x k

s=sin(k*t)/(k*t); f=(1-1/x)^(k*x);

Lsk=limit(s,0) % t 趋于0 Ls1=subs(Lsk,k,1) % Lf=limit(f,x,inf) %

Lf1=vpa(subs(Lf,k,sym('-1')),48) %给出48位精度的自然数 Lsk = 1

Ls1 = 1 Lf = exp(-k) Lf1 =

2.7182818284590452353602874713526624977572470937

diff(f,v,n) 求n

n dv

f

d (n 缺省时,默认n=1)

【例2.3-2】已知??

????=x x t t a f ln cos 3,求dx df

、 22dt f d 、dtdx f d 2。

syms a t x;

f=[a,t^3;t*cos(x), log(x)]; df=diff(f) % dfdt2=diff(f,t,2) % dfdxdt=diff(diff(f,x),t) % df =

[ 0, 0] [ -t*sin(x), 1/x] dfdt2 = [ 0, 6*t] [ 0, 0] dfdxdt =

[ 0, 0] [ -sin(x), 0]

2.3.2 序列/级数的符号求和

symsum(f,v,a,b) 求f 在变量v 取遍[a, b]中所有整数时的和。a,b 缺省时默认求和区间[0, v-1]。

【例2.3-3】求∑-=1

03

],[t t k t ,∑∞

=??

?

???--12

)1(,)12(1k k k k 。 syms k t;f1=[t k^3];f2=[1/(2*k-1)^2,(-1)^k/k];

s1=symsum(f1) % f1的自变量被确认为t s2=symsum(f2,1,inf) % f1的自变量被确认为k s1 =

[ t^2/2 - t/2, k^3*t] s2 =

[ pi^2/8, -log(2)]

2.3.3 符号积分

intf=int(f,v) 求f 对变量v 的不定积分 intf=int(f,v,a,b) 求f 对变量v 的定积分

【例2.3-4】求

dx x x

x +?11。

clear syms x

f=sqrt((1+x)/x)/x s=int(f,x) f =

((x + 1)/x)^(1/2)/x s =

2*atanh((1/x + 1)^(1/2)) - 2*(1/x + 1)^(1/2)

【例2.3-5】

???

++2

1

22222)(x x y

x xy

dzdydx z y x 。

syms x y z

F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2) VF2=vpa(F2) % F2 =

(14912*2^(1/4))/4641 - (6072064*2^(1/2))/348075 + (64*2^(3/4))/225 + 1610027357/6563700 VF2 =

224.92153573331143159790710032805

第二章作业题:

1.说出以下四条指令产生的结果各属于哪种数据类型,是“双精度”对象,还是“符号”

对象?

3/7+0.1, sym(3/7+0.1), vpa(sym(3/7+0.1),4), vpa(sym(3/7+0.1))

2.已知a1=sin(sym(pi/4)+exp(sym(0.7)+sym(pi/3)))产生精准符号数字,请回答:以下产生的

各种符号数哪些是精准的?若不精准,误差又是多少?能说出产生误差的原因吗? a2=sin(sym(pi/4)+exp(sym(0.7))*exp(sym(pi/3))) a3=sin(sym('pi/4')+exp(sym('0.7'))*exp(sym('pi/3'))) a4=sin(sym('pi/4')+exp(sym('0.7+pi/3'))) a5=sin(sym(pi/4)+exp(sym(0.7+pi/3))) a6=sin(sym(pi/4)+sym(exp(0.7+pi/3))) a7=sin(sym(pi/4+exp(0.7+pi/3))) a8=sym(sin(pi/4+exp(0.7+pi/3)))

(提示:可用vpa 观察误差;注意数位的设置)。

3.在不加专门指定的情况下,以下符号表达式中的哪一个变量被认为是独立自由变量。

sym('sin(w*t)') , sym('a*exp(-X)' ) , sym('z*exp(j*th)')

实验MATLAB符号计算

实验四符号计算 符号计算的特点:一,运算以推理解析的方式进行,因此不受计算误差积累问题困扰;二,符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);三,符号计算指令的调用比较简单,经典教科书公式相近;四,计算所需时间较长,有时难以忍受。 在MATLAB中,符号计算虽以数值计算的补充身份出现,但涉及符号计算的指令使用、运算符操作、计算结果可视化、程序编制以及在线帮助系统都是十分完整、便捷的。 MATLAB的升级和符号计算内核Maple的升级,决定着符号计算工具包的升级。但从用户使用角度看,这些升级所引起的变化相当细微。即使这样,本章还是及时作了相应的更新和说明。如MATLAB 6.5+ 版开始启用Maple VIII的计算引擎,从而克服了Maple V计算“广义Fourier变换”时的错误(详见第5.4.1节)。 5.1符号对象和符号表达式 5.1.1符号对象的生成和使用 【例5.1.1-1】符号常数形成中的差异 a1=[1/3,pi/7,sqrt(5),pi+sqrt(5)] % <1> a2=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)]) % <2> a3=sym([1/3,pi/7,sqrt(5),pi+sqrt(5)],'e') % <3> a4=sym('[1/3,pi/7,sqrt(5),pi+sqrt(5)]') % <4> a24=a2-a4 a1 = 0.3333 0.4488 2.2361 5.3777 a2 = [ 1/3, pi/7, sqrt(5), 6054707603575008*2^(-50)] a3 = [ 1/3-eps/12, pi/7-13*eps/165, sqrt(5)+137*eps/280, 6054707603575008*2^(-50)] a4 = [ 1/3, pi/7, sqrt(5), pi+sqrt(5)] a24 = [ 0, 0, 0, 189209612611719/35184372088832-pi-5^(1/2)] 【例5.1.1-2】演示:几种输入下产生矩阵的异同。 a1=sym([1/3,0.2+sqrt(2),pi]) % <1> a2=sym('[1/3,0.2+sqrt(2),pi]') % <2> a3=sym('[1/3 0.2+sqrt(2) pi]') % <3> a1_a2=a1-a2 % a1 = [ 1/3, 7269771597999872*2^(-52), pi] a2 = [ 1/3, 0.2+sqrt(2), pi] a3 = [ 1/3, 0.2+sqrt(2), pi] a1_a2 = [ 0, 1.4142135623730951010657008737326-2^(1/2), 0]

matlab符号运算函数大全

m a t l a b符号运算函数大 全 The Standardization Office was revised on the afternoon of December 13, 2020

算术符号操作 命令 +、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B 符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B 符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵 A的列数等于矩阵B的行数。即:若 A n*k* B k*m=(a ij)n*k.*(b ij)k*m= C n*m=(c ij)n*m,则,i=1,2,…,n; j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则 将返回一出错信息。 A.*B 符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型 阵列,或至少有一个为标量。即: A n*m.* B n*m=(a ij)n*m.*(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij* b ij, 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为同型阵列时, A n*m.\ B n*m=(a ij)n*m.\(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij\ b ij,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为同型阵列时, A n*m./ B n*m=(a ij)n*m./(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij/b ij,i=1,2,…,n; j=1,2,…,m。若A与B中至少有一个为标量,则把标量扩大为与 另外一个同型的阵列,再按对应的分量进行操作。 A^B 矩阵的方幂。

Matlab符号计算(含作业)

第 2 章符号计算 符号计算: 解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,获得解析结果。 符号计算建立在数值完全准确表达和推演严格解析的基础之上,所得结果完全准确。 特点: 一.相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。 二.在相当一些场合,符号计算解算问题的命令和过程,显得比数值计算更自然、更简明。 三.大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。 2.1符号对象和符号表达式 MATLAB依靠基本符号对象(包括数字、参数、变量)、运算符及一些预定义函数来构造和衍生符号表达式和符号方程。 2.1.1基本符号对象和运算算符 1.生成符号对象的基本规则 ●任何基本符号对象(数字、参数、变量、表达式、函数)都必须借助 专门的符号命令sym、syms、symfun定义。 ●任何包含符号对象的表达式或方程,将继承符号对象的属性。

2.精准符号数字和符号常数 符号(类)数字的定义: sym(Num) 采用精准数值类数创建精准的符号数字(推荐格式!) sc=sym(Num) 采用精准数值类数创建精准的符号常数sc(推荐格式!) 说明:若输入量Num是精准的浮点数(如0.321、10/3等),能生成精准的符号数字; 若输入量Num是诸如sin(0.3)的数值表达式,那么就只能生成由数字表达式获得的16位精度的近似符号数字。 sym('Num') 采用有理分数字符串创建精准的符号数字 sc=sym('Num') 采用有理分数字符串创建精准的符号常数sc 说明: Num必须处于(英文状态下的)单引号内,构成字符串(关于字符串参见附录A); 只有当字符串数字'Num'采用诸如321/1000、10/3等整数构成的有理分数形式表达时,sym('Num') 才能生成精准的符号数字; 若字符串数字用诸如0.321、3.21e-1等“普通小数或科学记述数”表达,那么只能产生“近似符号数字”。在默认情况下,该近似符号数字为32位精度。 【例2.1-1】 (1)创建完全精准的符号数字或数字表达式 clear all R1=sin(sym(0.3)) % 输入量为普通小数 R2=sin(sym(3e-1)) % 输入量为科学记述数 R3=sin(sym(3/10)) % 输入量为有理分数 R4=sin(sym('3/10')) % 输入量为“整数构成的有理分数”字符串数字 disp(['R1属于什么类别?答:',class(R1)]) disp(['R1与R4是否相等?(是为1,否为0)答:',int2str(logical(R1==R4))]) R1 = sin(3/10) R2 = sin(3/10) R3 = sin(3/10) R4 = sin(3/10) R1属于什么类别?答:sym R1与R4是否相等?(是为1,否为0)答:1 (2)产生具有32位精度的“近似”符号数字(杜绝使用!) S1=sin(sym('0.3')) % sym的输入量是字符串小数,生成32位精度下的 % 近似符号数,进而在sin作用下给出近似符号数。 S2=sin(sym('3e-1')) % syms的输入量是字符串科学记述数。 eRS=vpa(abs(R1-S1),64); disp(['S1属于什么类别?答:',class(S1)]) disp(['S1与R1是否相同?答: ',int2str(logical(R1==S1))]) disp('S1与R1的误差为') disp(double(eRS)) S1 = 0.29552020666133957510532074568503

完整word版,MATLAB符号运算

符号运算 科学计算包括数值计算和符号计算两种计算,数值计算是近似计算;而符号计算则是绝对精确的计算。 符号变量的生成和使用 1、符号变量、符号表达式和符号方程的生成 (1)、使用sym函数定义符号变量和符号表达式 单个符号变量 sqrt(2) sym(sqrt(2)) %显示精确结果 a=sqrt(sym(2)) %显示精确结果 double(a) sym(2)/sym(3) %显示精确结果 2/5+1/3 sym(2/5+1/3) %显示精确结果 sym(2)/sym(5)+sym(1)/sym(3) %显示精确结果 sym函数定义符号表达式:单个变量定义法,整体定义法 单个变量定义法 a=sym('a') b=sym('b') c=sym('c') x=sym('x') f=a*x^2+b*x+c 整体定义法 f=sym('a*x^2+b*x+c') g=f^2+4*f-2 (2)、使用syms函数定义符号变量和符号表达式 一次可以创建任意多个符号变量syms var1 var2 var3… syms a b c x f=a*x^2+b*x+c g=f^2+4*f-2 (3)、符号方程的生成 函数:数字和变量组陈的代数式 方程:函数和等号组成的等式 用sym函数生成符号方程: equation1=sym('sin(x)+cos(x)=1') 2、符号变量的基本操作 (1)、findsym函数用于寻找符号变量 findsym(f):找出f表达式中的符号变量 findsym(s,n):找出表达式s中n个与x接近的变量 syms a alpha b x1 y findsym(alpha+a+b)

matlab符号运算符

Matlab符号运算符的使用 一、&&/||/&/| |:数组逻辑或 ||:先决逻辑或 &:数组逻辑与 &&:先决逻辑与 &&和||被称为&和|的short circuit形式。 先决逻辑符号含义: 先判断左边是否为真;若为真,则不再判断右边;若为假,才继续进行或运算 先判断左边是否为假;若为假,则不再判断右边;若为真,才继续进行与运算两种运算符号的区别: 先决逻辑运算的运算对象只能是标量 数组逻辑运算可为任何维数组,运算符两边维数要相同 举例分析: A&B :首先判断A的逻辑值,然后判断B的值,然后进行逻辑与的计算。 A&&B:首先判断A的逻辑值,如果A的值为假,就可以判断整个表达式的值为假, 就可以判断整个表达式的值为假,就不需要再判断B的值。这种用法非常有用, 如果A是一个计算量较小的函数,B是一个计算量较大的函数,那么首先判断A 对减少计算量是有好处的。 另外这也可以防止类似被0除的错误。 Matlab中的if和while语句中的逻辑与和逻辑或都是默认使用short-circuit形式。// 这可能就是有时候用&和| 会报错的原因。

二、系统结构体内的变量 一般都是小写。 matlab区分大小写。 三、== 表示逻辑相等,返回结果,相等为1,不等为0。 四、.*(times)点乘 times Array multiply 数组乘 Syntax c = a.*b c = times(a,b) Description c = a.*b multiplies arrays a an d b element-by-element and returns th e result in c. Inputs a and b must have the same size unless one is a scalar. 注释:a、b要同尺寸,或其中一个为标量。 c = times(a,b) is calle d for th e syntax a.*b when a or b is an object. Example a = [1 2 3]'; b = [5 6 7]'; c = a.*b; 五、矩阵或向量共轭转置“’”和转置“.’” 若矩阵由实数构成,二者作用一样;

MATLAB符号计算函数用法总结

MATLAB符号计算函数用法总结 符号计算是对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MTALAB具有符号数学工具箱(Symbolic Math toolbox),将符号运算结合到MATLAB的属具运算环境。符号数学工具箱是建立在Maple软件基础上的。 算术符号操作: 命令有:+、-、*、.*、\、.\、/、./、^、.^、’、.’ 用法如下: A+B、A-B符号阵列的加法和减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。即:若 An*k*Bk*m=(aij)n*k.*(bij)k*m=Cn*m=(cij)n*m,则,i=1,2,…,n;j=1,2,…,m。 或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错 信息。 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),则 。

matlab符号运算函数大全

3.1算术符号操作 命令+、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B 符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B 符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩 阵B的行数。即:若A n*k*B k*m=(a ij)n*k.*(b ij)k*m=C n*m=(c ij)n*m,则,i=1,2,…,n; j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信 息。 A.*B 符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列,或至少有一 个为标量。即:A n*m.*B n*m=(a ij)n*m.*(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij* b ij,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为同型阵列时, A n*m.\ B n*m=(a ij)n*m.\(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij\ b ij,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为同型阵列时, A n*m./ B n*m=(a ij)n*m./(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij/b ij,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为同型阵列时, A n*m..^ B n*m=(a ij)n*m..^(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij^b ij,i=1,2,…,n;j=1,2,…,m。若 A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应 的分量进行操作。

matlab符号运算函数大全

3.1 算术符号操作 命令+、-、*、.*、\、.\、/、./、^、.^、’、.’ 功能符号矩阵的算术操作 用法如下: A+B、A-B 符号阵列的加法与减法。 若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。 A*B 符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A 的列数等于矩阵B的行数。即:若 A n*k* B k*m=(a ij)n*k.*(b ij)k*m= C n*m=(c ij)n*m,则,i=1,2,…,n; j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则将 返回一出错信息。 A.*B 符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列, 或至少有一个为标量。即: A n*m.* B n*m=(a ij)n*m.*(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij* b ij, 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为同型阵列时, A n*m.\ B n*m=(a ij)n*m.\(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij\ b ij, 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为同型阵列时, A n*m./ B n*m=(a ij)n*m./(b ij)n*m= C n*m=(c ij)n*m,则c ij= a ij/b ij,i=1,2,…,n; j=1,2,…,m。若A与B中至少有一个为标量,则把标量扩大为与另 外一个同型的阵列,再按对应的分量进行操作。 A^B 矩阵的方幂。

相关主题
文本预览
相关文档 最新文档