0

ここに、わかりにくく、簡単に理解できない複雑なコードがありますが、これは、私が使用しているコードのより大きな本体を単純化したものです。私は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_, 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
4

1 に答える 1

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 *)
  1. If最後の問題のように、ステートメントは再び外部化されます。

  2. すべての定義はSetDelayed( :=) で作成されます。

  3. あなたの推定エラーはに修正さT - 10れますrulesT -> 10

ReplaceRepeatedここでも( //.) は不要であり、次のように変更されていることに注意してください。/.

無意味なルールa -> 1がまだありますが、失敗はしません。

于 2011-05-25T08:27:10.083 に答える