Ok, der gezeigte Code drückte nicht aus, was ich wirklich tun will.
Hier nun das Original:
lw[l_] := LinearProgramming[{-4.32782601300991 + l[[1]]*1 + l[[2]]*1 + \
l[[3]]*0 + l[[4]]*0 + l[[5]]*0, -2.48029145527645 + l[[1]]*0 + l[[
2]]*1 + l[[3]]*1 + l[[
4]]*0 + l[[5]]*0, -6.15346408269995 + l[[
1]]*0 + l[[2]]*1 + l[[3]]*1 + l[[4]]*1 + l[[
5]]*0, -3.8197107770572 + l[[1]]*0 + l[[2]]*0 + l[[3]]*1 +
l[[4]]*1 + l[[5]]*1}, {{}}, {}, {{0, 1}, {0, 1}, {
0, 1}, {0, 1}}];
w[l_] := Sum[l[[i]], {i, 5}] + Part[lw[l],
1]*(-4.32782601300991 + l[[1]]*1 + l[[2]]*1 + l[[3]]*0 +
l[[4]]*0 +
l[[5]]*0) + Part[lw[
l], 2]*(-2.48029145527645 + l[[1]]*0 + l[[2]]*1 + l[[3]]*1 +
l[[4]]*0 + l[[5]]*0) + Part[lw[l], 3]*(-6.15346408269995 + l[[
1]]*0 + l[[2]]*1 + l[[3]]*1 + l[[4]]*1 + l[[
5]]*0) + Part[lw[l],
4]*(-3.8197107770572 + l[[1]]*0 + l[[2]]*0 + l[[3]]*1 +
l[[4]]*1 + l[[5]]*1);
w liefert also einen skalaren Wert.
Wie kann ich nun Minima von w suchen? (Der Code ist natürlich generiert,
die reellen Koeffizienten variieren).
Eigentlich würde ich erwarten, dass
FindMinimum[w[{l1, l2, l3, l4, l5}], {l1, 0}, {l2, 0}, {l3, 0}, {l4, 0},
{l5, 0}]
korrekt ist, schließlich bietet die Dokumentation als Beispiel
FindMinimum[x\^4 + 3 \( x\^2\) y + 5 y\^2 + x + y, {x, 0.1}, {y,0.2}]
Hier ist die zu minimierende Funktion inline definiert, bei mir extern,
was anscheinend micht erlaubt ist.
Vom erwähnten, zugegebenermassen unverstandenen FunctionalFindMinimum
hatte ich mir eine Lösung erhofft.
Ich habe w so umdefiniert:
w[{l1_, l2_, l3_, l4_, l5_}] := l1 + l2 + l3 + l4 + l5 +
Part[lw[{l1, l2, l3, l4, l5}], 1]*(-4.32782601300991 + l1*1 +
l2*1 + l3*0 + l4*0 + l5*0) + Part[lw[{l1, l2, l3,
l4, l5}], 2]*(-2.48029145527645 + l1*0 + l2*1 + l3*1 +
l4*0 +
l5*0) + Part[lw[{l1, l2, l3, l4, l5}],
3]*(-6.15346408269995 + l1*0 +
l2*1 + l3*1 + l4*1 + l5*0) + Part[lw[{l1, l2, l3,
l4, l5}], 4]*(-3.8197107770572 + l1*0 + l2*0 + l3*1 + l4*1 +
l5*1);
um dann FunctionalFindMinimum so anzuwenden:
FunctionalFindMinimum[w, {1, 2, 3, 4, 5}]
kriege aber nur Fehlerausschriften.
From In[13]:=
Thread::tdlen: Objects of unequal length in \
1+\[LeftSkeleton]3\[RightSkeleton]+{{0,0},{0,0},{0,0},{0,0}} cannot be \
combined.
From In[13]:=
Thread::tdlen: Objects of unequal length in \
1.\[InvisibleSpace]+{}+{{}}+{-2.65565,\[LeftSkeleton]2\[RightSkeleton],8.\
18029}+{{0.,0.},{0.,0.},{0.,0.},{0.,0.}} cannot be combined.
From In[13]:=
Thread::tdlen: Objects of unequal length in \
1+\[LeftSkeleton]3\[RightSkeleton]+{{0,0},{0,0},{0,0},{0,0}} cannot be \
combined.
From In[13]:=
General::stop: Further output of Thread::tdlen will be suppressed during
this \
calculation.
From In[13]:=
FindMinimum::fmgl: Gradient {\[LeftSkeleton]1\[RightSkeleton]} is not a \
length 5 list of real numbers at {x$18,x$19,x$20,x$21,x$22} = \
{1.,2.,3.,4.,5.}.
From In[13]:=
ReplaceAll::reps: {{x$22,5}} is neither a list of replacement rules nor a \
valid dispatch table, and so cannot be used for replacing.
Jens-Peer Kuska schrieb:
Hallo,
vielleicht l"ost Du erst mal das Problem, heraus zu finden,
das FindMinimum[] eine Zielfunktion mit einem *skalaren*
--
Intelligente Netze und Management verteilter Systeme
TU Berlin
Fakultät 4, Sekretariat EN 6
Einsteinufer 17
D-10587 Berlin
Tel. +49 30 314 79835 Fax +49 30 314 24573
http://www.ivs.tu-berlin.de