Matlab 的 Matlab微分和导数

MATLAB提供用于计算符号导数的diff命令。 以最简单的形式,将要微分的功能传递给diff命令作为参数。

例如,计算函数的导数的方程式 -

例子

创建脚本文件并在其中键入以下代码 -

syms t

f = 3*t^2 + 2*t^(-2);

diff(f)

执行上面示例代码,得到以下结果 -

Trial>> syms t

f = 3*t^2 + 2*t^(-2);

diff(f)

ans =

6*t - 4/t^3

以下是使用Octave 计算的写法 -

pkg load symbolic

symbols

t = sym("t");

f = 3*t^2 + 2*t^(-2);

differentiate(f,t)

执行上面示例代码,得到以下结果 -

ans =

6*t - 4/t^3

基本微分规则的验证

下面简要说明微分规则的各种方程或规则,并验证这些规则。 为此,我们将写一个第一阶导数f'(x)和二阶导数f“(x)。

以下是微分的规则 -

规则 - 1

对于任何函数f和g,任何实数a和b是函数的导数:

h(x) = af(x) + bg(x)相对于x,由h’(x) = af’(x) + bg’(x)给出。

规则 - 2

sum和subtraction规则表述为:如果f和g是两个函数,则f'和g'分别是它们的导数,如下 -

(f + g)' = f' + g'

(f - g)' = f' - g'

规则 - 3

product规则表述为:如果f和g是两个函数,则f'和g'分别是它们的导数,如下 -

(f.g)' = f'.g + g'.f

规则 - 4

quotient规则表明,如果f和g是两个函数,则f'和g'分别是它们的导数,那么 -

规则 - 5

多项式或基本次幂规则表述为:如果y = f(x)= x^n,则 -

这个规则的直接结果是任何常数的导数为零,即如果y = k,那么为任何常数 -

f' = 0

规则 - 5

chain规则表述为 - 相对于x的函数h(x)= f(g(x))的函数的导数是 -

h'(x)= f'(g(x)).g'(x)

例子

创建脚本文件并在其中键入以下代码 -

syms x

syms t

f = (x + 2)*(x^2 + 3)

der1 = diff(f)

f = (t^2 + 3)*(sqrt(t) + t^3)

der2 = diff(f)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 = diff(f)

f = (2*x^2 + 3*x)/(x^3 + 1)

der4 = diff(f)

f = (x^2 + 1)^17

der5 = diff(f)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)

der6 = diff(f)

执行上面示例代码,得到 以下结果 -

f =

(x^2 + 3)*(x + 2)

der1 =

2*x*(x + 2) + x^2 + 3

f =

(t^(1/2) + t^3)*(t^2 + 3)

der2 =

(t^2 + 3)*(3*t^2 + 1/(2*t^(1/2))) + 2*t*(t^(1/2) + t^3)

f =

(x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 =

(2*x - 2)*(3*x^3 - 5*x^2 + 2) - (- 9*x^2 + 10*x)*(x^2 - 2*x + 1)

f =

(2*x^2 + 3*x)/(x^3 + 1)

der4 =

(4*x + 3)/(x^3 + 1) - (3*x^2*(2*x^2 + 3*x))/(x^3 + 1)^2

f =

(x^2 + 1)^17

der5 =

34*x*(x^2 + 1)^16

f =

1/(t^3 + 3*t^2 + 5*t - 9)^6

der6 =

-(6*(3*t^2 + 6*t + 5))/(t^3 + 3*t^2 + 5*t - 9)^7

以下是对上面示例的Octave写法 -

pkg load symbolic

symbols

x=sym("x");

t=sym("t");

f = (x + 2)*(x^2 + 3)

der1 = differentiate(f,x)

f = (t^2 + 3)*(t^(1/2) + t^3)

der2 = differentiate(f,t)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 = differentiate(f,x)

f = (2*x^2 + 3*x)/(x^3 + 1)

der4 = differentiate(f,x)

f = (x^2 + 1)^17

der5 = differentiate(f,x)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)

der6 = differentiate(f,t)

指数,对数和三角函数的导数

下表提供了常用指数,对数和三角函数的导数,

例子

创建脚本文件并在其中键入以下代码 -

syms x

