2016-03-30 8 views
1

Nach einigen symbolischen Berechnungen habe ich einen Ausdruck mit 5 symbolischen Variablen: expr = f (v1, v2, v3, v4, v5). Jede Variable ist ein Bereich von Werten, z.B .:Evaluiere symbolischen Ausdruck in Mathematica für Bereiche von Variablen

v1 = Range[1, 15, 1] 
v2 = Range[0.5, 3, 0.1] 
... 

Ich mag würde den Ausdruck für jede Kombination aller Werte in allen Variablen und nahm Mittelwert und Standardabweichung von ihm zu bewerten.

versuchte ich

exprEval = Table[Table[Table[Table[Table[expr, {v1, 1, 15, 1}], {v2, 0.5, 3, 0.1}], {v3,...}], {v4, ...}], {v5, ...}] 
exprEvalMean = Mean[Flatten[exprEval]] 

Aber dies geschieht entweder mit Speicherfehler für immer oder stürzt ab. Gibt es einen anderen, effizienteren Weg, dies zu tun?

+1

Dies hat keinen großen Einfluss auf die Leistung, aber Sie können die verschachtelten 'Table's durch eins ersetzen:' Tabelle [expr, {v1, ..}, {v2, ..}, {v3, ..} ] '. –

Antwort

1

Mit drei Sätze von Variablenwerten

v1 = Range[1, 3, 1]; 
v2 = Range[1.1, 1.5, 0.2]; 
v3 = Range[300, 400, 100]; 

Sagen Sie Ihren Ausdruck das Produkt der Variablen

f[a_, b_, c_] := a b c 

Dann

res = f[Sequence @@ #] & /@ Tuples[{v1, v2, v3}]; 
[email protected]{Mean, StandardDeviation}[res] 
(* {910., 428.348} *) 

Hoffnung, das hilft.

0
v1 = Range[1, 3, 1]; 
v2 = Range[1.1, 1.5, 0.2]; 
v3 = Range[300, 400, 100]; 

Print[out = Outer[List, v1, v2, v3]]; 

Print[avg = Mean[Flatten[out]]]; 
Print[sd = StandardDeviation[Flatten[out]]]; 
+0

Sie können alle 'Print's vermeiden, indem Sie diese Befehle in eine neue Zelle des Notebooks einfügen. – Edmund

+0

@Edmund Ich machte es einfacher für Copy & Paste in Mathematica. Ohne Semikolon verbinden sich die Linien beim Einfügen. –

Verwandte Themen