Function that should be continuous isn't continuously plotted?

조회 수: 1 (최근 30일)
Niklas Kurz
Niklas Kurz 2020년 12월 3일
편집: Daniel Pollard 2020년 12월 3일
Given the function: f(x,y) = (x^3 - 3*x*y^2)/(x^2+y^2)
I'd plot it typing:
[x,y] = meshgrid(-2:0.2:2)
z = (x.^3 - 3.*x.*y.^2)./(x.^2+y.^2)
surf(x,y,z)
Doing this Matlab shows me a quite dedicate plot, however with a whole in the origin (A sign for non continous functions, right?). That's why this is staying in contrast to my math lectures. Maybe it's because I haven't defined "f(x,y) = 0 if (x,y) = (0,0)". Or why is that?

채택된 답변

Alan Stevens
Alan Stevens 2020년 12월 3일
The function is continuous at (0,0); it has a removable singularity. Try using
[x,y] = meshgrid(-2+eps:0.2:2+eps);
eps is Matlab's inbuilt value (about 2.2204e-16).

추가 답변 (1개)

Daniel Pollard
Daniel Pollard 2020년 12월 3일
편집: Daniel Pollard 2020년 12월 3일
At the origin, x and y are both zero, so the denominator of your function is undefined. For me it's returning NaN at the central point:
>> z(11, 11)
ans =
NaN.
Edit as I realise I failed to actually address the issue. As far as I can tell there are two options:
  • Make the vector steps smaller, so instead of meshgrid(-2:0.2:2), you could use meshgrid(-2:0.05:2), which would make the plot appear more continuous and make the "hole" in the middle smaller, and nearly invisible.
  • Set the NaN value to zero. This is as simple as adding the line
z(isnan(z))=0;.

카테고리

Help CenterFile Exchange에서 2-D and 3-D Plots에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by