In amoeba, minindx comes from
minindx =. tryerr i. minval =. <./ tryerr =. uverb simptry
which should be bulletproof if uverb returns a scalar. You could try
putting something like
assert. (,3) -: $tryerr
after that line to see if uverb is returning junk. (It's not clear to
me that Area returns a scalar).
untested.
Henry Rich
On 2/23/2013 7:16 PM, David Ward Lambert wrote:
Barn/fence problem, which shape holds maximum area?
See Mouse on moon problem
http://projecteuler.net/problem=314
which I haven't solved.
Let's build a system to test an arbitrary function.
A symmetrical figure has maximal area. Proof---a
preferred figure would be preferred in reflection
and the ends would join correctly.
Method: use a root finder to find the half length of
barn wall that matches half the length of the fence.
Return the corresponding area. On top of this an
optimization gets the best coefficients for related
curves, for instance the cubics (_4{.C1,C2,C3)&p.
In Mathematica, if f[x] describes the fence shape
then the path length integral is
Int[Sqrt[D[f[x],x]^2+1],{x,0,upperLimit}]
and we want to find upperLimit such that
the integral returns 50.
PathLengthIntegrand =: ((D.1)(%:@:>:@:*:@:))("0)
[ PathLengthIntegrand i.3 NB. looks good.
1.41421 1.41421 1.41421
NB.Integrate with limits 0 to X, find the value of X
NB.for which the length of fence is 50.
load'math/misc/integrat'
load'math/misc/amoeba' NB. amoeba is a no-fuss machine
PathLength =: adverb def '{. u PathLengthIntegrand integrate (0 , y)'
AreaFixed =: adverb define NB. y ignored, returns half (barn wall
length and pasture area)
assert 0 = u 0 NB. touches barn wall
'Y ERREST' =. (*:@:(50-u PathLength)amoeba (<30))0,:50[y
Y , {. u integrate (0 , Y)
)
[AreaFixed 50 NB. right isosceles triangle
35.3554 625.001
Area =: adverb define NB. y are the x argument for u
assert 0 = y u 0 NB. touches barn wall
'Y ERREST' =. (*:@:(50- (y&u) PathLength)amoeba (<30)) 0,:50
Y , {. y&u integrate (0 , Y)
)
cubic =: (p.~ _4&{.)~ NB. 0 6 -: 1 2 3 cubic 0 1
cubic Area 1 0 0 NB. still line y=x
35.3553 625
NB. negative because amoeba optimizes
(-@:cubic Area amoeba (<30)) 4 3 ?@$ 0 NB. runs a short while
|index error
| simplex=.(minindx {simptry)_1}simplex
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm