3.1符号表达式的生成
1.在数值运算中,在输入、输出、中间过程中,变量都是数值变量;
在符号运算中,在输入、输出、中间过程中,变量都是以字符串形式保存和运算的(数字也是)。
2.符号表达式: 符号函数(无等号) + 符号方程(有等号)
3.符号函数的生成: >>f = 'log(x)';
符号方程的生成: >>e = 'a*x^2+b*x+c=0';
>>d = 'Dy - y = x'; %符号微分方程
·用这种方法创建符号表达式对空格很敏感,不要在符号之间乱加空格符。
4.sym命令: 符号函数的生成: >>f = sym('log(x)');
符号方程的生成: >>e = sym('a*x^2+b*x+c=0');
5.syms命令: 只能创建符号函数: >>syms x >>f=log(x)
3.2符号和数值之间的转换
1.digits函数: digits(D) %函数设置有效数位为D的近似解,仅对
2.vpa函数: vpa(S) %符号表达式S在digits函数设置下的近似解
vpa(S,D) %符号表达式S在digits(D)设置下的近似解
3.subs函数: subs(S,OLD,NEW) %用NEW变量代替符号表达式S中的OLD变量
4.numeric函数: numeric(S) %将符号表达式S转换为数值形式
double函数: double(S) %将符号表达式S转换为数值形式(同numeric)
3.3符号函数的运算
3.3.1复合函数: compose函数
compose(f,g) %f = f(x), g = g(y)
compose(f,g,z) %f = f(x), g = g(y), 用g代替x,用z代替y
compose(f,g,x,z) %f = f(x), g = g(y), 用g代替x,用z代替y
compose(f,g,x,y,z) %f = f(x), g = g(y), 用g代替x,用z代替y
3.3.2反函数: finverse函数
finverse(f) %默认以变量x给出结果
finverse(f,v) %以v为自变量,最后f要转换为v
3.4符号矩阵的创建
3.4.1用sym函数创建
3.4.2用子阵创建: (不提倡)
3.4.3将数值矩阵转化为符号矩阵: b=sym(a) %a为数值矩阵,无论a的元素是用分数还是浮点数表示,转化后的符号矩阵都是用最接近的精确有理数形式表示。
3.4.4符号矩阵的索引和修改: 索引跟数值矩阵的一样 %>>b(2,3)
修改要用一个字符串代替 %>>b(2,3)='log(9)';
3.5符号矩阵的运算
3.5.1基本运算
1.四则运算
1)加减: + -
2)乘除: * / \
3)转置: '
2.行列式运算: det
3.逆: inv
4.秩: rank
5.幂运算: ^
6.指数运算: exp
expm
3.5.2矩阵分解
1.特征值分解函数eig
2.奇异值分解函数svd
3.约当标准型函数jordan
4.三角抽取函数diag, tril, triu
3.5.3矩阵的空间运算
1.列空间运算函数colspace
2.零空间运算函数null
3.5.4符号矩阵的简化
1.因式分解: factor(S) %为了分解大于2^52的整数,可使用factor(sym('N'))
2.展开: expand(S)
3.合并同类项: collect(S)
collect(S,v)
4.符号简化: simple(S) %对表达式S尝试多种不同的算法,以显示长度最短的简化形式,若S为一符号矩阵,结果是全矩阵的最简型式,而不是每个元素的最简型式。
simplify(S) %简化符号矩阵的每一个元素。
5.分式通分: [N,D]=numden(A) %Numerator and denominator of a symbolic expression.
6.秦九昭型: horner(P)
3.6符号微积分
3.6.1符号极限: limit函数
limit(F) %计算a=0时的极限
limit(F,a) %计算finsym(F)->a时的极限
limit(F,x,a) %计算x->a时的极限
limit(F,x,a,'left'(或者'right')) %用left或right指定求极限的方向
3.6.2符号积分: int函数
int(S) %计算findsym(S)的不定积分(S为常数时默认变量为x)
int(S,v) %v为变量
int(S,a,b) %计算findsym(S)的从a到b的定积分
int(S,v,a,b) %v为变量
3.6.3符号微分
1.微分函数diff: diff(S)
diff(S,'v')或diff(S,sym('v'))
diff(S,n) %求n次微分
diff(S,'v',n)或diff(S,n,'v')
2.梯度函数gradient: [FX,FY,FZ,...]=gradient(F) %默认各方向点间隔为1
[FX,FY,FZ,...]=gradient(F,H)%默认各方向点间隔为H
[FX,FY,FZ,...]=gradient(F,HX,HY,HZ)
3.多元函数导数: jacobian(f,v) %计算f对v的Jocobi矩阵
%>>syms x y z
%>>jacobian([x^2+y^2;x^2-y^2],[x,y])
%>>ans = [ 2*x, 2*y]
% [ 2*x,-2*y]
3.7符号代数方程求解
3.7.1线性方程组的符号解法
1.linsolve(A,B) %X = LINSOLVE(A,B) is the same as X = sym(A)\sym(B).
2.solve函数
solve('eqn1','eqn2',...,'eqnN')
solve('eqn1','eqn2',...,'eqnN','var1,var2,...,varN')
solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN')
3.7.2非线性方程组的符号解法: fsolve函数
fsolve('fun',X0)
3.8符号微分方程求解
常微分方程的符号解: dsolve('eqn1','eqn2',...,'eqnN')
3.9符号函数的二维图
3.9.1ezplot
ezplot(f) %f秩包括单个符号变量x的符号表达式,默认[-2*pi,2*pi]
ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])
ezplot(f,[xmin,xmax],fig) %指定绘图的图窗口代替当前窗口
3.9.2fplot
fplot(fun,lims) %fun为M文件或对x的符号表达式,lims为[xmin,xmax]或[xmin,xmax,ymin,ymax]
fplot(fun,lims,tol) %tol < 1,相对误差,默认tol = 0.002
fplot(fun,lims,n) %n >= 1, 以最少n + 1个点来绘图
fplot(fun,lims,'LineSpec') %指定线型绘图
3.10图示化函数计算器
funtool函数
3.11Maple接口