其他分享
首页 > 其他分享> > matlab符号推导应用及相关技巧

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_EE0 = 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;endE = 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