精华内容
下载资源
问答
  • MATLAB如何计算函数导数

    千次阅读 2019-11-28 09:06:30
    这个是怎么回事?不懂! 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。...

    这个是怎么回事?不懂!求解答!!谢谢

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G
    查找:Ctrl/Command + F
    替换:Ctrl/Command + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt. \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • MATLAB微分和导数

    千次阅读 2019-01-24 10:14:40
    例如,计算函数导数的方程式 - 例子创建脚本文件并在其中键入以下代码 -syms t f = 3t^2 + 2t^(-2); diff(f) MATLAB执行上面示例代码,得到以下结果 - Trial>> syms t f = 3t^2 + 2t^(-2); diff(f) ...

    MATLAB提供用于计算符号导数的diff命令。 以最简单的形式,将要微分的功能传递给diff命令作为参数。例如,计算函数的导数的方程式 - 例子创建脚本文件并在其中键入以下代码 -syms t
    f = 3t^2 + 2t^(-2);
    diff(f)
    MATLAB执行上面示例代码,得到以下结果 - Trial>> syms t
    f = 3t^2 + 2t^(-2);
    diff(f)

    ans =

    6*t - 4/t^3
    Shell以下是使用Octave 计算的写法 -pkg load symbolic
    symbols

    t = sym(“t”);
    f = 3t^2 + 2t^(-2);
    differentiate(f,t)
    MATLAB执行上面示例代码,得到以下结果 - ans =

    6*t - 4/t^3
    Shell基本微分规则的验证下面简要说明微分规则的各种方程或规则,并验证这些规则。 为此,我们将写一个第一阶导数f’(x)和二阶导数f“(x)。以下是微分的规则 -规则 - 1对于任何函数f和g,任何实数a和b是函数的导数:h(x) = af(x) + bg(x)相对于x,由h’(x) = af’(x) + bg’(x)给出。规则 - 2sum和subtraction规则表述为:如果f和g是两个函数,则f’和g’分别是它们的导数,如下 - (f + g)’ = f’ + g’

    (f - g)’ = f’ - g’
    规则 - 3product规则表述为:如果f和g是两个函数,则f’和g’分别是它们的导数,如下 - (f.g)’ = f’.g + g’.f
    规则 - 4quotient规则表明,如果f和g是两个函数,则f’和g’分别是它们的导数,那么 -规则 - 5多项式或基本次幂规则表述为:如果y = f(x)= x^n,则 - 这个规则的直接结果是任何常数的导数为零,即如果y = k,那么为任何常数 - f’ = 0
    规则 - 5chain规则表述为 - 相对于x的函数h(x)= f(g(x))的函数的导数是 - h’(x)= f’(g(x)).g’(x)
    MATLAB例子
    创建脚本文件并在其中键入以下代码 -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 - 2x + 1)(3x^3 - 5x^2 + 2)
    der3 = diff(f)
    f = (2x^2 + 3x)/(x^3 + 1)
    der4 = diff(f)
    f = (x^2 + 1)^17
    der5 = diff(f)
    f = (t^3 + 3* t^2 + 5t -9)^(-6)
    der6 = diff(f)
    MATLAB执行上面示例代码,得到 以下结果 - f =
    (x^2 + 3)
    (x + 2)

    der1 =
    2x(x + 2) + x^2 + 3

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

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

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

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

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

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

    f =
    (x^2 + 1)^17

    der5 =
    34x(x^2 + 1)^16

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

    der6 =
    -(6*(3t^2 + 6t + 5))/(t^3 + 3t^2 + 5t - 9)^7
    Shell以下是对上面示例的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 - 2x + 1)(3x^3 - 5x^2 + 2)
    der3 = differentiate(f,x)
    f = (2x^2 + 3x)/(x^3 + 1)
    der4 = differentiate(f,x)
    f = (x^2 + 1)^17
    der5 = differentiate(f,x)
    f = (t^3 + 3* t^2 + 5t -9)^(-6)
    der6 = differentiate(f,t)
    MATLAB指数,对数和三角函数的导数下表提供了常用指数,对数和三角函数的导数,例子
    创建脚本文件并在其中键入以下代码 -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)
    MATLAB执行上面示例代码,得到以下结果 - 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(3x^2 + 2x + 1)
    ans =
    -sin(3x^2 + 2x + 1)(6x + 2)

    y =
    exp(x)/sin(x)
    ans =
    exp(x)/sin(x) - (exp(x)*cos(x))/sin(x)^2
    Shell以下代码是上面代码的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(3x^2 + 2x + 1)
    differentiate(y,x)

    y = Exp(x)/Sin(x)
    differentiate(y,x)
    Shell计算高阶导数要计算函数f的较高导数,可使用diff(f,n)。 计算函数的二阶导数公式为 - f = xexp(-3x);
    diff(f, 2)
    MATLAB MATLAB执行上面代码将返回以下结果 - ans =
    9xexp(-3x) - 6exp(-3*x)
    Shell 以下是使用Octave重写上面示例,代码如下 - pkg load symbolic
    symbols

    x = sym(“x”);
    f = xExp(-3x);

    differentiate(f, x, 2)
    MATLAB 例子
    在这个例子中,要解决一个问题。由给定函数y = f(x)= 3sin(x)+ 7cos(5x),来找出方程f“+ f = -5cos(2x)是否成立。 创建脚本文件并在其中键入以下代码 - syms x
    y = 3sin(x)+7cos(5x); % defining the function
    lhs = diff(y,2)+y; %evaluting the lhs of the equation
    rhs = -5
    cos(2x); %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);
    MATLAB 运行文件时,会显示以下结果 - No, the equation does not hold true
    Value of LHS is:
    -168
    cos(5*x)
    Shell 以上是上面示例的Octave写法 - pkg load symbolic
    symbols

    x = sym(“x”);
    y = 3Sin(x)+7Cos(5x); % 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);
    MATLAB 查找曲线的最大和最小值如果正在搜索图形的局部最大值和最小值,基本上是在特定地点的函数图上或符号变量的特定值范围内查找最高点或最低点。 对于函数y = f(x),图形具有零斜率的图上的点称为固定点。 换句话说,固定点是f’(x)= 0。 要找到微分的函数的固定点,需要将导数设置为零并求解方程。 示例 要找到函数f(x)= 2x3 + 3x2 - 12x + 17的固定点 可参考以下步骤 - 首先输入函数并绘制图,代码如下 - syms x
    y = 2x^3 + 3x^2 - 12*x + 17; % defining the function
    ezplot(y)
    MATLAB 执行上面示例代码,得到以下结果 - 以上是上面示例的Octave写法 - pkg load symbolic
    symbols

    x = sym(‘x’);
    y = inline(“2x^3 + 3x^2 - 12*x + 17”);

    ezplot(y)
    print -deps graph.eps
    MATLAB 我们的目标是在图上找到一些局部最大值和最小值,假设要找到图中间隔在[-2,2]的局部最大值和最小值。参考以下示例代码 - syms x
    y = 2x^3 + 3x^2 - 12*x + 17; % defining the function
    ezplot(y, [-2, 2])
    MATLAB 执行上面示例代码,得到以下结果 - 以下是上面示例的Octave写法 - pkg load symbolic
    symbols

    x = sym(‘x’);
    y = inline(“2x^3 + 3x^2 - 12*x + 17”);

    ezplot(y, [-2, 2])
    print -deps graph.eps
    MATLAB 接下来,需要计算导数。 g = diff(y)
    MATLAB MATLAB执行代码并返回以下结果 - g =

    6x^2 + 6x - 12
    Shell 以下是上面示例的Octave写法 - pkg load symbolic
    symbols

    x = sym(“x”);

    y = 2x^3 + 3x^2 - 12*x + 17;
    g = differentiate(y,x)
    MATLAB 接下来求解导数函数g,得到它变为零的值。 s = solve(g)
    MATLAB MATLAB执行代码并返回以下结果 - s =
    1
    -2
    Shell 以下是上面示例的Octave写法 - pkg load symbolic
    symbols

    x = sym(“x”);

    y = 2x^3 + 3x^2 - 12*x + 17;
    g = differentiate(y,x)
    roots([6, 6, -12])
    MATLAB 这与我们设想情节一致。 因此,要评估临界点x = 1,-2处的函数f。可以使用subs命令替换符号函数中的值。 subs(y, 1), subs(y, -2)
    MATLAB MATLAB执行代码并返回以下结果 - ans =
    10
    ans =
    37
    Shell 以下是上面示例的Octave写法 - pkg load symbolic
    symbols

    x = sym(“x”);

    y = 2x^3 + 3x^2 - 12*x + 17;
    g = differentiate(y,x)

    roots([6, 6, -12])

    subs(y, x, 1), subs(y, x, -2)
    MATLAB 因此,在间隔[-2,2]中函数f(x)= 2x^3 + 3x^2 - 12x + 17的最小值和最大值分别为10和37。 求解微分方程MATLAB提供了用于求解微分方程的dsolve命令。 找到单个方程的解的最基本的dsolve命令形式是 - dsolve(‘eqn’)
    MATLAB 其中eqn是用于输入方程式的文本串。 它返回一个符号解,其中包含一组任意常量,MATLAB标记C1,C2等等。
    还可以为问题指定初始和边界条件,以逗号分隔的列表遵循以下公式: dsolve(‘eqn’,‘cond1’, ‘cond2’,…)
    为了使用dsolve命令,导数用D表示。例如,像f’(t)= -2 * f + cost(t)这样的等式输入为 - ‘Df = -2f + cos(t)’
    较高阶导数由D导数的顺序表示。 例如,方程f"(x) + 2f’(x) = 5sin3x应输入为 - 'D2y + 2Dy = 5
    sin(3x)’
    下面来看一个一阶微分方程的简单例子:y’= 5y。 s = dsolve('Dy = 5
    y’)
    MATLAB执行代码并返回以下结果 - s =
    C2exp(5t)
    Shell 再来一个二阶微分方程的例子:y“-y = 0,y(0)= -1,y’(0)= 2。 dsolve(‘D2y - y = 0’,‘y(0) = -1’,‘Dy(0) = 2’)
    MATLAB MATLAB执行代码并返回以下结果 - ans =
    exp(t)/2 - (3*exp(-t))/2@TOC

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目 Value
    电脑 $1600
    手机 $12
    导管 $1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列 第二列 第三列
    第一列文本居中 第二列文本居右 第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPE ASCII HTML
    Single backticks 'Isn't this fun?' ‘Isn’t this fun?’
    Quotes "Isn't this fun?" “Isn’t this fun?”
    Dashes -- is en-dash, --- is em-dash – is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to-HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ(n)=(n1)!nN\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

    Γ(z)=0tz1etdt . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06Mon 13Mon 20已完成 进行中 计划一 计划二 现有任务Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三李四王五你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!李四想了很长时间,文字太长了不适合放在一行.打量着王五...很好... 王五, 你怎么样?张三李四王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0开始我的操作确认?结束yesno
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 这些只是一些快速而肮脏的建议 . 希望有人会发现它们有用!1. Do you have a symbolic ... )如果您具有符号函数且无法通过分析计算导数,则可以始终在一组点上评估函数,并使用此页面上列出的其他方法来评估导数 ....

    这些只是一些快速而肮脏的建议 . 希望有人会发现它们有用!

    1. Do you have a symbolic function or a set of points?

    如果您有符号功能,您可以分析计算衍生物 . (很可能,如果那么容易的话,你会做到这一点,你不会在这里寻找替代品 . )

    如果您具有符号函数且无法通过分析计算导数,则可以始终在一组点上评估函数,并使用此页面上列出的其他方法来评估导数 .

    在大多数情况下,你有一组点(xi,fi),并且必须使用以下方法之一....

    2. Is your grid evenly or unevenly spaced?

    如果网格间隔均匀,您可能需要使用有限差分格式(请参阅维基百科文章here或here),除非您使用的是周期性边界条件(见下文) . Here是在解决网格上的常微分方程的背景下对有限差分方法的一个不错的介绍(特别参见幻灯片9-14) . 这些方法通常在计算上有效,易于实现,并且该方法的误差可以简单地估计为用于导出它的泰勒展开的截断误差 .

    如果您的网格间距不均匀,您仍然可以使用有限差分格式,但表达式更加困难,并且精度随着网格的统一程度而变化很大 . 如果您的网格非常不均匀,您可能需要使用较大的模板尺寸(更多相邻点)来计算给定的导数点 . 人们经常构造插值多项式(通常是Lagrange polynomial)并区分该多项式来计算导数 . 例如,参见this StackExchange问题 . 使用这些方法通常很难估计错误(尽管有些人试图这样做:here和here) . Fornberg's method在这些情况下通常非常有用....

    必须注意您域名的边界,因为模板通常涉及域外的点 . 有些人引入"ghost points"或将边界条件与不同阶数的导数组合以消除这些并简化模板 . 另一种方法是使用右侧或左侧有限差分方法 .

    Here's一种优秀的有限差分方法,包括低阶的中心,右侧和左侧方案 . 我在工作站附近打印出这个,因为我发现它非常有用 .

    3. Is your domain periodic? Can you assume periodic boundary conditions?

    如果您的域是周期性的,您可以使用傅里叶谱方法计算导数到非常高的阶数 . 这种技术在某种程度上牺牲了性能以获得高精度 . 实际上,如果您使用的是N点,那么您对导数的估计大约是第N阶的准确度 . 有关更多信息,请参阅(例如)this WikiBook .

    傅立叶方法通常使用快速傅立叶变换(FFT)算法来实现大致O(N log(N))性能,而不是天然实现的离散傅立叶变换(DFT)可能采用的O(N ^ 2)算法 .

    如果您的函数和域不是周期性的,则不应使用傅里叶谱方法 . 如果您尝试将其与非周期性函数一起使用,则会出现大的错误和不良的"ringing"现象 .

    计算任何阶数的导数需要1)从网格空间到光谱空间的变换(O(N log(N))),2)傅里叶系数乘以其光谱波数(O(N)),和2)从光谱空间到网格空间的逆变换(再次为O(N log(N))) .

    在将傅里叶系数乘以其光谱波数时必须小心 . FFT算法的每个实现似乎都有自己的频谱模式和归一化参数的排序 . 例如,请参阅Math StackExchange上this question的答案,以获取有关在MATLAB中执行此操作的说明 .

    4. What level of accuracy are you looking for? Do you need to compute the derivatives within a given tolerance?

    出于许多目的,一阶或二阶有限差分方案可能就足够了 . 为了获得更高的精度,您可以使用更高阶的泰勒展开式,从而降低高阶项 .

    如果需要计算给定容差范围内的导数,可能需要查看具有所需错误的高阶方案 .

    通常,减少误差的最佳方法是在有限差分方案中减少网格间距,但这并非总是可行的 .

    请注意,高阶有限差分格式几乎总是需要更大的模板尺寸(更多的相邻点) . 这可能会导致边界问题 . (参见上面关于鬼点的讨论 . )

    5. Does it matter to you that your derivative is evaluated on the same points as your function is defined?

    MATLAB提供 diff 函数来计算相邻数组元素之间的差异 . 这可以用于通过一阶前向差分(或前向有限差分)方案来计算近似导数,但估计是低阶估计 . 如MATLAB的 diff (link)文档中所述,如果输入长度为N的数组,它将返回一个长度为N-1的数组 . 当您在N点上使用此方法估计导数时,您只能估算出N-1点的导数 . (请注意,如果它们按升序排序,则可以在不均匀网格上使用 . )

    在大多数情况下,我们希望在所有点评估衍生物,这意味着我们想要使用除 diff 方法之外的其他东西 .

    6. Do you need to calculate multiple orders of derivatives?

    可以 Build 一个方程组,其中网格点函数值和这些点上的一阶和二阶导数都相互依赖 . 这可以通过像往常一样在相邻点处组合泰勒展开来找到,但是保持导数项而不是将它们抵消,并将它们与相邻点的那些连接在一起 . 这些方程式可以通过线性代数求解,不仅可以得到一阶导数,也可以得到第二个导数(或者更高阶,如果设置得当) . 我相信这些被称为组合有限差分方案,它们通常与紧致有限差分方案结合使用,这将在下面讨论 .

    紧凑有限差分格式(link) . 在这些方案中, Build 一个设计矩阵并通过矩阵求解同时计算所有点的导数 . 它们被称为"compact"因为它们通常被设计为需要比具有可比精度的普通有限差分方案更少的模板点 . 因为它们涉及将所有点连接在一起的矩阵方程,确定据说紧凑有限差分方案具有"spectral-like resolution"(例如Lele's 1992 paper - 优秀!),这意味着它们通过依赖于所有节点值来模拟频谱方案,并且因此,它们在所有长度尺度上保持准确性 . 相反,典型的有限差分方法仅局部精确(例如,点#13处的导数通常不依赖于点#200处的函数值) .

    目前的研究领域是如何在紧凑的模板中最好地解决多种衍生物 . 这种研究,组合,紧凑的有限差分方法的结果是强大的和广泛适用的,尽管许多研究人员倾向于针对特定需求(性能,准确性,稳定性或诸如流体动力学的特定研究领域)调整它们 .

    Ready-to-Go Routines

    如上所述,可以使用 diff 函数(文档link)来计算相邻数组元素之间的粗略导数 .

    MATLAB的 gradient 例程(link到文档)是一个很好的选择,用于许多目的 . 它实现了二阶中心差分方案 . 它具有计算多维导数并支持任意网格间距的优点 . (感谢@thewaywewalk指出这个明显的遗漏!)

    我用Fornberg的方法(见上文)开发了一个小程序( nderiv_fornberg )来计算任意网格间距的一维的有限差分 . 我觉得它很容易使用 . 它在边界处使用6个点的侧面模板,在内部使用中心的5点模板 . 它可以在MATLAB File Exchange here中找到 .

    Conclusion

    数值微分领域非常多样化 . 对于上面列出的每种方法,有许多变体具有各自的优点和缺点 . 这篇文章几乎不是数值微分的完整处理 .

    每个应用程序都不同 . 希望这篇文章能够为感兴趣的读者提供有组织的考虑因素和资源清单,以便选择适合自己需要的方法 .

    可以使用特定于MATLAB的代码片段和示例来改进此社区wiki .

    展开全文
  • 一些matlab的基础资料-Matlab 与 一元函数导数和微分.doc 这些是我在学习期间自己做的一些笔记,简洁明了,分享给大家,希望对刚学习的朋友有所帮助,主要是高等数学内容 逻辑运算:matlab编程基础の基础....
  • Matlat计算符号导数

    2020-09-19 01:40:35
    MATLAB提供用于计算符号导数的diff命令。 如下;...要计算函数f的较高导数,可使用diff(f,n); 操作的命令和文本如下; > syms t > f=3*t^2 + 2*t^(-2); > diff(f) ans = 6*t-4/t^3 ...

    MATLAB提供用于计算符号导数的diff命令。

    如下;指定t为变量,输入一个函数表达式,使用diff(f)求其导数;

    再计算一个;

    输入一些常用函数,查看其导数;例如sin(x)的导数是cos(x),cos(x)的导数是-sin(x),lnx的导数是1/x;

    如下图;

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

    操作的命令和文本如下;

    > syms t
    > f=3*t^2 + 2*t^(-2);
    > diff(f)
     
    ans =
     
    6*t-4/t^3
     
    > syms x
    > f=(x+2)*(x^2+3)
     
    f =
     
    (x+2)*(x^2+3)
     
    > der1=diff(f)
     
    der1 =
     
    x^2+3+2*(x+2)*x
     
    > diff(sin(x))
     
    ans =
     
    cos(x)
     
    > diff(cos(x))
     
    ans =
     
    -sin(x)
     
    > diff(log(x))
     
    ans =
     
    1/x
     

    展开全文
  • 应用MATLAB对隐函数求导 数学实验2 MATLAB导数计算中的应用 在MATLAB里由命令函数diff( )来完成求导运算其具体形式为 diff(function,variable,n) 参数function为需要进行求导运算的函数variable为求导运算的独立...
  • 在上一篇文章中,我们介绍了 Matlab 中 FFT 计算的表达式和基本操作。其中最值得注意的就是「指标的习惯」我们也介绍了 FFT 可以用来帮助我们快速计算「傅里叶系数的数值近似」不过这部分内容讲的不够详细,因此本文...
  • \(y=sin(x)\),\(y\)是x的函数,同时\(x\)是关于t的函数,即为\(x(t)\),很多时候\(x(t)\)的具体表达式是未知的,这时该如何用matlab符号求\(y\)关于\(t\)的导数呢? 先来看\(x(t)​\)表达式已知时matlab代码: ...
  • 计算导数 g=diff(f,v): 求符号表达式 f 关于 v 的导数 g=diff(f):求符号表达式 f 关于默认变量的导数 g=diff(f,v,n):求 f 关于 v 的 n 阶导数 计算积分 符号求和 其他运算 反函数 finverse(f,
  • matlab计算数值求导方面有很多函数。下面我来不用这些函数,介绍简单的函数求一阶导数二阶导数的差分方法以及其MATLAB实现。 工具/原料 matlab软件 一组数据,程序中已经准备好了 方法/步骤 求解...
  • Matlab 与 一元函数导数和微分.doc Matlab 于 多元微、积分.doc Matlab 和 不定积分与定积分.doc matlab 各种点滴知识.doc ...
  • 在上一篇文章中,我们介绍了 Matlab 中 FFT 计算的表达式和基本操作。其中最值得注意的就是「指标的习惯」我们也介绍了 FFT 可以用来帮助我们快速计算「傅里叶系数的数值近似」不过这部分内容讲的不够详细,因此本文...
  • ——鲁迅《拿来主义》变尺度法如果说我们想要在距离极值点比较远的起点处,像最速下降法那样小计算量且速度不算太慢迭代,在距离极值点比较近时像牛顿法那样快速收敛,该怎么办呢?让我们回顾一下这两种方法的迭代...
  • 考研数学中微积分重点内容:一、多元函数(主要是二元、三元)的偏导数和全微分概念二、偏导数和全微分的计算,尤其是求复合函数的二阶偏导数及隐函数的偏导数三、方向导数和梯度(只对数学一要求)四、多元函数微分在...
  • 4.4数值求导与积分在数学...1.导数MATLAB中,diff函数被用来计算数值差分或者符号导数。本小节只介绍diff函数如何用来计算差分,符号导数计算将在下一章介绍。diff函数的调用语法如下。(1)Y = diff(X):求X相...
  • MATLAB函数

    2019-03-14 19:59:41
    matlab中subs()是符号计算函数,表示将符号表达式中的某些符号变量替换为指定的新的变量,常用调用方式为: subs(S,OLD,NEW) 表示将符号表达式S中的符号变量OLD替换为新的值NEW。 diff函数 matlab求导命令diff调用...
  • matlab fminsearch函数翻译

    千次阅读 2018-03-26 15:36:11
    fminsearch使用无导数计算无约束的多变量函数的最小值全页折叠非线性规划求解器。搜索由以下公式指定的问题的最小值:minxf(x)f(x) 是返回标量的函数,x 是向量或矩阵。语法x = fminsearch(fun,x0)x = ...
  • 多项式的数值计算(1)单个x对应的y值,一段区间的x对应的一段区间的y值,一段区间的x对应的一段区间的y的图像(2)多项式的导数,多项式的导数相关问题。(3)多项式的积分,多项式的积分相关问题。一、求x对应的y...
  • Matlab中符号计算函数

    千次阅读 2016-11-07 16:48:55
    MATLAB数值计算中常用的符号运算有微积分运算 diff是求微分最常用的函数,常用的格式是:diff(f,x,n),表示f关于x求n阶导数。 int是求积分最常用的函数,常用的格式是:int(f,r,x0,x1),f为要积分的表达式,r为积分...
  • 参考资料《精通MATLAB最优化计算(第二版)》数值实现Matlab 2019a目录石中居士:最优化计算Matlab实现——目录​zhuanlan.zhihu.com使用导数计算的间接法使用导数的无约束多维极值算法,它们都需要用到目标函数的...
  • 展开全部MATLAB中没有直接提供求数值导数函数,只能通32313133353236313431303231363533e78988e69d8331333366306532过差分估算。DX=diff(X) 计算向量X的向前差分,DX(i)=X(i+1)-X(i),0t=[0:0.04:1.48];y=[7.86 ...
  • 摘要:通过运用数学软件,按照中学课程中导数求解的思路,简便实现阿基米德螺线切线的计算,并对验证结果进行分析得出结论,为拓展中学数学教学方法提供参考。关键词:阿基米德螺线 导数 数学教学 Mathematica 交互...
  • 常见符号运算 ...函数展开 expand(f) 多项式展开 >> syms x; f=(x+1)^6; >> expand(f) 三角函数展开 >> syms x y; f=sin(x+y); >> expand(f) 合并同类项 collect(f,v): 按指定变量
  • 计算f(x)当x趋向于a的极限 limit(f,x,a,'right’) 计算右极限 limit(f,x,a,'left’) 计算左极限 2.求导数 diff(s,‘v’) 求s对自变量v的1阶导数 diff(s,‘v’,n) 求s对自变量v的n阶导数 3.求积分 s=int(expr,var) 以...
  • “牛顿方法”函数使用牛顿方法找到一个可微的单变量函数的根,给定该函数导数和一个初始猜测。公差和最大迭代次数也可以指定为可选输入。此函数无意替代MATLAB的“ fzero”,后者使用了二等分,割线和反向二次插值...
  • void test2()//计算倒数 { CMatlabEngine eng; eng.OpenEngine(); char tmp[200];//表达式 char tmp1[200]; mxWrap df;//导数表达式 mxWrap val;//原函数值 mxWrap dfval;//导数值 xDouble vx0;...
  • 含有自变量、未知的一元函数及其导数的方程称为常微分方程。一般形式为: 它的求解就是寻找一个能够满足该微分方程的函数。 方程中函数最高阶导数的阶数称为常微分方程的阶数。阶常微分方程通解一般含有个待定...
  • diff 求导数 limit 求极限 int 计算积分 jacobian Jacobian 矩阵 symsum 符号序列的求和 trylor Trylor 级数 22.2 线性代数(Linear Algebra) det 行列式的值 diag 创建对角阵,抽取对角向量 ...
  • 参考资料《精通MATLAB最优化计算(第二版)》编程工具Matlab 2019a目录石中居士:最优化计算Matlab实现——目录​zhuanlan.zhihu.com共轭梯度法原理共轭梯度法是利用目标函数梯度逐步产生共轭方向作为线搜索方向的...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 152
精华内容 60
关键字:

matlab计算函数导数

matlab 订阅