matlab 如何求自定义函数的导数

如题所述

matlab的求导命令与求导法

建立符号变量命令sym和syms调用格式:
x=sym('x'), 建立符号变量x;
syms x y z , 建立多个符号变量x,y,z;
matlab求导命令diff调用格式:
diff(函数) , 求的一阶导数;
diff(函数, n) , 求的n阶导数(n是具体整数);
diff(函数,变量名), 求对的偏导数;
diff(函数, 变量名,n) ,求对的n阶偏导数;
matlab求雅可比矩阵命令jacobian,调用格式:
jacobian([函数;函数; 函数], [])给出矩阵:

求一元函数的导数.

例.求的导数.

解:打开matlab指令窗,输入指令:
dy_dx=diff(sin(x)/x).
得结果:
dy_dx=cos(x)/x-sin(x)/x^2.
matlab的函数名允许使用字母、空格、下划线及数字,不允许使用其他字符,在这里我们用dy_dx表示

例.求的导数.
解: 输入命令:
dy_dx=diff(log(sin(x))).
得结果:
dy_dx=cos(x)/sin(x).
在matlab中,函数用log(x)表示,而log10(x)表示

例.求的导数.
解: 输入命令:dy_dx=diff((x^2+2*x)^20).
得结果:
dy_dx=20*(x^2+2*x)^19*(2*x+2).
注意输入时应为2*x.

例.求的导数.
解: 输入命令:
dy_dx=diff(x^x).
得结果:
dy_dx =x^x*(log(x)+1).
利用matlab 命令diff一次可以求出若干个函数的导数.
建议参考:http://hi.baidu.com/%B1%B1%BE%A9%CE%D2%B0%AE%C4%E3/blog/item/bd0b80f8771d151ed9f9fdd6.html

参考资料:http://hi.baidu.com/%B1%B1%BE%A9%CE%D2%B0%AE%C4%E3/blog/item/bd0b80f8771d151ed9f9fdd6.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-04
判断函数的性质
下面我们就以带绝对值的正选函数f(x)=sin|x|为例来求导。先来判断一下一下该函数的性质。我们先用matlab画一下该函数的图形,具体代码如下:
%画出f(x)=sin|x|图形
clear
x=-2*pi:pi/20:2*pi;
y=sin(abs(x));
plot(x,y,'r','LineWidth',1.5)
title('函数f(x)=sin|x|图形'),xlabel('x'),ylabel('y')
函数图形为:

x≥0,有导数的定义求右导数
当x≥0时,我们可以去掉函数中的绝对值,这时候函数f就变为:f(x)=sinx,这时候求右导数就简单多了,不过还是得用定义发求右导数。具体代码以及计算结果请看下图:

x≤0,由导数的定义求左导数
同理,当x≤0时,去掉函数中的绝对值,f就变为:f(x)=sin(-x).。用定义发求左导数。具体代码以及计算结果请看下图,有图上的结果再结合上一部结论可以得出,f(x)在x=0点的导数不存在,而且在小于0的区间和大于0的区间导数不一致。

直接利用diff求导
matlab提供了一个直接求函数导数的指令diff,然而当函数含有绝对值时候是否还有效呢?我们来探索一下。有下图中可以看出,当x=0时,函数的导数出现了错误的结果。

画出图形代码
下面我们画出函数f(x)、两个区间分别的导数图形。具体代码如下图所示:

画出的图形如下图所示:
相似回答