小编Pat*_*ill的帖子

是什么造成了这个奇怪的Mathematica结果?

我遇到了Mathematica 8中的一个错误.我在网上找不到任何与之相关的内容,但我承认我不确定要搜索什么.

如果我运行此声明:

0.05 + .10 /. {0.15 -> "pass"}
1.04 + .10 /. {1.14 -> "pass"}
1.05 + .10 /. {1.15 -> "pass"}
1.15 /. {1.15 -> "pass"}
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

pass

pass

1.15

pass
Run Code Online (Sandbox Code Playgroud)

我只是忽略了什么?

编辑:阅读下面的有用讨论后,我更改了我的调度表以使用Which语句:

f[x_] := Which[x == 1.05, -1.709847, x == 1.10, -1.373823, 
  x == 1.15, -1.119214, x == 1.20, -0.9160143, x == 1.25, -0.7470223, x == 1.30, -0.6015966]
Run Code Online (Sandbox Code Playgroud)

这似乎可以解决问题.

wolfram-mathematica

4
推荐指数
2
解决办法
662
查看次数

用于为DiscreteShift设置upvalue的模式

我想为DiscreteShift设置一个upvalue,它可以改变被提升为幂的规则:

Unprotect[DiscreteShift];
DiscreteShift /: Power[DiscreteShift[f_, i_], r_] := DiscreteShift[f, {i, r}];
Protect[DiscreteShift];
Power[DiscreteShift[f[n], n], 2] === DiscreteShift[f[n], {n, 2}]
Run Code Online (Sandbox Code Playgroud)

但我收到这些错误消息:

Rule::rhs: "Pattern i_ appears on the right-hand side of rule i_->1+i_. "
TagSetDelayed::tagnf: "Tag DiscreteShift not found in (1+Pattern[f_,_])^r_."
Run Code Online (Sandbox Code Playgroud)

它似乎不喜欢DiscreteShift参数的模式,但我也无法在那里工作.写这个的正确方法是什么?

编辑: 我会尽力澄清我的目标.这是我想用数学方法做的事情:

(N + n) f(n) = N f(n) + n f(n)
             = f(n+1) + n f(n)

(N + n)^2 f(n) = (N^2 + Nn + nN + n^2) f(n)
               = N^2 f(n) + Nn f(n) + nN f(n) + …
Run Code Online (Sandbox Code Playgroud)

design-patterns wolfram-mathematica

3
推荐指数
1
解决办法
242
查看次数