MATLAB符号计算总结

1.符号计算目录

1.引导
在这里插入图片描述

2.基本符号对象的创建
2.1符号数

 所用函数 :
sym(num):sc=sym(100)  %非超长符号数的建立,不超过15sym('num'):sc1=sym('15555555555555555555') %超长
vpa(abs(b1-b2),32) %vpa设置精度值
isAlways:
e1=sym(pi)
e2=sym('pi')
isAlways(e1==e2)
d1=sym(i)
d2=sym(j)
isAlways(d1==d2)  %千万不要sym('i')

2.2符号变量和符号数组

 所用函数:
 syms pr1 pr2 prn
 sym('a',[1,n])    sym('a',[m,1])  sym('a%d%d',[m,n])
 sym syms 没有附加选项默认复数集
 x=sym('x','SET') 
 syms x y z SET
 SET可为 integer整数集 positive rational有理数集 real实数集·
建议 assume(x,'real')这种限定性假设表述 
assumeptions咨询

3.符号运算操作基础
3.1 符号算术运算符及函数
3.2 符号关系和符号逻辑表述
4.符号表达式和符号函数
4.1 创建符号表达式和符号方程

  所用函数: 
  创建符号表达式(纯数字()表达式中要有sym定义的数字)
  syms a
  ex3=a*sin(1+sqrt(5))+1  %wrong
  创建符号方程
  syms x
  ex21=x/(1+sin(pi/sym(2)+1))==1 %right
  ex22=x/(1+sin(sym(pi)/2+1))==1 %right
  ex23=x/(1+sin(pi/2+sym(1)))==1  %right
  ex24=x/(sym(1)+sin(pi/2+1))==1 %符号方程的wrong代码
  解方程solve(eqin,var)命令 

4.2 创建符号函数

1.创建抽象符号函数
syms f1(x,y)
2.创建具体符号函数
syms a b
f21(x,y)=[a*sin(x);b*cos(y)];
或
f22=symfun([1,a*x+b*exp(y)],[x,y]);
3.创建符号常数函数
f31(x,y)=sym(1/2)  %直接赋值法
f32=symfun(sym(1/2),[x,y])  %symfun创建函数
4.求符号函数的函数值
数值代入法办法
f21(pi,pi)
f22(sym(0.3),-5)
f22(0.3,-5)
f31(100,200)
5.函数体及函数体分量的获取
bf2=formula(f21)
bf2(2)  正确
f21(2)  错误
6.函数自变量的获取
af1=argnames(f1)
7.符号函数规模和函数体规模
sizef21=size(f21)
sizebf2=size(bf2)
symvar(expr,n) 查找符号变量除了符号常数变量

4.3符号函数和符号表达式的比较

1.抽象函数及应用示例
syms f(x) g(x)
u=f*g
Du=diff(u,x)
syms F G
w=F*G
Dw=diff(w,x)
Dw=0
2.符号具体函数与符号表达式的内涵差别
syms a b
e2=a^2*x^2+2*a*b*x+b^2
f2(x)=e2
argnames(e2) %获取自变量,没有
argnames(f2)  %3.简化后各自属性不变
s4=simplify(e2) %结果仍是表达式
s4=simplify(f2) %结果仍是函数
4.函数非自变量的置换只能用subs
e5=subs(e2,[a,b],[1,2])
f5=subs(f2,{
   a,b},{
   1,2})
5.符号表达式的置换只能subs函数可以subs也可以直接输入自变量
e6=subs(e5,x,1) %仍是表达式
f61=subs(f5,x,1)%仍得到符号函数,不过是符号常数函数
f62=f5(1)  %得到函数值
6.不定积分结果
e7=int(e5,x)  %仍是表达式
f7=int(f5,x)  %函数
%ne7=e5([1,2;3,4])  wrong 只能subs置换,不能直接带
ne71=subs(e5,x,[1 2;3 4])
nf7=f5([1 2;3 4])
7.定积分结果
e8=int(e5,x,0,x)  %仍是表达式
f8=int(f5,x,0,x)   %这里变成表达式的
%%函数不定积分仍是函数,定积分变成表达式
所以要求值必须借助subs函数进行x置换
ne8=subs(e8,x,[1 2 3 4 5]/10)
nf8=subs(f8,x,[1 2 3 4 5]/10)

5.符号表达式的简化重组和子对象置换
5.1 符号表达式的简化

nexpr=simplify(expr)
nexpr=simplify(expr,name,value)
expr:输入量:符号表达式 符号函数 或他们组成的数组
nexpr 输入量形式简洁
(1)'steps'选项的应用
syms x
f1=((exp(-x*i)*i)/2-(exp(x*i)*i)/2)/(exp(-x*i)/2+exp(x*i)/2)
s11=simplify(f1)  %默认简化模式执行一次
s12=simplify(f1,'Steps',40)  %不同简化模式执行40步
(2)critertion的应用
f2=sym(1i)^(1i+1)
s21=simplify(f2)
s22=simplify(f2,'Criterion','preferReal','Steps',100) %preferReal使i尽可能在外层
(3)ignoreanalyticconstrainys的应用
syms  x y a b
f3=sqrt(x^-2)+log(x*y)+(y^a)^b+asin(sin(x))
s31=simplify(f3,'Steps',100)  %100步简化也没变化
s32=simplify(f3,'IgnoreAnalyticConstraints',true)%当x=-2就是错的了,非严格解析等价的简化

5.2符号表达式的重写

  rewrites
  syms a x t
f=a*cos(t)
rf=rewrite(f,'exp')
f1=rectangularPulse(0,0.5,t) %创建0:0.5区间高度为1的方波脉冲
rf1=rewrite(f1,'heaviside')

5.3 符号表达式的子对象置换

rs=subs(s,old,new) old 可以是符号单变量,多变量,符号表达式,符号方程、函数中的子对象,数组,混合的元胞数组

用数组置换表达式中的标量
f6=cos(a*t)*exp(-b*t)  %创建符号表达式
tt=0:0.01:2;%定义双精度数组
s61=subs(f6,{
   a,b,t},{
   6,1.2,tt}); %f6中的符号变量被双精度数值置换
%要花括号?中括号不行 既有符号变量又有双精度数值
s62=subs(f6,[a,b],[6,1.2]);  %不置换数值
ctt=class(tt)  %double对象
cs61=class(s61) %可知仍是符号对象sym
subplot(211)
fplot(s62,[0 2]); 
subplot(212)
plot(tt,s61) %可接受双精度和符号数据绘图

[nexpr,sisgma]=subexpr(expr) %对expr 自动识别将其冗子式用默认的sigma代替

[nexpr,var]=subexpr(expr,var) %,指定变量更换
pretty(expr)  

6.变精度计算及数字类型转化
6.1有限精度符号数和变精度符号数

数值计算一定存在截断误差,累计误差
符号计算不产生累积误差,但降低计算速度,所以将纯符号运算变为所谓的变精度算法,
环境精度设置命令 digits digits(n)
变精度命令vpa(x)  vpa(x,n)
(1) 两种符号数值
a=sym(1)/3  %第一种精准符号数
digits 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值