y = exp(x)

diff(y)

y = x^9

diff(y)

y = sin(x)

diff(y)

y = tan(x)

diff(y)

y = cos(x)

diff(y)

y = log(x)

diff(y)

y = log10(x)

diff(y)

y = sin(x)^2

diff(y)

y = cos(3*x^2 + 2*x + 1)

diff(y)

y = exp(x)/sin(x)

diff(y)

执行上面示例代码,得到以下结果 -

y =

exp(x)

ans =

exp(x)

y =

x^9

ans =

9*x^8

y =

sin(x)

ans =

cos(x)

y =

tan(x)

ans =

tan(x)^2 + 1

y =

cos(x)

ans =

-sin(x)

y =

log(x)

ans =

1/x

y =

log(x)/log(10)

ans =

1/(x*log(10))

y =

sin(x)^2

ans =

2*cos(x)*sin(x)

y =

cos(3*x^2 + 2*x + 1)

ans =

-sin(3*x^2 + 2*x + 1)*(6*x + 2)

y =

exp(x)/sin(x)

ans =

exp(x)/sin(x) - (exp(x)*cos(x))/sin(x)^2

以下代码是上面代码的Octave写法 -

pkg load symbolic

symbols

x = sym("x");

y = Exp(x)

differentiate(y,x)

y = x^9

differentiate(y,x)

y = Sin(x)

differentiate(y,x)

y = Tan(x)

differentiate(y,x)

y = Cos(x)

differentiate(y,x)

y = Log(x)

differentiate(y,x)

% symbolic packages does not have this support

%y = Log10(x)

%differentiate(y,x)

y = Sin(x)^2

differentiate(y,x)

y = Cos(3*x^2 + 2*x + 1)

differentiate(y,x)

y = Exp(x)/Sin(x)

differentiate(y,x)

计算高阶导数

要计算函数f的较高导数,可使用diff(f,n)。

计算函数的二阶导数公式为 -

f = x*exp(-3*x);

diff(f, 2)

MATLAB执行上面代码将返回以下结果 -

ans =

9*x*exp(-3*x) - 6*exp(-3*x)

以下是使用Octave重写上面示例,代码如下 -

pkg load symbolic

symbols

x = sym("x");

f = x*Exp(-3*x);

differentiate(f, x, 2)

例子

在这个例子中,要解决一个问题。由给定函数y = f(x)= 3sin(x)+ 7cos(5x),来找出方程f“+ f = -5cos(2x)是否成立。

创建脚本文件并在其中键入以下代码 -

syms x

y = 3*sin(x)+7*cos(5*x); % defining the function

lhs = diff(y,2)+y; %evaluting the lhs of the equation

rhs = -5*cos(2*x); %rhs of the equation

if(isequal(lhs,rhs))

disp('Yes, the equation holds true');

else

disp('No, the equation does not hold true');

end

disp('Value of LHS is: '), disp(lhs);

运行文件时,会显示以下结果 -

No, the equation does not hold true

Value of LHS is:

-168*cos(5*x)

以上是上面示例的Octave写法 -

pkg load symbolic

symbols

x = sym("x");

y = 3*Sin(x)+7*Cos(5*x); % defining the function

lhs = differentiate(y, x, 2) + y; %evaluting the lhs of the equation

rhs = -5*Cos(2*x); %rhs of the equation

if(lhs == rhs)

disp('Yes, the equation holds true');

else

disp('No, the equation does not hold true');

end

disp('Value of LHS is: '), disp(lhs);

查找曲线的最大和最小值

如果正在搜索图形的局部最大值和最小值,基本上是在特定地点的函数图上或符号变量的特定值范围内查找最高点或最低点。

对于函数y = f(x),图形具有零斜率的图上的点称为固定点。 换句话说,固定点是f'(x)= 0。

要找到微分的函数的固定点,需要将导数设置为零并求解方程。

示例

要找到函数f(x)= 2x3 + 3x2 - 12x + 17的固定点

可参考以下步骤 -

首先输入函数并绘制图,代码如下 -

syms x

y = 2*x^3 + 3*x^2 - 12*x + 17; % defining the function

ezplot(y)

执行上面示例代码,得到以下结果 -

以上是上面示例的Octave写法 -

