首页 > 编程知识 正文

matlab符号运算求导,matlab用符号方法求导数

时间:2023-05-03 12:57:02 阅读:252503 作者:4462

声明:本文章中数据来自清风老师数学建模课程

文章目录 MATLAB符号函数的求导1、符号函数求导1.1 一元符号函数求导1.2 多元函数的导数 2、差分2.1 向量的差分2.2 矩阵的差分

MATLAB符号函数的求导

MATLAB中可以使用命令diff对符号函数进行求导,并且当diff作用到向量或者是矩阵时还可以求差分

1、符号函数求导 1.1 一元符号函数求导

先定义一元符号函数

syms xy = x^4-5*x^2+6

进行求导,当diff作用到符号函数上时可以对符号函数进行求导

第一个参数传入符号函数第二个参数传入要求几阶导,第二个参数空着默认求1一阶导 diff(y,1) %求一阶导数 diff(y)默认求一阶导% 4*x^3 - 10*xdiff(y,2) %求二阶导数% 12*x^2 - 10

求导后分析结果遇到的问题
下面我们用diff对cos(x)*tan(x)进行求导

syms xy = cos(x)*tan(x)dy = diff(y,10) %求十阶导数 240*sin(x)*(tan(x)^2 + 1)^2 - cos(x)*tan(x) - 4032*sin(x)*(tan(x)^2 + 1)^3 + 32640*sin(x)*(tan(x)^2 + 1)^4 - 79360*sin(x)*(tan(x)^2 + 1)^5 - 10*sin(x)*(tan(x)^2 + 1) - 3360*cos(x)*tan(x)*(tan(x)^2 + 1)^2 + 57120*cos(x)*tan(x)*(tan(x)^2 + 1)^3 - 1680*cos(x)*tan(x)^3*(tan(x)^2 + 1) - 357120*cos(x)*tan(x)*(tan(x)^2 + 1)^4 + 353792*cos(x)*tan(x)*(tan(x)^2 + 1)^5 + 6720*cos(x)*tan(x)^5*(tan(x)^2 + 1) - 5760*cos(x)*tan(x)^7*(tan(x)^2 + 1) + 512*cos(x)*tan(x)^9*(tan(x)^2 + 1) + 480*sin(x)*tan(x)^2*(tan(x)^2 + 1) - 4032*sin(x)*tan(x)^4*(tan(x)^2 + 1) + 7680*sin(x)*tan(x)^6*(tan(x)^2 + 1) - 2560*sin(x)*tan(x)^8*(tan(x)^2 + 1) + 87360*cos(x)*tan(x)^3*(tan(x)^2 + 1)^2 - 1105920*cos(x)*tan(x)^3*(tan(x)^2 + 1)^3 + 1841152*cos(x)*tan(x)^3*(tan(x)^2 + 1)^4 - 345600*cos(x)*tan(x)^5*(tan(x)^2 + 1)^2 + 1304832*cos(x)*tan(x)^5*(tan(x)^2 + 1)^3 + 128512*cos(x)*tan(x)^7*(tan(x)^2 + 1)^2 - 22176*sin(x)*tan(x)^2*(tan(x)^2 + 1)^2 + 345600*sin(x)*tan(x)^2*(tan(x)^2 + 1)^3 - 1372160*sin(x)*tan(x)^2*(tan(x)^2 + 1)^4 + 218880*sin(x)*tan(x)^4*(tan(x)^2 + 1)^2 - 1858560*sin(x)*tan(x)^4*(tan(x)^2 + 1)^3 - 316160*sin(x)*tan(x)^6*(tan(x)^2 + 1)^2 + 90*cos(x)*tan(x)*(tan(x)^2 + 1)

我们看到对其求10阶导后的结果是无比的长,那么我们看看能不能用mupad工具箱来让结果显示的更加自然呢?
然而并不理想,见下图:

mupad工具箱仅能对待整理的式子进行整理,显示出“人能容易看懂的”,但是无奈我们的结果太麻烦了
这时候我们可以尝试一下simplify来进行化简整理

如下图所示,结果很明显,是我们想要的形式

那么为什么我们使用diff对cos(x)*tan(x)求导的结果这么复杂呢,其实它的求导算法就是莱布尼兹公式的展开。其实我们知道cos(x)*tan(x)等于sin(x),求高次导数一定是一个简单的式子

1.2 多元函数的导数

参数:

第一个参数是待求导符号函数第二个参数是要对那个自变量求偏导第三个参数是要求几阶偏导数

当连续对自变量求偏导时,放在前面的自变量先求偏导,后面的自变量后求偏导

syms x1 x2 x3y1 = x1^5*x2+x2*x3-x1^2*x3py1 = diff(y1,x1,1) % 对x1求一阶偏导% 5*x2*x1^4 - 2*x3*x1py2 = diff(y1,x1,2) % 对x1求二阶偏导% 20*x2*x1^3 - 2*x3py3 = diff(y1,x1,x2) % 先对x1求偏导,再对x2求偏导% 5*x1^4py4 = diff(y1,x2,x1) % 先对x2求偏导,再对x1求偏导% 5*x1^4 2、差分

注意,如果diff函数作用的对象不是符号函数,而是矩阵,那么对应的功能是求差分。

2.1 向量的差分

默认求1阶差分

A=[4 5 6 3 2 1];diff(A) % 求向量A的一阶差分 1 1 -3 -1 -1diff(A,2) % 在一阶差分的基础上再差分一次 0 -4 2 0 2.2 矩阵的差分

默认是列的方向上求差分(下一行减上一行),且默认求一阶差分。
第三个参数指定为2时,在行的方向上求差分(后一列减前一列)
第二个参数用于指定求几阶差分,默认一阶差分

A=[4 5 6; 7 4 2; 5 6 2]A1=diff(A) % 下一行减去上一行求一阶差分% 3 -1 -4% -2 2 0A2=diff(A,2) % 下一行减去上一行求二阶差分(在一阶差分的基础上再差分一次)% -5 3 4A3=diff(A,2,1) % 最后面的1表示在行上进行差分(在列的方向上进行差分)% -5 3 4A4=diff(A,1,2) % 后一列减去前一列求一阶差分, 最后面的2表示在列上进行差分(在行的方向上进行差分)% 1 1% -3 -2% 1 -4A4=diff(A,2,2) % 后一列减去前一列求二阶差分% 0% 1% -5

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。