Quoting myself from earlier today: > My knowledge of vector calculus is minimal. Perhaps the mathematicians in this Forum can help you if you really do have a vector function.
On Sat, Feb 13, 2016 at 12:32 PM, Louis de Forcrand <[email protected]> wrote: > I’m sorry about that Raul, that should read “y”. > > ---- > > Thanks Roger. You were right, after a quick search, I’ve found that > indeed I would need to perform a matrix division. Several documents > give this as a multi-variable Newton method: > > v_n+1 = v_n - J_f (v_n) ^-1 f(v_n) > > In J, this would be: > > multinewt=: 2 : ‘(- u %. u D.1)^:n’ > > However, if I take a paraboloid z =: +/@:*: x y , and look for its zeros > with > > +/@:*: multinewt (<5) 3 4 > > I get this: > > 3 4 > _0.5 0.5 > _0.5 0.5 > _0.5 0.5 > _0.5 0.5 > > which is obviously wrong. Would I need some sort of transposition? This > could just be due to precision errors. Or because I wrote an erroneous > conjunction? > > Cheers, > Louis > > > On 13 Feb 2016, at 20:52, Raul Miller <[email protected]> wrote: > > > > Something is wrong here. > > > > You say "where A is the original argument, or the result of the > > previous iteration." > > > > ... but I can find no use of A in the expression you are describing. > > > > Can you look over what you wrote and decide if it is what you meant to > say? > > > > Thanks, > > > > -- > > Raul > > > > On Sat, Feb 13, 2016 at 10:50 AM, Louis de Forcrand <[email protected]> > wrote: > >> 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 ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
