- 积分
- 33
- 注册时间
- 2005-6-2
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2008-8-7 23:29:29
|
显示全部楼层
来自 美国
想了想,觉得可以这样做,先把方程右边变为零,然后把左边的平方求最小值(最好用NMinimize)。把最小值的点作为初值,求出精确解。
- ClearAll["Global`*"];
- eqns = {Subscript[x, 1] + Subscript[x, 2] + Subscript[x, 3 ] +
- Subscript[x, 4] + Subscript[x, 5 ] + Subscript[x, 6 ] +
- Subscript[x, 7 ] - Pi*7/4*1/2 == 0,
- \!\(
- \*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(7\)]\((5 \*
- StyleBox[
- SubscriptBox["x", "i"], "suffix"] - 20
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(3\)] + 16
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(5\)])\)\) == 0,
- \!\(
- \*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(7\)]\((\(-7\)
- \*SubscriptBox[\(x\), \(i\)] + 56
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(3\)] - 112
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(5\)] + 64
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(7\)])\)\) == 0, \!\(
- \*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(7\)]\((\(-11\)
- \*SubscriptBox[\(x\), \(i\)] + 220
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(3\)] - 1232
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(5\)] + 2816
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(7\)] - 2816
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(9\)] + 1024
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(11\)])\)\) == 0, \!\(
- \*UnderoverscriptBox[\(\[Sum]\), \(i = 1\), \(7\)]\((13
- \*SubscriptBox[\(x\), \(i\)] - 364
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(3\)] + 2912
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(5\)] - 9984
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(7\)] + 16640
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(9\)] - 13312
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(11\)] + 4096
- \*SuperscriptBox[
- SubscriptBox[\(x\), \(i\)], \(13\)])\)\) == 0,
- Subscript[x, 2] + Subscript[x, 6 ] - 2 Subscript[x, 4 ] == 0,
- Subscript[x, 1] + Subscript[x, 3 ] + Subscript[x, 5 ] + Subscript[
- x, 7 ] - 4 Subscript[x, 4 ] == 0};
复制代码
- res = NMinimize[Total[eqns[[#, 1]]^2 & /@ Range[7]],
- Subscript[x, #] & /@ Range[7], AccuracyGoal -> Infinity,
- PrecisionGoal -> 100, WorkingPrecision -> 10,
- Method -> "SimulatedAnnealing"]
复制代码- result = FindRoot[
- eqns, {res[[2, #, 1]], res[[2, #, 2]]} & /@ Range[7],
- Method -> "Secant", MaxIterations -> 5000, AccuracyGoal -> Infinity,
- PrecisionGoal -> 100, WorkingPrecision -> 20]
复制代码
得到解:
{Subscript[x, 1] -> -0.14620611729733667152,
Subscript[x, 2] -> 0.099895256167344818036,
Subscript[x, 3] -> 0.61202102186331554256,
Subscript[x, 4] -> 0.39269908169872415480,
Subscript[x, 5] -> 0.85231386996076290551,
Subscript[x, 6] -> 0.68550290723010349158,
Subscript[x, 7] -> 0.25266755226815484268}
误差:
In[56]:= eqns[[#, 1]] & /@ Range[7] //. result
Out[56]= {0.*10^-20, 0.*10^-18, 0.*10^-18, 0.*10^-16, 0.*10^-15,
0.*10^-20, 0.*10^-20} |
|