我在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"只是最后一个值.我需要数百个.对于每个随机世代,我需要一个输出.
提前致谢
你要做的第一件事就是@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
直到您可以在内存中构建至少一个您想要编写的整个输出的小示例.然后写一个文件一气呵成用Save
或Export
或其他高层次的I/O功能之一.
完成后,编辑代码并解释您要执行的操作,我和其他SOers将尝试进一步提供帮助.不幸的是,现在,你的代码是非Mathematica -al,我无法搞清楚.