Вычислить символьное выражение в Mathematica для диапазонов переменных

После некоторых символьных вычислений у меня есть выражение с 5 символьными переменными: expr = f(v1, v2, v3, v4, v5). Каждая переменная представляет собой диапазон значений, например:

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

Я хотел бы оценить выражение для каждой комбинации всех значений во всех переменных и взять от него среднее значение и стандартное отклонение.

Я пытался

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

Но это либо занимает вечность, либо вылетает с ошибкой памяти. Есть ли другой, более эффективный способ сделать это?


person user_185051    schedule 30.03.2016    source источник
comment
Это не сильно влияет на производительность, но вы можете заменить вложенные Table на единицу: Table[ expr, {v1,..}, {v2,..} , {v3,..}].   -  person Andrey R    schedule 01.04.2016


Ответы (2)


С тремя наборами переменных значений

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

Скажите, что ваше выражение является произведением переменных

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

потом

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

Надеюсь это поможет.

person Edmund    schedule 30.03.2016

person    schedule
comment
Вы можете избежать всех Print, поместив эти команды в новую ячейку записной книжки. - person Edmund; 30.03.2016
comment
@ Эдмунд Я упростил копирование и вставку в Mathematica. Без точки с запятой строки соединяются вместе при вставке. - person Chris Degnen; 30.03.2016