Hallo Manfred,
es sollte vernünftigerweise (try lösung[-2])
lösung[n_Integer] := <expr> /; 1 < n <= einWertDerNochGeht
definiert werden, denn bei n = 100 gibt es Fehlermeldungen:
In[1]:= (* Lösung Engelskirchen für {2, ..., n}, 6. 3. 2008 *)
lösung[n_] :=
Map[# Range[2, n] &,
Select[Tuples[{-1, 1}, n - 1], (#.Range[2, n] == n) &]]
In[12]:= lösung[100]
During evaluation of In[12]:=
Tuples::"toomany" : "The length of the output of Tuples[{-1, 1}, 99] \
should be a machine integer." >>
<snip>
Out[12]= Tuples[]
dann nach einigen weiteren Versuchen:
In[15]:= lösung[30]
No more memory available.
Mathematica kernel has shut down.
Try quitting other applications and then retry.
.. nicht gut, der Gebrauch von Tuples ist zwar "sicher", aber hochgradig
ineffizient (abgesehen davon, dass die lösung[] nichts mit der Aufgabe zu
tun hat). Was auf Ihrem Rechner die grösste Maschinenganzzahl ist, kann
man sich überlegen (auf 32 Bit Rechnern: 2^32 - 1) und es experimentell
bestätigen:
In[55]:= MemoryConstrained[1 + 1, 2^32]
During evaluation of In[55]:= MemoryConstrained::ipnfm: Positive \
machine-size integer or Infinity expected at position 2 in \
MemoryConstrained[1+1,2^32]. >>
Out[55]= MemoryConstrained[1 + 1, 2^32]
In[56]:= MemoryConstrained[1 + 1, 2^32 - 1]
Out[56]= 2
Da Tupels[{-1, 1}, n - 1] _nur_ Length[{-1, 1}]^(n - 1) Elemente erzeugt,
muss n - 1 < 32 sein. Der Rechner hat aber viel weniger Memory frei, und
wenn Sie etwa 400 MB bereithalten können, dann funktioniert
In[60]:= MemoryConstrained[lösung[15], 400 1024 1024] // Length
Out[60]= 331
noch, jedoch
In[62]:= MemoryConstrained[lösung[16], 400 1024 1024]
Out[62]= {}
nicht mehr (obwohl kein $Aborted kommt ...).
Gruss
Udo.
On Thu, 06 Mar 2008 12:04:23 +0100, Manfred Engelskirchen
<engelskirchen@XXXXXXX.de> wrote:
lösung[n_]:=Map[#
Range[2,n]&,Select[Tuples[{-1,1},n-1],(#.Range[2,n]==n)&]]
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/