pkg load symbolic

symbols

x = sym('x');

y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y)

print -deps graph.eps

我们的目标是在图上找到一些局部最大值和最小值,假设要找到图中间隔在[-2,2]的局部最大值和最小值。参考以下示例代码 -

syms x

y = 2*x^3 + 3*x^2 - 12*x + 17; % defining the function

ezplot(y, [-2, 2])

执行上面示例代码,得到以下结果 -

以下是上面示例的Octave写法 -

pkg load symbolic

symbols

x = sym('x');

y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y, [-2, 2])

print -deps graph.eps

接下来,需要计算导数。

g = diff(y)

MATLAB执行代码并返回以下结果 -

g =

6*x^2 + 6*x - 12

以下是上面示例的Octave写法 -

pkg load symbolic

symbols

x = sym("x");

y = 2*x^3 + 3*x^2 - 12*x + 17;

g = differentiate(y,x)

接下来求解导数函数g,得到它变为零的值。

s = solve(g)

MATLAB执行代码并返回以下结果 -

s =

1

-2

以下是上面示例的Octave写法 -

pkg load symbolic

symbols

x = sym("x");

y = 2*x^3 + 3*x^2 - 12*x + 17;

g = differentiate(y,x)

roots([6, 6, -12])

这与我们设想情节一致。 因此,要评估临界点x = 1,-2处的函数f。可以使用subs命令替换符号函数中的值。

subs(y, 1), subs(y, -2)

MATLAB执行代码并返回以下结果 -

ans =

10

ans =

37

以下是上面示例的Octave写法 -

pkg load symbolic

symbols

x = sym("x");

y = 2*x^3 + 3*x^2 - 12*x + 17;

g = differentiate(y,x)

roots([6, 6, -12])

subs(y, x, 1), subs(y, x, -2)

因此,在间隔[-2,2]中函数f(x)= 2x^3 + 3x^2 - 12x + 17的最小值和最大值分别为10和37。

求解微分方程

MATLAB提供了用于求解微分方程的dsolve命令。

找到单个方程的解的最基本的dsolve命令形式是 -

dsolve('eqn')

其中eqn是用于输入方程式的文本串。

它返回一个符号解,其中包含一组任意常量,MATLAB标记C1,C2等等。

还可以为问题指定初始和边界条件,以逗号分隔的列表遵循以下公式:

dsolve('eqn','cond1', 'cond2',…)

为了使用dsolve命令,导数用D表示。例如,像f'(t)= -2 * f + cost(t)这样的等式输入为 -

'Df = -2*f + cos(t)'

较高阶导数由D导数的顺序表示。

例如,方程f"(x) + 2f'(x) = 5sin3x应输入为 -

'D2y + 2Dy = 5*sin(3*x)'

下面来看一个一阶微分方程的简单例子:y'= 5y。

s = dsolve('Dy = 5*y')

MATLAB执行代码并返回以下结果 -

s =

C2*exp(5*t)

再来一个二阶微分方程的例子:y“-y = 0,y(0)= -1,y'(0)= 2。

dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')

MATLAB执行代码并返回以下结果 -

ans =

exp(t)/2 - (3*exp(-t))/2

