如何解决具有多个IF []条件的Mathematica函数
| 我这里有一些复杂的代码,虽然看起来既不漂亮也不容易,但是却简化了我正在使用的大量代码。我是Mathematica的新手,已经从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_,c_] := If[h[T,b,c] > 0,4*h[T,-5*h[T,c]];
j[b_,5*a[b,20*a[b,c]];
XYZ[h_,i_,g_,j_,c_] = T*i[h,T,c]*g[b,c] + j[b,c]
rules = {a -> 1,b -> 2,c -> 3,d -> 4,e -> 5,f -> 6,T -> 10};
XYZ[h,i,g,j,c] //. rules
解决方法
保留尽可能多的代码,只需做一些更改即可:
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_,c_] := If[# > 0,4 #,-5 #] & @ h[T,b,c]
j[b_,5 #,20 #] & @ a[b,c]
XYZ[h_,i_,g_,j_,c_] := T*i[h,T,c]*g[b,c] + j[b,c]
rules = {a -> 1,b -> 2,c -> 3,d -> 4,e -> 5,f -> 6,T -> 10};
XYZ[h,i,g,j,c] /. rules
(* Out= 700 *)
像上一个问题一样,再次将“ 2”个语句外部化。
根据惯例,所有定义均以SetDelayed
(:=
)进行。
rules
中的假定误差T - 10
已更正为T -> 10
注意,再次不需要ReplaceRepeated
(//.
),并将其更改为/.
我们仍然有一个愚蠢的规则“ 11”,但它不会导致失败。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。