Wolfram mathematica 具有多个IF[]条件的函数

Wolfram mathematica 具有多个IF[]条件的函数,wolfram-mathematica,mathematical-expressions,Wolfram Mathematica,Mathematical Expressions,我这里有一段复杂的代码,既不漂亮也不容易理解,但它代表了我正在使用的更大代码体的简化。我是一个数学新手,但它仍然不能解决我的问题。下面是代码,我希望您可以跟随并假设我正试图让它做什么。感谢编程高手们的帮助 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

我这里有一段复杂的代码,既不漂亮也不容易理解,但它代表了我正在使用的更大代码体的简化。我是一个数学新手,但它仍然不能解决我的问题。下面是代码,我希望您可以跟随并假设我正试图让它做什么。感谢编程高手们的帮助

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
a[b_,c_]=-3*b+2*c+d+e+f;
g[b,c]:=如果[a[b,c]<0,-3*a[b,c],a[b,c];
h[T_,b_,c_]=(T/g[b,c]);
i[h,T,b,c]:=如果[h[T,b,c]>0,4*h[T,b,c],-5*h[T,b,c];
j[b_,c_]:=如果[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]
规则={a->1,b->2,c->3,d->4,e->5,f->6,T->10};
XYZ[h,T,i,g,j,b,c]/。规则

保留尽可能多的代码,只需几处更改即可工作:

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 *)
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]
规则={a->1,b->2,c->3,d->4,e->5,f->6,T->10};
XYZ[h,T,i,g,j,b,c]/。规则
(*Out=700*)
  • If
    语句再次外部化,如上一个问题

  • 作为一种良好做法,所有定义均使用
    SetDelayed
    :=
    )进行定义

  • 您的
    规则中假定的错误
    T-10
    被更正为
    T->10

  • 请注意,再次
    ReplaceRepeated
    /.
    )是不需要的,并且已更改为
    /.


    我们仍然有一条毫无意义的规则
    a->1
    ,但它不会导致失败。

    问题到底是什么?我认为您应该解释您试图执行的操作以及您认为错误所在的位置。此外,当您参考时,参考它是明智的。目标是在替换所有变量后获得XYZ的数字输出,但是上面的代码不起作用。
    规则
    列表的最后一项,您的意思是要使用
    T->10
    ?第一条规则a->1也没有意义,因为您还使用该名称定义了一个函数,其头部现在将替换为1。摆脱该规则后,表达式的计算结果为数值。谢谢Wizard先生!这帮了大忙!我现在知道如何使用#符号了。@ZB18749我很高兴这有帮助。我建议略读以了解Mathematica。此外,如果您尚未执行此操作,则可以选择名称或符号,然后按F1键以获取有关的详细信息。例如,如果您在代码中选择
    &
    ,然后按F1键,其中一个结果是
    函数
    @ZB18749,作为新的Mathematica用户,即使您的代码工作正常,也不太可能是最优的。在某个时候,你可能想发布一个有效的应用程序,并描述它对这个姐妹网站的作用:以获得对你的方法的反馈。Wizard,在阅读了Leonid的书的第一章之后,我确信Mathematica是一个比我最初意识到的更强大的工具,同时保持了一种相当简单的编码语言。关于您编写的上述代码,我还有最后一个问题。我想把
    b->1-c
    替换成
    rules={b->1-c,c->3,d->4,e->5,f->6,T->10}
    结果输出不是数字。有没有一种简单的方法可以使XYZ[h,T,i,g,j,b,c]中的变量
    b
    等于'1-c',并且仍然对给定的'c'值求值?再次感谢