自动化数学程序:我需要工业结果,我得到一个

0 wolfram-mathematica

我在mathematica中有以下简单的代码,这是我想要的单个输出.但我希望得到数百或数千.我能怎么做?

Clear["Global`*"]


k = 2; Put["phiout"]; Put["omegadiffout"];

Random[NormalDistribution[0, 0.1]];

For[i = 1, i < 31,
 rnd[i] = Random[NormalDistribution[0, 0.1]]; i++]

Table[rnd[i], {i, 1, 30}]

For[i = 1, i < 30,
 rnddf[i] = rnd[i + 1] - rnd[i]; i++
 ]

diffomega = Table [rnddf[i], {i, 1, 29}];


Table[
  Table [rnddf[i], {i, 1, 29}], {j, 1, 100}];

PutAppend[Table[
  diffomega, {j, 1, 100}] , "diffomega"]


eqs0 = Table  [
   k*phi[i + 1] + k*phi[i - 1] - 2*k*phi[i] - rnddf[i] == 0, {i, 1, 
    28}];

eqs1 = eqs0 /. {phi[0] -> phi[30], phi[31] -> phi[1]};

Sum[phi[i], {i, 1, 29}];

eqs2 = Append[eqs1, - phi[1] - phi[27] - 3 phi[29] == 0];

eqs3 = eqs2 /. {phi[30] -> -Sum[phi[i], {i, 1, 29}]};

vars = Table  [phi[i], {i, 1, 29}];

eqs = NSolve[eqs3, vars];

PutAppend[diffomega, eqs , "phiout"]
Run Code Online (Sandbox Code Playgroud)

这个文件"phiout"和"omegadiffout"只是最后一个值.我需要数百个.对于每个随机世代,我需要一个输出.

提前致谢

Hig*_*ark 6

你要做的第一件事就是@Paulo,整理你的Mathematica,这样你和我们都可以看到树木.例如,您的第8个声明:

Table[
  Table [rnddf[i], {i, 1, 29}], {j, 1, 100}];
Run Code Online (Sandbox Code Playgroud)

制作一个大表,但该表未分配给变量或以任何其他方式使用.似乎还有其他语句,其结果也没有使用.

接下来你应该放弃你的For循环并使用Mathematica习语 - 他们更清楚我们经常使用Mathematica来理解,更容易编写,也可能更高效.你的陈述

For[i = 1, i < 31,
 rnd[i] = Random[NormalDistribution[0, 0.1]]; i++]

Table[rnd[i], {i, 1, 30}]

For[i = 1, i < 30,
 rnddf[i] = rnd[i + 1] - rnd[i]; i++
 ]

diffomega = Table [rnddf[i], {i, 1, 29}];
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,可以替换为:

diffomega = Differences[RandomReal[NormalDistribution[0,0.1],{30}]];
Run Code Online (Sandbox Code Playgroud)

永远记住,如果你在Mathematica中编写循环,你可能犯了一个错误.您应该做的下一个更改是停止使用Put,PutAppend直到您可以在内存中构建至少一个您想要编写的整个输出的小示例.然后写一个文件一气呵成用SaveExport或其他高层次的I/O功能之一.

完成后,编辑代码并解释您要执行的操作,我和其他SOers将尝试进一步提供帮助.不幸的是,现在,你的代码是非Mathematica -al,我无法搞清楚.