• Mathematica对函数表达式求导并设置为新的自定义函数


    自定义函数

    自定义函数需要注意亮点
    1、最好使用 := 而非 =
    2、定义时等式左端函数变量有下划线,被称为“空白”

    Wolfram 系统变换规则最强有力的方面或许是它们不仅能用于表达式,而且能用于模式(patterns). 模式是一个诸如f[t_] 这样的包含下划线的表达式. 下划线可以代表任何表达式. 这样,对 f[t_] 的变换规则将变换具有任何 自变量的函数 f. 注意,作为对照,对不带有下划线的 f[x] 的变换规则只变换表达式 f[x],而对诸如 f[y] 等表达式没有任何作用.
    当用户定义一个函数,例如 f[t_]:=t^2 时,所做的事情是告诉 Wolfram 系统,在任何可能的时候,自动使用变换规则f[t_]->t^2.
    (引自MMA教程“函数的变换规则”)

    定义函数后可以对变量赋值,也可以作图

    f2[t_] := t^3
    f2[3]
    f2[a]
    Plot[f2[t], {t, 0, 3}]
    
    • 1
    • 2
    • 3
    • 4

    对函数表达式求导

    这个操作相对简单,直接用 D[f,x]D[f,{x,n}],分别代表求偏导数和高阶导数。
    下面给出例子

    f[x_] := x^5 + 6 x
    D[x^5 + 6 x, x]
    D[f[x], x]
    D[f[t], t]
    
    • 1
    • 2
    • 3
    • 4

    运行结果为
    在这里插入图片描述

    将求导结果存为新的自定义函数

    有的时候希望能把求导的结果存为一个新的自定义函数,以方便后期使用。
    一个直观但是错误的方法是
    在这里插入图片描述

    从上图看出,g[t]的结果似乎没问题,但g[3]的结果就不太对了。
    这里的原因在于 给x赋值时原函数f里的x也被赋值了
    查看 f 和 g 可以发现g并不是一个独立的函数,而是要先把变量代入f,然后再求导。所以对于g[2]而言,就相当于求 D[f(2),2],这就不合理了。
    下面提供了4个方案,其中前两个方案感觉最优。

    解决方案1

    在自定义函数时一般习惯用 :=,而此处恰恰改用 = 就能解决问题。即

    f[x_] := x^5 + 6 x
    g[x_] = D[f[x], x]
    g[t]
    g[2]
    
    • 1
    • 2
    • 3
    • 4

    结果如下
    在这里插入图片描述

    解决方案2

    使用Block(块)

    Block[{x,y,...},expr] ,意为指定用符号 x、y、… 的局部值计算 expr.

    f[x_] := x^5 + 6 x
    g[x_] = Block[{t}, t = x; D[f[t], t]];   (*注意这里用的是=*)
    g[t]
    g[2]
    
    • 1
    • 2
    • 3
    • 4

    结果如下
    在这里插入图片描述

    解决方案3

    与上一解决方案类似,注意这里用的是 :=

    f[x_] := x^5 + 6 x
    g[x_] := Block[{result}, result = D[f[t], t] /. {t -> x}; 
       Return[result]];
    g[t]
    g[2]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    解决方案4

    既然问题的原因在于x的赋值上,那么就改变变量名。
    但这样的缺点就在于函数多了那自变量名也多了。

    f[x_] := x^5 + 6 x
    g[xx_] := D[f[x], x] /. x -> xx
    g[t]
    g[2]
    
    • 1
    • 2
    • 3
    • 4

    结果如下
    在这里插入图片描述

  • 相关阅读:
    Spring Boot与Reactive MongoDB集成
    2024年2月的TIOBE指数,go语言排名第8,JAVA趋势下降
    高可用架构的设计方法
    Halcon 模板匹配实战代码(一)
    ElasticSearch 5.6.3 自定义封装API接口
    stm32单片机的智能交通灯设计
    Pandas数据分析24——pandas时间重采样聚合
    Java回顾-枚举类
    【云原生】Kubernetes操作精讲
    【OFDM】多径信道下OFDM通信系统误码率仿真附matlab代码
  • 原文地址:https://blog.csdn.net/gsgbgxp/article/details/127412355