【问题标题】:Mathematica function with multiple IF[] conditionals具有多个 IF[] 条件的 Mathematica 函数
【发布时间】:2011-05-25 16:27:10
【问题描述】:

我这里有一段复杂的代码,既不漂亮也不容易理解,但它代表了我正在使用的大量代码的简化。我是 Mathematica 新手和have already received some help on this issue from stackoverflow,但它仍然没有解决我的问题。这是我希望你能跟随的代码,并假设我试图让它做。感谢编程高手的帮助。

a[b_, c_] = -3*b + 2*c + d + e + f;

g[b_, c_] := If[a[b, c] < 0, -3*a[b, c], a[b, c]];

h[T_, b_, c_] = (T/g[b, c]);

i[h_, T_, b_, c_] := If[h[T, b, c] > 0, 4*h[T, b, c], -5*h[T, b, c]];

j[b_, c_] := If[a[b, c] < 0, 5*a[b, c], 20*a[b, c]];

XYZ[h_, T_, i_, g_, j_, b_, c_] = T*i[h, T, b, c]*g[b, c] + j[b, c]

rules = {a -> 1, b -> 2, c -> 3, d -> 4, e -> 5, f -> 6, T -> 10};

XYZ[h, T, i, g, j, b, c] //. rules

【问题讨论】:

  • 问题到底是什么?我认为你应该解释你正在尝试做什么以及你认为错误在哪里。
  • 另外,当你提到previous question时,参考它是明智的。
  • 目标是在替换所有变量后得到XYZ的数字输出,但是上面的代码不起作用。
  • rules 列表的最后一个条目,您的意思是 T -&gt; 10
  • 第一个规则 a->1 也没有意义,因为您还定义了一个具有该名称的函数,其头部现在将被 1 替换。摆脱该规则后,表达式计算为数值。

标签: wolfram-mathematica mathematical-expressions


【解决方案1】:

尽可能多地保留您的代码,只需进行一些更改即可:

a[b_, c_] := -3*b + 2*c + d + e + f;

g[b_, c_] := If[# < 0, -3 #, #] & @ a[b, c]

h[T_, b_, c_] := T / g[b, c]

i[h_, T_, b_, c_] := If[# > 0, 4 #, -5 #] & @ h[T, b, c]

j[b_, c_] := If[# < 0, 5 #, 20 #] & @ a[b, c]

XYZ[h_, T_, i_, g_, j_, b_, c_] := T*i[h, T, b, c]*g[b, c] + j[b, c]

rules = {a -> 1, b -> 2, c -> 3, d -> 4, e -> 5, f -> 6, T -> 10};

XYZ[h, T, i, g, j, b, c] /. rules

(* Out= 700 *)
  1. If 语句再次被外部化,就像上一个问题一样。

  2. 所有定义均使用SetDelayed (:=) 作为良好做法。

  3. rules 中的假定错误 T - 10 已更正为 T -&gt; 10

再次注意ReplaceRepeated (//.) 不再需要,改为/.

我们仍然有一个荒谬的规则a -&gt; 1,但它不会导致失败。

【讨论】:

  • 谢谢巫师先生!这帮助很大!我现在知道如何使用 # 符号了。​​
  • @ZB18749 我很高兴有帮助。我建议浏览 Leonid Shifrin's online book 以了解 Mathematica。此外,如果还没有这样做,您可以选择一个名称或符号,然后按 F1 以获取更多信息。例如,如果在代码中选择&amp;,然后按F1,则其中一个结果是Function
  • @ZB18749,作为一个新的 Mathematica 用户,即使您的代码有效,也不太可能是最佳的。在某些时候,您可能希望将一个有效的应用程序连同它的功能描述一起发布到这个姊妹站点:codereview.stackexchange.com 以获得有关您的方法的反馈。
  • 先生。向导,在阅读了 Leonid 书的第一章后,我确信 Mathematica 是一个比我最初意识到的更强大的工具,同时保持了一种相当简单的编码语言。
  • 关于您编写​​的上述有效代码,我有最后一个也是最后一个问题。我想将b-&gt;1-c 替换为rules = {b -&gt; 1 - c, c -&gt; 3, d -&gt; 4, e -&gt; 5, f -&gt; 6, T -&gt; 10};,但是当我评估XYZ[h, T, i, g, j, b, c] /. rules 时,结果输出不是数字。有没有一种简单的方法可以使 XYZ[h, T, i, g, j, b, c] 中的变量 b 等于 '1-c' 并且仍然让它评估给定的 'c' 值?再次感谢
猜你喜欢
  • 2020-10-17
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2013-12-16
  • 2014-10-20
  • 2019-09-21
  • 1970-01-01
相关资源
最近更新 更多