【问题标题】:how to store symbolically the derivatives in matlab如何在matlab中符号存储导数
【发布时间】:2013-01-28 21:34:33
【问题描述】:

我的问题与 Matlab 的符号数学工具箱有关。我有以下代码:

syms x x_0 u delta sigma_1
mu = sym ('mu(x)');
sigma_u = sym ('sigma(u)');
sigma = sym ('sigma(x)');
f = int (1/sigma_u, u, x_0, x);
df = subs(diff(f,x))
df_2 = subs(diff (f,x,2))
L = subs(mu*df+1/2*sigma^2*df_2)

L的结果是正确的

L =

mu(x)/sigma(x) - diff(sigma(x), x)/2

但是,为了进一步推导和简单起见,我想定义

sigma_1 = sym('diff(sigma,x)'); 

或以类似的方式获得结果

L =

mu(x)/sigma(x) - sigma_1(x)/2

基本上,我想将符号表达式 diff(sigma(x),x) 存储在一个名称下,这样 Matlab 就知道当它在表达式中得到这个结果时,发布名称 sigma_1 (x) 而不是 diff (sigma(x),x)

【问题讨论】:

  • f 是通过 Matlab 无法评估的积分来定义的;可以吗?
  • 你好。不,这不是问题,Matlab 无论如何都不能评估积分,因为函数 sigma(u) 没有明确定义。 Matlab 在应用莱布尼茨规则计算 L 方面做得很好(通过 df 和 df_2)。但是,我只想这样而不是在答案中
  • diff(sigma(x), x) 为第一个衍生词命名,例如 sigma_1,它应该代表 sigma wrt x 的一阶导数,而且我主要希望 sigma_1 始终出现在程序而不是 diff(sigma(x), x)。随后,我想类似地定义函数 sigma 的更高阶导数。谢谢
  • 如果你有输出,在任何地方替换它应该不会太难,为什么不事后简化呢?我认为你问的可能是不可能的,因为你也可以用同样的方式定义 sigma_2 并且 matlab 会丢失。

标签: matlab symbolic-math


【解决方案1】:

是的,有可能,您可以使用subs(L, 'diff(sigma(x),x)', 'sigma_1(x)')。注意要使替换起作用,subs 的第二个输入必须与您要替换的完全一样;因此它不能是 'diff(sigma, x)',它在 sigma 后面缺少 (x)

另请注意,here 是一个类似的问题,我为此提供了一个更完整的解决方案(他们在你的问题之后提出了这个问题,但我先阅读了他们的问题)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多