After fixing the closing quotes, I do not get an error. I get a value for red:
$red 10 2 5$red _0.618674 _6.90868e_5 0.672499 6.76872e_5 _3.25669e_6 _0.00539776 _0.000913268 _3.06912e_7 _7.66935e_9 7.28202e_6 Perhaps also relevant: $points 2 11 points _5 _4 _3 _2 _1 0 1 2 3 4 5 5 9 7 4 2 5 9 0 3 1 0 I hope this helps... -- Raul On Mon, Apr 11, 2016 at 9:19 PM, Devon McCormick <[email protected]> wrote: > Hi - > > I was just looking at this but this line gives me an error: > > red=: points&(p. chi2) D.1 newt 0.5 1000 ] 1 1 1 1 1 1 1 1 1 1 > |domain error > | red=: points&(p.chi2)D.1 newt 0.5 1000]1 1 1 1 1 1 1 1 1 1 > > Am I missing something here? > > Thanks, > > Devon > > On Mon, Feb 15, 2016 at 11:27 AM, Louis de Forcrand <[email protected]> > wrote: > >> Thanks everyone! >> >> The lab was pretty much exactly what I was looking for, and indeed >> matrix division was the way to go. For satisfactory results, ~1000 >> iterations are needed in some cases, but they are spectacular: >> >> >> >> The code is probably minimal, but it’s surprisingly versatile; the code >> used to generate the curves is: >> >> newt=: 2 : '(- (0{::n) * u %. u D.1)^:(1{::n)’ NB. fetch is used here to >> be able to box the 2nd parameter >> NB. for >> a list of iterations >> chi2=: 1 : '[: +/@:*: {:@[ - ] u {.@[‘ >> points=: (i: 5) ,: ? 10 $ 10 >> green=: points&(p. chi2) D.1 newt 0.5 1000 ] 1 1 1 1 1 >> red=: points&(p. chi2) D.1 newt 0.5 1000 ] 1 1 1 1 1 1 1 1 1 1 >> >> The optimised parameters were then stored in green or red, and I simply >> plotted the two functions on top of the points with the plot package. >> >> Theoretically (ignoring possible precision problems) any function which >> takes parameters on its left >> and a value to its right can be used as a placeholder to minimise the >> square of the differences with >> the points to fit; with only two operators! >> I really am glad I decided to look into APL and then J; you won’t see me >> doing this any time soon in C. >> >> Thanks again for your generous help, >> Louis >> >> >> > On 14 Feb 2016, at 15:14, Ben Gorte - CITG <[email protected]> >> wrote: >> > >> > Hello Louis, >> > >> > did you have a look at the Best Fit lab in the math section of Help -> >> Studio -> Labs ? >> > I think towards the end it is getting pretty close to what you are >> looking for. >> > >> > Ben >> > >> > ________________________________________ >> > From: Programming [[email protected]] on behalf >> of Louis de Forcrand [[email protected]] >> > Sent: Saturday, February 13, 2016 16:50 >> > To: [email protected] >> > Subject: [Jprogramming] Non-scalar Newton-Raphson >> > >> > I’ve been trying to write a conjunction that will find the zeros to a >> function using the >> > Newton-Raphson method. The simplest way to do this is probably: >> > >> > English: >> > x_n+1 = x_n - f ( x_n ) / f ‘ ( x_n ) >> > >> > J: >> > eznewt=: 2 : ‘ ( - u % u D.1 ) ^: n ‘ >> > >> > This works fine for scalar -> scalar functions, but won’t work if the >> rank of the >> > result is AND the rank of the arguments are above 1. >> > Probably the most evident situation where this would be a problem is if >> one >> > were searching for a minimum instead of a zero, in which case the >> algorithm >> > would be applied to the derivative of the function: +/@:*: D.1 newt 30 ] >> 3 4 >> > As I understand it, this would give a result shape at each iteration >> (with a function u) of: >> > >> > ( $y ) , $ u eznewt 1 y >> > >> > where A is the original argument, or the result of the previous >> iteration. What we would >> > want is a result with shape $y . >> > >> > First, let’s get some rules clear: >> > - the syntax should be: (verb) newt (# of iterations) (argument) >> > - the argument can be of any rank >> > - the shape of the argument matches the shape of the result at any >> iteration >> > - this implies that $ u y matches i. 0 or $ y >> > >> > The hard part is getting u % u D.1 to have the shape of the argument. >> > If y is a vector, and u y is a scalar, then u D.1 y will be a vector, and >> > u D.1 D.1 y will be a $y by $y matrix. All that is needed then is to take >> > its diagonal with (<0 1)&|: . >> > >> > But what if y is a matrix? Since $ u D.1 y -: ( $ y ) , $ u y , I though >> maybe running >> > y's axis together with |: might work >> > >> > newt=: 2 : '(- u diag_and_divide u D.1)^:n’ >> > diag_and_divide=: [ % ] |:~ -@#@$@[ <@}. i.@#@$@] >> > >> > but something about it doesn’t. >> > My head is $pinning now, and I figured I’d send this and then take a >> break. >> > >> > Thanks in advance! >> > Louis >> > ---------------------------------------------------------------------- >> > For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- >> > For information about J forums see http://www.jsoftware.com/forums.htm >> >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > > > > -- > > Devon McCormick, CFA > > Quantitative Consultant > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
