Строки формируют список для работы - PullRequest
1 голос
/ 11 января 2012

Я использую Mathematica версии 5.2.Мне нужно разделить его на функции и сделать результат .. Я создал этого монстра:

mx = {};
arg = {};
fun = {}; 
x =. 
y =.

здесь приведены списки и аргументы

switchfunction2[y_] := Switch[y,
  1, AppendTo[fun, Cos[Random[Integer, {1, 10}]]],
  2, AppendTo[fun, Sin[Random[Integer, {1, 10}]]],
  3, AppendTo[fun, Tan[Random[Integer, {1, 10}]]],
  4, AppendTo[fun, Csc[Random[Integer, {1, 10}]]],
  5, AppendTo[fun, Sec[Random[Integer, {1, 10}]]],
  6, AppendTo[fun, Cot[Random[Integer, {1, 10}]]]
]

и случайные функции

Do[AppendTo[mx, Random[Integer, {1, 10}]], {i, 2}] 

mx[[1]] " has been chosed"
mx[[2]] "argumments "
Do[AppendTo[arg, Random[Integer, {1, 5}]], {i, mx[[2]]}] 
arg
Do[switchfunction2 /@ {arg[[i]]}, {i, mx[[2]]}]
fun

Хочу получить f[z_]:=fun[[1]]+fun[[2]]...

1 Ответ

4 голосов
/ 12 января 2012

В этом случае я бы сделал что-то вроде

mx = RandomInteger[{1, 10}, 2];
arg = RandomInteger[{1, 5}, mx[[2]]];

switch[y_] := Module[{f},
  f = Switch[y, 1, Cos, 2, Sin, 3, Tan, 4, Csc, 5, Sec, 6, Cot];
  f[RandomInteger[{1, 10}]]]

fun = switch /@ arg;

Total[fun]

Или без использования функции переключения:

mx = RandomInteger[{1, 10}, 2]
flist = RandomChoice[{Cos, Sin, Tan, Csc, Sec, Cot}, mx[[2]]];

fun = #[RandomInteger[{1, 10}]] & /@ flist;
Total[fun]

Редактировать

Вот версия, которая должна работать в Mathematica 5.2.

mx = Table[Random[Integer, {1, 10}], {2}];
arg = Table[Random[Integer, {1, 5}], {mx[[2]]}];

switch[y_] := Module[{f}, 
  f = Switch[y, 1, Cos, 2, Sin, 3, Tan, 4, Csc, 5, Sec, 6, Cot];
  f[Random[Integer, {1, 10}]]]

fun = switch /@ arg;

Total[fun]

Чтобы сделать из этого функцию, вы можете заключить все в Module, например,

f := Module[{mx, arg, switch},
  mx = Random[Integer, {1, 10}];
  arg = Table[Random[Integer, {1, 5}], {mx}];
  switch[y_] := Module[{f}, 
    f = Switch[y, 1, Cos, 2, Sin, 3, Tan, 4, Csc, 5, Sec, 6, Cot];
    f[Random[Integer, {1, 10}]]];
  Total[switch /@ arg]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...