1

在mathematica的 NMinimise 函数中,我进行了以下设置:

NMinimize[{1/rij, x1^2 + y1^2 <= 25, x2^2 + y2^2 <= 25, 
  x3^2 + y3^2 <= 25, x4^2 + y4^2 <= 25, x5^2 + y5^2 <= 25, 
  x6^2 + y6^2 <= 25, x7^2 + y7^2 <= 25, x8^2 + y8^2 <= 25, 
  x9^2 + y9^2 <= 25, x10^2 + y10^2 <= 25}, 
 Join[Take[xi, number], Take[yi, number]]]

其中 xi 和 yi 表示生成变量的列表,x1,x2,x3,x4 等等,直到 x100。而不是设置很多约束,如 x1^2 + y1^2 <= 25、x2^2 + y2^2 <= 25 等等,就像上面 id 一样,为变量类设置一个约束,类似于 x#^2 +y#^2<=25 所以这个问题可以推广到非常大的 n。

我试过输入一个不等式列表,但是,mathematica 似乎不接受它作为输入。

谢谢。

4

1 回答 1

3

尝试使用索引变量作为 x[ 1],y[ 1],x[2],y[2]...x[n],y[n],然后你可以做类似的事情,

NMinimize[ Join[{1/rij},Table[x[i]^2+y[i]^2<25,{i,number}]] ,
            Flatten[Table[{x[i],y[i]]},{i,number}] ]]

(..未经测试..)

更新:现在测试..

n = 15;
pts = Table[RandomReal[{-5, 5}, 2], {n}];
s = NMinimize[ 
     Join[{Sum[Norm@({x[i], y[i]} - pts[[i]]), {i, n}]},
     Table[x[i]^2 + y[i]^2 < 1, {i, n}]], 
     Flatten[Table[{x[i], y[i]}, {i, n}]]];

我不知道你的rij是什么..

Graphics[ {PointSize[.05], Point /@ pts, Circle[{0, 0}, 1], Red, 
          Point /@ Table[{x[i], y[i]}, {i, n}] /. Last@s}]

在此处输入图像描述

于 2013-07-31T12:48:33.583 回答