如题。未知数数目增加时,Solve的求解时间有所增加是意料之中的,可是,我过去还真没注意到,当方程组中的系数不是数字时,这个增加速度是非常快的:
f[n_] := Solve[Thread[Plus @@@ Table[Unique[] t[j], {i, n}, {j, n}] == 0(*Table[Unique[],{j,n}]*)], Table[t[j], {j, n}]]
First@AbsoluteTiming[f[#];] & /@ Range[6];
ListLogPlot[%, Joined -> True]

n = 6 时耗时已经超过了100秒……再往上的我不打算试了。非齐次的情形(使用我写在代码注解里的部分作为等式右端即可)是类似的,这里不贴了。
顺便,对于数字系数,这个问题就基本不构成威胁:
f2[n_] :=
Solve[Thread[
Plus @@@ Table[RandomInteger[{5, 10}] t[j], {i, n}, {j, n}] ==
RandomInteger[{5, 10}]], Table[t[j], {j, n}]]
First@AbsoluteTiming[f2[#];] & /@ Range[60];
ListLogPlot[%, Joined -> True]

RandomReal[]的结果是类似的,这里不贴了。
那么问题来了:这种速度的爆跌可否改善?还是说这就是追求符号解的代价?
f[n_] := Solve[Thread[Plus @@@ Table[Unique[] t[j], {i, n}, {j, n}] == 0(*Table[Unique[],{j,n}]*)], Table[t[j], {j, n}]]
First@AbsoluteTiming[f[#];] & /@ Range[6];
ListLogPlot[%, Joined -> True]

n = 6 时耗时已经超过了100秒……再往上的我不打算试了。非齐次的情形(使用我写在代码注解里的部分作为等式右端即可)是类似的,这里不贴了。
顺便,对于数字系数,这个问题就基本不构成威胁:
f2[n_] :=
Solve[Thread[
Plus @@@ Table[RandomInteger[{5, 10}] t[j], {i, n}, {j, n}] ==
RandomInteger[{5, 10}]], Table[t[j], {j, n}]]
First@AbsoluteTiming[f2[#];] & /@ Range[60];
ListLogPlot[%, Joined -> True]

RandomReal[]的结果是类似的,这里不贴了。
那么问题来了:这种速度的爆跌可否改善?还是说这就是追求符号解的代价?
