求助:如何写才能让计算的速度最快?
mathematica吧
全部回复
仅看楼主
level 1
hscote 楼主
老师您好,请问以下算式如何写才能让计算的速度最快?
Solve[{5/8 == (
Sqrt[a + b Sqrt[m] + c Sqrt[d + e Sqrt[m]]] + Sqrt[
p + q Sqrt[m] + r Sqrt[s + t Sqrt[m]]])/2^n,
1 <= a <= 5, -1 <= b <= 1, -1 <= c <= 1,
1 <= d <= 5, -1 <= e <= 1,
1 <= p <= 5, -1 <= q <= 1, -1 <= r <= 1,
6 <= s <= 10, -1 <= t <= 1, 1 <= m <= 1, 3 <= n <= 3}, {a, b, c,
d, e, p, q, r, s, t, m, n}, Integers] // Length // AbsoluteTiming
{268.6523660, 219}
运行时间要4分多钟,假如参数调整后计算量过大,内存容易超过阈值,能否根据内存的大小 (以4G为例) 自动拆分若干区段进行连续运算,或者自动清理内存后继续运算?
2018年02月05日 10点02分 1
吧务
level 12
这种就不要用Solve了,直接循环枚举比较快
ans = Reap[
Do[If[5/8 == (Sqrt[a + b Sqrt[m] + c Sqrt[d + e Sqrt[m]]] +
Sqrt[p + q Sqrt[m] + r Sqrt[s + t Sqrt[m]]])/2^n,
Sow[{a, b, c, d, e, p, q, r, s, t, m, n}]], {a, 1, 5}, {b, -1,
1}, {c, -1, 1}, {d, 1, 5}, {e, -1, 1}, {p, 1, 5}, {q, -1,
1}, {r, -1, 1}, {s, 6, 10}, {t, -1, 1}, {m, 1, 1}, {n, 3, 3}]][[
2, 1]];
在我这里比Solve快10倍左右,而且不怎么占内存
2018年02月05日 12点02分 2
非常感谢老师,的确是快了十几倍!
2018年02月05日 13点02分
老师教的直接循环枚举法较容易理解和学习,而且运算速度很快,我花了两个小时套用来解其它类似的题,非常实用省时!
2018年02月05日 15点02分
level 1
hscote 楼主
老师,上面这道题如果使用Flatten应该怎么写?我学习的书上没有对Flatten的详细介绍,还不懂,能否请您以此题做个示范?
2018年02月05日 16点02分 3
1