How to use Newton-Raphson for numerical solution of two variables?
Mostrar comentarios más antiguos
Hello community,
I have a non-linear function f(x,y), which I would like to find the roots of with the Newton-Raphson method. However, I haven't yet found a simple code on the internet in case of two variables, which just lets me enter my function and get the result. If I find one, the solutions on the internet always need two equations, but I only have one?
2 comentarios
Newton-Raphson only applies to N equations in N unknowns. If you have fewer equations than unknowns, there will normally be an infinite continuum of roots. For example,
f(x,y)=x+y
has roots at all x=-y.
Jonas
el 8 de Sept. de 2013
Respuestas (2)
Matt J
el 8 de Sept. de 2013
Can i divide it into a real and an imaginary equation
You could just rewrite your function to return a 2x1 vector containing the real and imaginary part respectively.
If f() is your existing function, you could also do
f_new=[real(f(x,y)); imag(f(x,y))]
7 comentarios
Jonas
el 8 de Sept. de 2013
Jonas
el 8 de Sept. de 2013
Matt J
el 8 de Sept. de 2013
I'm having no difficulty with it.
>> f=@(x,y) [real(fname(x,y)) ; imag(fname(x,y)) ]
>> fname(.1,.2)
ans =
-2.0418e+23 + 2.1406e+23i
>> f(.1,.2)
ans =
1.0e+23 *
-2.0418
2.1406
Jonas
el 8 de Sept. de 2013
Matt J
el 8 de Sept. de 2013
Now that you have a system of 2 equations in 2 unknowns, the Newton-Raphson code that you've been using should work fine. There is also FZERO, if you have it.
Jonas
el 8 de Sept. de 2013
Jonas
el 8 de Sept. de 2013
2 comentarios
Floating point errors probably. You have very large coefficients and also a rather large polynomial order. ROOTS might give you a more exact result (and is more appropriate anyway seeing as your function is a polynomial), but it's hard to say.
Jonas
el 8 de Sept. de 2013
Categorías
Más información sobre Systems of Nonlinear Equations en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!