符号计算 存放的是精确数据,耗存储空间 ,运行速度慢,但结果精度高;数值计算则是以一定精度来计算的,计算结果有误差,但是运行速度快。两者的区别是: 数值计算的表达式、矩阵变量中不允许有未定义的自由变量 , 而符号计算可以含有未定义的符号变量。
一、符号对象和符号表达式
close all;clear all;clc;
%% 符号对象的创建
syms x y z;%符号变量
a=sym(2/3,'f');%符号常量
b=2*y^2+y-1;%符号表达式
c=[1 2+y 2;2+z 1 1+y];%符号矩阵
%% 运算符和函数
syms a b c d e f g h;
a2=[a b;c d];
b2=[e f;g h];
c2=a2*b2;%符号计算和数值计算几乎相同
%% 类别识别函数
syms x;
a3=class(x);%返回符号对象的类别
b3=isa(x,'sym');%返回1或者0
whos x;%列出变量的信息
%% 变量的确定
syms a b c;
a4=3*a+b-c;
symvar(a4);%查找表达式中所有符号变量
symvar(a4,2);%查找表达式中距离x最近的2个符号变量
%% 符号精度计算
syms x;
a5=2*x^2+3*x-4;
b5=solve(a5);
d5=vpa(b5,6);%求近似解,精度为6位
二、符号表达式的操作
close all;clear all;clc;
%% 符号表达式的显示
syms x;
a=x^2+2/x+1;
pretty(a);
%% 符号表达式的合并
syms x y;
a2=2*x+y+x*cos(y);
collect(a2);
%% 符号表达式的展开
syms x y;
a3=exp((x+y)^2);
expand(a3);
%% 符号表达式的嵌套
syms x y;
a4=[x^2+x;y^3-2*y];
horner(a4);
%% 符号表达式分解
syms x y;
a5=2*x^2-7*x*y-22*y^2-5*x+35*y-3;
factor(a5);
%% 符号表达式化简
syms x;
a6=(x^3-1)/(x-1);
simplify(a6);
三、符号表达式的替换
close all;clear all;clc;
%% 符号表达式的替换
syms x y;
a=x^2+x*y+y^2;
x=2;
subs(a);%用工作区中的变量替换符号表达式中的默认变量
subs(a,'t');%用新的变量替换符号表达式中的默认变量
subs(a,{'x','y'},{3,4});%用新的变量替换符号表达式中指定的变量
四、符号函数的操作
close all;clear all;clc;
%% 复合函数
syms x y;
a=x+x^-1;
b=sin(x);
c=1+y^2;
compose(a,b);%返回复合函数a(b(y))
compose(a,c,'x','t');%返回自变量为t的复合函数a(c(t))
%% 反函数
syms x y;
a2=1/(sin(x)+cos(x));
b2=x^2+2*x*y+y^2;
a22=finverse(a2);%返回a2的反函数
b22=finverse(b2,y);%返回自变量为y的b2的反函数,满足b22(b2(y))=y
五、符号微积分
close all;clear all;clc;
%% 符号微分
syms x y z;
a=exp(x*sin(y))+log(z);
diff(a,z);%对z求微分
diff(a,x,2);%对z求二阶微分
b=[x^2+y^2;y*z];
jacobian(b,[x y]);%b是列向量,[x y]是指定进行变换的行向量
%% 符号积分
syms x y;
a2=x*y+(x*y)^-1;
int(a2,y);%对y求不定积分
int(a2,y,1,2);%对y求定积分
%% 符号级数求和
syms x n;
a3=x^2;
b3=symsum(a3,x,0,n-1);%求x从0到n-1的有限和
%% 泰勒级数
syms x y;
a4=sin(x)+1/cos(y);
taylor(a4,x,'order',4)%n-1阶泰勒级数
taylor(a4,x,'ExpansionPoint',1,'order',4)%n-1阶泰勒级数在ExpansionPoint处展开
六、符号积分变换
%% 傅里叶变换及其逆变换
syms t w;
a=sin(t)*cos(t);
b=fourier(a,t,w);%傅里叶变换
c=ifourier(b,w,t);%傅里叶逆变换
simplify(c);
%% 拉普拉斯变换及其逆变换
syms s t;
syms a positive;
a2=exp(2*t)+5*dirac(a-t);
b2=laplace(a2,t,s);%拉普拉斯变换
ilaplace(b2,s,t);%拉普拉斯逆变换
%% Z变换及其逆变换
syms a b n w;
a3=sin(a*n)+cos(b*n);
b3=ztrans(a3);%Z变换
c3=ztrans(a3,a,w);%指定自变量,用w代替复频率z
iztrans(c3,w,n);%Z逆变换
七、符号代数方程和微分方程求解
close all;clear all;clc;
%% 符号代数方程求解
syms x a b c;
a1=a*x^2+b*x+c;
solve(a1);%解方程
solve(a1,a);%指定变量,解方程
syms x y;
a11='x^2+y^2=25';
b11='x*y==12';
[x,y]=solve(a11,b11);%联立方程式求解
syms x y a b;
a12='x^2+y^2==a^2';
b12='x*y==b';
s=solve(a12,b12,x,y);%指定多个自变量,解为矩阵结构
s.x;
%% 符号微分方程求解
syms x;
a2='a*Dx+b*x=0';
dsolve(a2);
dsolve(a2,'x(0)=1');
dsolve(a2,'x(0)=1','m');
syms x y;
a22='Dx-3*x+2*y=0';
b22='Dy-2*x+y=0';
[x,y]=dsolve(a22,b22);
[x,y]=dsolve(a22,b22,'x(0)=1','y(0)=1');
标签:变量,符号,%%,syms,a2,MATLAB,数学计算,表达式
From: https://blog.51cto.com/u_6526235/7788048