文章目录
说明
Matlab的版本为Matlab R2018b;学习的主要内容是Matlab相关的视频网课,可以把这理解为学习的笔记。
1、Matlab当中的符号函数
用matlab实现符号计算有以下几种途径
- 调用matlab已经开发好的各种功能函数进行符号运算
- 利用matlab保留的maple.m 和mpa.m 两个函数与Maple接口
- 使用matlab提供的符号函数计算器功能
2、创建符号函数
在生成符号表达式时
- 符号运算过程中,变量都以字符形式保存和运算
- 符号表达式包括符号函数和符号方程,前者不包括等号,后者必须带等号
- 最简单的创建方法和字符串变量的生成方法相同
- 对空格非常敏感,符号表达式内部不要随便加空格
- 由于符号表达式实际上时符号矩阵,所以也可以用str2sym命令创建符号表达式
% 创建符号函数
f = 'log(x)';
% 创建符号方程
e = 'y=a*x^2+b*x+c';
% 创建符号微分方程
d = 'Dy-y=x';
% 用str2sym命令创建符号表达式
f1 = str2sym('sin(x)');
% 用syms命令创建符号函数,但不能创建符号方程
syms x
f2 = sin(x)+cos(x);
3、符号与数值之间的转换
- 符号运算的目的时得到精确的数值解时,需要进行数值转换
- digits,vpa两个函数可以进行数值转换
- 旧版本中的numeric数值转换函数依旧有效
% 设置有效数字为D的近似解精度
% digits(D);
% 符号表达式S在digits函数设置下精度的数值解
% 符号表达式S在digits(D)精度下的数值解
% vpa(S);
% vpa(S, D);
% 将不含自由变量的符号表达式转换为数值形式
% 等价于double(sym(S));
% numeric(S);
% 将符号表达式中的OLD变量替换为NEW变量
% subs(S, OLD, NEW);
x = sym('x');
f=x-cos(x);
f1 = subs(f, x, 'pi');
digits(25);
vpa(f1)
double(f1)
4、符号函数的运算
4.1 复合函数运算compose
syms x y z t u m;
f=1/(1+x^2);
g=sin(y);
h=x^t;
p=exp(-y/u);
% 传入f(x),g(y)双参数,返回f(g(y))
compose(f, g)
% 传入f(x),g(y),z三参数,返回f(g(z))
compose(f, g, t)
% 传入h(x, t), g(y), x, z四参数,指定x为h(x, t)中要被替换的变量
% 最终返回h(g(x), t)
compose(h, g, x, z)
compose(h, g, t, z)
% 传入h(x, t), p(y, u), x, y ,z五参数,指定x为h(x, t)中的变量
% 指定y为p(y, u)中要被替换的变量,并返回h(p(z,u),t)
compose(h, p, x, y, z)
compose(h, p, t, u, z)
4.2 反函数的运算
syms x y;
f=x^2+y;
finverse(f)
finverse(f, y)
5、符号函数的化简
5.1 因式分解
% 将符号函数S因式分解
% factor(S);
% 分解大于2的52次方的整数
% factor(sym'N');
sym('x');
factor(x^9-1)
factor(sym('12345678901234567890'))
5.2 符号矩阵的展开
syms x y;
expand((x+1)^3)
expand(sin(x+y))
5.3 同类式合并
% 同类项合并,然后降幂排列
% collect(S)
% 合并S中V的同幂项系数
% collect(S, V)
syms x y;
collect(x^2*y+y*x-x^2-2*x)
5.4 求符号表达式的最简形式
% 返回显式表达式S的长度最短的简化形式
% simple(S)
% R为返回的简化形式,HOW为简化过程中使用的主要方法
% [R, HOW] = simple(S)返回的R为简化形式,HOW为简化过程中使用的主要方法
% simplify()符号简化函数
syms x;
simplify(sin(x)^2+cos(x)^2)
5.5 分数通分
% [N, D] = numden(A);
syms x y;
[n, d] = numden(x/y+y/x);
5.6 化简为秦九昭型
horner(x^3-6*x^2+11*x-6)
6、符号微积分
6.1 符号函数求极限
% 求F符号函数中x变量趋于a时的极限
% limit(F, x, a);
% 独立变量趋近于a时F的极限
% limit(F, a)
% 求a为0时的极限值
% limit(F)
% 限定取左极限
% limit(F, x, a, 'left')
syms x a t h;
limit(sin(x)/x)
limit(1/x, x, 0, 'right')
limit((1+2*t/x)^(3*x), x, inf)
6.2 符号函数积分
% 积分函数int
% 计算S的不定积分
% int(S)
% 计算对S当中v的不定积分
% int(S, v)
% 求S默认变量在(a,b)上的定积分
% int(S, a, b)
% 求S中v变量在(a,b)上的定积分
% int(S, v, a, b)
syms x x1 alpha u t;
A = [cos(x*t),sin(x*t);
sin(x*t),cos(x*t)];
int(A, t)
int(x1*log(1+x1), 0, 1)
6.3 符号函数微分和差分
% 默认求一阶微分
% diff(S)
% 对特定的变量微分
% diff(S, 'v')或者diff(S, sym('v'))
% 指定阶数n求微分
% diff(s, n)
% 指定变量和阶数求微分
% diff(S, 'v', n)
syms x t;
diff(sin(x^2))
diff(t^6, 6)
6.4 求梯度
% [FX, FY] = gradient(F)
% [FX, FY] = gradient(F, H)
% [FX, FY] = gradient(F, HX, HY)
% [FX, FY, FZ] = gradient(F)
% [FX, FY, FZ] = gradient(F, HX, HY, HZ)