matlab如何就导数,Matlab微分和导数相关推荐

  1. MATLAB微分和导数

    MATLAB提供用于计算符号导数的diff命令. 以最简单的形式,将要微分的功能传递给diff命令作为参数.例如,计算函数的导数的方程式 - 例子创建脚本文件并在其中键入以下代码 -syms t f ...

  2. matlab 导数表达式,matlab语言怎样表示x的导数,matlab 如何求自定义函数的导数

    matlab的求导命令与求导法 建立符号变量命令sym和syms调用格式: x=sym('x'), 建立符号变量x: syms x y z , 建立多个符号变量x,y,z: matlab求导命令dif ...

  3. matlab 极限积分,实验二MATLAB中的极限和微分积分运算

    <实验二MATLAB中的极限和微分积分运算>由会员分享,可在线阅读,更多相关<实验二MATLAB中的极限和微分积分运算(28页珍藏版)>请在人人文库网上搜索. 1.实验二 MA ...

  4. 怎么用matlab编写quad8算法,MATLAB程序设计教程(8)---MATLAB数值积分与微分

    第8章MATLAB数值积分与微分 8.1数值积分 8.2数值微分 8.1数值积分 8.1.1数值积分基本原理 求解定积分的数值方法多种多样,如简单的梯形法.辛普生(Simpson) 法.牛顿-柯特斯( ...

  5. 数值积分与数值微分MATLAB,MATLAB程序设计教程(8)——MATLAB数值积分与微分

    MATLAB程序设计教程(8)--MATLAB数值积分与微分 第8章MATLAB数值积分与微分 8.1  数值积分 8.2  数值微分 8.1数值积分 8.1.1  数值积分基本原理 求解定积分的数值 ...

  6. matlab 极限积分,实验二matlab中的极限和微分积分运算.ppt

    实验二matlab中的极限和微分积分运算实验二matlab中的极限和微分积分运算 实验二 MATLAB中的极限.微分和积分运算 一.实验目的 熟悉MATLAB软件中关于极限.微分运算和不定积分.定积分 ...

  7. 二元隐函数求二阶偏导_在线计算专题(03):具体、抽象函数的导数、微分与方向导数的计算...

    导数与微分是微积分内容的基础,就计算来说一元函数与多元函数的导数的计算思想一致. 不管是一元函数还是多元函数,导数.偏导数的计算都是将函数视为求导变量的一元函数求导数.微分在描述形式略有区别,但是其计 ...

  8. 导数,微分,偏导,全微分,方向导数,梯度

    多元函数与一元函数有一个很大的区别在于定义域的不同:一元函数自变量就在x轴上,因此趋近的方向只有某点的左右两侧,因此,考察一元函数极限的时候,仅考虑左邻域和右邻域即可.但是多变量微分变得复杂,趋向方式 ...

  9. 蔡高厅老师 - 高等数学阅读笔记 - 05 - 导数和微分 - 01 (22、23、24、25、26、27)

    导数和微分: 1 导数和微分起因: 1.1 导数的概念 1.1.1 速度: 平均速度: 1.1.2 切线问题 2 导数的定义: 可导 用定义求导函数: 23 左导数和右导数 目录 导数和微分: 1 导 ...

最新文章

  1. python单词意思-python实现单词本功能
  2. TopCoder入门教程
  3. xshell使用xftp传输文件和使用pure-ftpd搭建ftp服务
  4. sql开启mysql远程连接_SQLServer2008设置开启远程连接
  5. php求北京时间方法,php怎么将获得的时间转换为北京时间
  6. 贪心算法—圣诞老人的礼物(POJ 4110)
  7. MyEclipse Maven 警告: Failed to scan JAR [file:/C:/xxxxx.jar] from WEB-INF/lib
  8. JavaScript之基础-9 JavaScript String(内置对象、String概述、字符串常用操作、模式匹配)...
  9. 干了这杯可乐!Gulp 上手指南
  10. MASQUERADE
  11. [转载] Python time sleep()方法如何使用?
  12. linux网络接口数据重新封包,Linux网络之设备接口层:发送数据包流程dev_queue_xmit...
  13. 让菜鸡讲一讲网络流(isap)
  14. yii2 linkpager ajax,Yii2扩展 - LinkPager 带分页大小
  15. reg 正则表达式^
  16. python dataframe取行列_pandas DataFrame 行列索引及值的获取的方法
  17. 日志分隔工具Cronolog
  18. 霍尼韦尔扫描枪设置手动方法
  19. 双目相机选择——镜头与相机的参数介绍及选择
  20. DirectSHOW中的视频捕捉 (乱七八糟整理)

热门文章

  1. html5诊断报告,网站诊断报告(模板).doc
  2. linux Nginx服务的安装及使用
  3. teambition/tower/team@osc/worktile团队协作工具价格比较
  4. LLDP协议、STP协议 笔记
  5. 若依分离版部署遇到的问题
  6. C或C++中的isalpha、isalnum、islower 和 isupper函数的详解
  7. 算法详解之狄克斯特拉算法
  8. 制造业管理软件如何帮助企业解决仓库管理难题?
  9. 印度内阁小组讨论华为投资 通信部表示支持
  10. 二维码可以包含多少个字符?