【问题标题】:How can I define f(x) = x/x in MATLAB (Symbolic Computation)如何在 MATLAB 中定义 f(x) = x/x(符号计算)
【发布时间】:2014-05-20 14:51:52
【问题描述】:

我尝试使用这些命令

x = sym('x');
f(x) = sym('f(x)');
f(x) = x/x;

f(x) = sym('x/x');

,但它们都产生

f(x) = 1

(是的……对于每个实数 x,包括 0)

问题是如何避免“sym”命令中的预评估, 或者有另一种方法来处理这个问题。

非常感谢!

21.05.2014 更新:

让我稍微描述一下这个问题。

考虑

f(x) = x/x

g(x) = 1

很明显fg分别是R-{0}R

sym/syms 中的自动简化可能会导致丢失一些信息。

【问题讨论】:

  • 看一下“mupad”,它是您的 matlab 许可证的一部分。 f:=x->x/x.
  • 为什么这被否决了?这是一个完全有效的问题。在symfuns 的上下文中,这种行为显然令人困惑并且可能不明显。

标签: matlab symbolic-math symbolic-computation


【解决方案1】:

@pabaldonedo 的回答很好。看来 MuPad 和 Symbolic Toolbox 的设计者做出了选择,x/x 不确定。

如果您确实希望0Inf-InfNaN 生成NaN 而不是1,那么您可以将符号变量与anonymous function 结合使用:

f = @(x)sym(x)./sym(x);
f([-Inf -1 0 1 Inf NaN])

返回

ans =

[ NaN, 1, NaN, 1, NaN, NaN]

或者,如果输入已经是符号,你可以使用这个:

f = @(x)x./x;
f(sym([-Inf -1 0 1 Inf NaN]))

【讨论】:

  • 让我稍微描述一下这个问题。考虑 f(x) = x/x 和 g(x) = 1。显然 f 和 g 的域分别是 R-{0} 和 R。如果“sym”自动简化输入,那么一些信息可能会丢失。此外 f(0) 在数学上是未定义的,而不是“不确定的形式”(我们在这里不考虑它的限制)。
【解决方案2】:

您的代码中没有预评估。 F(x) = x/x 始终为 1,即使 x = 0,Matlab 只是简化了函数的表达方式,但没有 pe-evaluation。

我认为你应该看看不确定的形式来理解为什么 x = 0, x/x = 1。看看维基百科:http://en.wikipedia.org/wiki/Indeterminate_form

【讨论】:

  • 感谢 pabaldonedo 的评论。问题是 MATLAB 在存储到 f(x) 之前简化了输入(我称之为预评估)。我不想简化。只需“按原样”存储值
  • @epsilonxe 这不适用于 symfun。它们遵循与 syms 相同的简化规则。
猜你喜欢
  • 1970-01-01
  • 2017-06-13
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多