%% 1.数值常量转换为符号变量
%% 2.符号表达式的创建
%% 3.符号表达式中符号自变量的确定
%% 4.符号对象和数值对象的转换
%% 5.符号数值的精度控制
%% 6.合并同类项
%% 7.因式分解
%% 8.分子多项式和分母多项式的提取
%% 9.符号表达式的展开
%% 10.符号表达式的化简
%% 11.符号表达式的置换
%% 12.符号极限
%% 13.符号微分
%% 14.级数求和
%% 15.符号积分
%% 16.代数方程的求解
%% 17.符号微分方程的求解
% Matlab中常用函数除了angle()、atan2()、log2()、log10()只能用于数值运算外,其余的都可用于符号运算
% 同时符号运算符中没有逻辑操作符、关系运算符也只有是否等于的概念
% 1.数值常量转换为符号变量
a1=sym(cos(0.8*pi)+4,'d');%返回最接近32位的十进制数值
a2=sym(cos(0.8*pi)+4,'e');%返回最接近的带有机器浮点误差的有理值
a3=sym(cos(0.8*pi)+4,'f');%返回最接近的浮点表示
a4=sym(cos(0.8*pi)+4,'r');%返回该符号值最接近的有理数值
x=sym('a','real'); %创建正实数的符号变量a,如果用户对创建的符号变量的数学特性不加说明则默认为复数变量
%但是一旦定义了符号变量的数学特性,即使用clea清除下次也默认为上次的数学特性除非重启matlab
y=sym('c'); %默认为复数变量
syms d; %默认为实数变量
% 2.符号表达式的创建
y1=sym('a*x^2+b*x+c');%一次性创建,但是没有创建单个变量
syms a b c x;
y2=a*x^2+b*x+c;%逐个创建,最终合成表达式,创建了单个变量
% 3.符号表达式中符号自变量的确定(这里没有举矩阵的例子)
%%自变量选择顺序:先x,在x最近的数(先比较变量的第一个字母),若距离相同则取x后面的数,最后是大写字母
syms d e f x t w X Y;
k=sym('2+pi');
n=sym('c*sqrt(alpha)+y*sin(delta)');
g=k*x*Y+d*n*X-w^2+t^f;
g_all=findsym(g);%找出所以自变量,n不独立所以不能做为自变量
g_1=findsym(g,1);%找出表达式中1个自变量
g_2=findsym(g,2);% 2
g_5=findsym(g,5);% 3
% 4.符号对象和数值对象的转换
h=sym('[sin(0.9*pi);sqrt(2)]');
double(h);%将符号变量转化为数值常量
% 5.符号数值的精度控制
t=sqrt(2)*log(7);
digits;%缺省精度 32
t1=vpa(t); %用当前位数计算并显示
t1=vpa(t,5); %指定5位精度进行计算并显示
digits(8);%和下面一行联合来对精度进行控制
t1=vpa(t);
% 6.合并同类项
syms x t;
f=sym((x^2+x^2*exp(-t)+1)*(x+exp(-t)));
f1=collect(f);%合并x的同类项系数
f2=collect(f,exp(-t));%合并 exp(-t) 同类项系数
% 7.因式分解
syms x a;
t=factor(a^3-x^3);%分解为多因式相乘
factor(sym('123488'));%分解为多个质数相乘
horner(x^6-5*x^3+4*x^2+4*x-6);%分解为x叠乘的形式
% 8.分子多项式和分母多项式的提取
syms x;
A=[x^2 1/x^3+3;(2*x^2+1)/x-1/x^2 1/(x-3)];%将各个元素的分子和分母进行分解
[n d]=numden(A);%n对应分解后的分母,d对应分解后的分母
% 9.符号表达式的展开
syms x1 y1 alpha beta;
g=(x1-y1)^5;
expand(g);%将符号表达式展开
g1=[sin(alpha+beta) cos(alpha-beta);tan(alpha+beta) sin(3*beta)];%展开矩阵的各个元素
expand(g1);
% 10.符号表达式的化简
syms t;
g3=2*t/(t^2-t+1)+3/(t+1);
simplify(g3);%只给出化简结果
% 11.符号表达式的置换
syms a b x y;
f=a*sin(x)+b;
f1=subs(f,'sin(x)',y);%将f表达式中的sin(x)替换为y(可以用数值进行替换,若替换后表达式中
% 变量全为数值计算的结果为数值常量,否则为变量或符号常量)
% 12.符号极限
syms x2 t2;
g4=limit(sin(x2)/x2,x2,0);%表达式sin(x2)/x2在x2趋于0时的极限
g5=limit(sin(x)+x,x,0,'left');%表达式的左极限
g6=limit(sin(t2)+t2^3/(t2+1),t2,0,'right');%表达式的右极限
% 13.符号微分
syms x y a;
f=[a y^3;y*cos(x) log(x)];
dx=diff(f);%求f对x的导数
dy2=diff(f,y,2);%求f对y的二阶导数
dxdy=diff((diff(f,x)),y);%求f对x,y的二阶混合偏导数
syms z;
g=[x+log(y*z);y^2+tan(z);sin(x)+cos(y)];
t=[x y z];
gj=jacobian(g,t);%计算雅克比矩阵
% 14.级数求和
syms t;
symsum(1/(t^2-1),t,2,9);%求表达式1/(t^2-1)在区间[ 2,9]的和
% 15.符号积分
syms x6 a t5 t6;%注意下面的规则同样适用于矩阵
g6=int(a^x6*cos(x6),0,pi);%对表达式积分
g7=int(x6^4,t5,t6);%对表达式积分,积分上下限可以取变量
g8=int(1/x6,1,inf);%积分上限为无穷
g9=int(1/t5);%缺省时默认为不定积分
% 16.代数方程的求解
syms a b c x;
solve('x^3+2*x=4','x')%解方程 x^3+2*x=4
solve('sin(x+1)',x)%解方程 sin(x+1)=0,无穷解只输出0附近的,有限个解则全部输出
solve('a*(x^2-6)+b*(x+9)-c')%解方程 a*(x^2-6)+b*(x+9)-c 缺省时默认变量为第一自变量x
s=solve('x^2+2*y+1','x+3*z=4','y*z=-1');%求解非线性方程组
disp([s.x s.y s.z],6);%显示求解结果
%下面是用来求解非线性方程组的举例
syms d n p q;
eq1=d+n/2+p/2-q;
eq2=n+d+q-p-10;
eq3=q+d-n/4-p;
[n,p,q]=solve(eq1,eq2,eq3,n,p,q);
% 17.符号微分方程的求解
syms x y;
y=dsolve('Dy=1+y^2','y(0)=3','x');%一阶微分方程,必须是Dy、D2y...这些形式
y=dsolve('D2y=cos(2*x)-y','y(0)=log(5)','Dy(0)=0','x');%二阶微分方程,y(0)、Dy(0)顺序可变,x必须在最后
%下面是用来求微分方程dx/dt=2y,dy/dt=-x
g=dsolve('Dx=2*y,Dy=-x');
gx=g.x;
gy=g.y;
%下面是用来求dy/dx=3y+z,dz/dx=-4y+3z的特解和通解
g1=dsolve('Dy=3*y+z,Dz=-4*x+3*z','x');% 通解
g1y=g1.y
g1x=g1.z
g2=dsolve('Dy=3*y+z,Dz=-4*x+3*z','y(0)=0,z(3)=1','x');% 特解
g2y=g2.y;
g2x=g2.z;