我这里有一些复杂的代码,这些代码并不容易理解,但它代表了我正在使用的大量代码的简化。我是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
答案 0 :(得分:2)
保留尽可能多的代码,只需进行一些更改即可:
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 *)
If
语句再次被外部化,就像上一个问题一样。
所有定义都是使用SetDelayed
(:=
)进行的,这是一种良好的做法。
T - 10
中的假定错误rules
已更正为T -> 10
请注意,不再需要ReplaceRepeated
(//.
),并且更改为/.
我们仍然有一个荒谬的规则a -> 1
,但它不会导致失败。