matlab符号推导应用及相关技巧
作者:互联网
手撕公式必不可少,但是难免出错。在战略上手推公式,而在战术上用matlab符号推导辅助和验证可以大幅度减少出错,并提高效率。
1. 符号推导第一步,学会使用sym和syms
a.生成 单个符号变量
sym a
b.生成 单个符号变量
syms a b c d
c.生成矩阵符号变量sym和syms的区别
使用sym只生成一个整体a可以控制元素显示方式
使用syms生成一个整体a及对应元素符号变量
d.生成向量和矩阵符号变量及使用
生成的矩阵符号变量可以像正常矩阵一样进行索引和计算
更加详细的介绍请在command window里输入doc sym或者doc syms回车查看相关help介绍
2. 代码转公式
当我们看别人的代码有部分看不明白时,可以尝试用符号推导打出来看一下。比如以下代码。我们想知道从矩阵y到E的具体公式是什么样的。
将相关参数设为符号变量,再将推出来的公式转为latex代码,在AxMath中复制便可直观看到公式。
%% 符号推导
NElem =1;
NMat = 3;
y = sym('y%d%d',[NElem NMat]);
syms eps_E
E0 = sym('E0_%d',[NMat 1]);
penal = 2;
gamma = 1;
w = y.^penal;
S = 1-(gamma.*w);
Prod = ones(NElem,NMat);
for m = 1:NMat-1
S = [S(:,NMat),S(:,1:NMat-1)];
Prod = Prod.*S;
end
E = eps_E + (1-eps_E).*((w.*Prod)*E0);
latex(E)
3. 求梯度等信息gradient函数
上面求了矩阵y到向量E的函数关系式。下面计算标量E对矩阵y的每一项的导数。注意使用gradient函数时,第二项不能是矩阵必须向量化再reshape成矩阵。同样可以用latex代码直观看到计算的梯度信息。
%% 求导
dEdy = reshape(gradient(E,y(:)),NMat,1);
latex(dEdy)
4. 公式推导加使用subs函数
如推导下面向量f对t1 t2的导数得到的A矩阵。推导完成。A是符号变量
syms t [1 2]
M = 8;
m = 2;
L = 0.5;
g = 9.8;
a = 1/(M+m);
f = [t2
(g*sin(t1)-a*m*L*t2^2*sin(2*t1)/2)/(4*L/3-a*m*L*cos(t1)^2)];
A = [diff(f,t1) diff(f,t2)];
下面根据不同的t1 t2要使用相应的A矩阵。使用subs函数与double结合。r如果不用double函数,结果的小数是分数形式。
%% 赋值使用
t1 = pi/6;
t2 = pi/3;
AA = double(subs(A))
5. 公式操作函数,以simplify函数为例。
直接搜索可以看到simplify函数的使用方法和example。
还有其他类似函数,比如 collect同类项合并;expand表达式进行展开;factor因式分解等。
标签:技巧,推导,符号,矩阵,NMat,sym,t1,syms,matlab 来源: https://blog.csdn.net/update7/article/details/112590433