Newton's method for two variable functions

I have a problem in which I'm supposed to solve a system using Newton's method, but my function gives the same x and y as an output as I give to it as an input. How do I fix this?
function [x, y] = newton3(x,y)
for N = 1:30
D = inv([4*x^3-2*y^5 4*y^3-10*x*y^4; 6*x^5+2*x 4*y^3]);
f = x^4+y^4-2*x*y^5 ;
g = x^6+x^2+y^4-4 ;
z = [x y]' ;
z = z - D*[f g]' ;
x = z(1)
y = z(2)
end
end

 采纳的回答

It depends on your initial guesses. Some work, some don't (not unusual for Newton's method!): Also, better practice to set D to be the Jacobian, rather than its inverse, then use backslash division in the iteration see below:
x = 2; y = 2;
[x,y] = newton3(x,y);
disp([x y])
disp([x^4+y^4-2*x*y^5 x^6+x^2+y^4-4 ])
function [x, y] = newton3(x,y)
for N = 1:30
D = [4*x^3-2*y^5 4*y^3-10*x*y^4; 6*x^5+2*x 4*y^3]; %%%%%%%
f = x^4+y^4-2*x*y^5 ;
g = x^6+x^2+y^4-4 ;
z = [x y]' ;
z = z - D\[f g]' ; %%%%%%%%
x = z(1);
y = z(2);
end
end

5 个评论

If I could add, it is a really bad idea to hard code functions into your algorithms. So setting the matrix D here inside the loop, inside your function:
D = [4*x^3-2*y^5 4*y^3-10*x*y^4; 6*x^5+2*x 4*y^3];
Instead, learn to pass functions INTO your code. Think of the idea as a target, something you may want to learn for the future.
Yes, I know this is homework. But one day you might find it important. :)
I tried to do the changes you proposed but the function continues to give the same values of x and y it receives as an input.
x0 = 2
y0 = 3
f = x^4+y^4-2*x*y^5 ;
g = x^6+x^2+y^4-4 ;
function [x1, y1] = newton3(f,g,x0,y0)
for N = 1:30
D = [diff(f,x) diff(f,y); diff(g,x) diff(g,y)];
z = [x0 y0]' ;
z = z - D\[f g]' ;
x0 = z(1);
y0 = z(2);
end
x1 = x0
y1 = y0
end
The code doesn't actually call the function newton3!
Also, to define the functions you need
f = @(x,y) x^4 ...etc.
and you will need to define functions for dfdx, dfdy etc. if you are not using the Symbolic toolbox.
Thank you! I feel so stupid now haha...

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Systems of Nonlinear Equations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by