Surface plot for two variable piecewise function

I need help plotting the following piecewise function in Matlab as surface plot. Any help is appreciated!!
x1 and x2 are [0,1]

3 commentaires

Torsten
Torsten le 21 Oct 2023
Modifié(e) : Torsten le 21 Oct 2023
Are x1, x2 assumed to be >= 0 ?
x1 and x2 are from 0 to 1.
Torsten
Torsten le 21 Oct 2023
Then you can follow @Dyuman Joshi 's hints.

Connectez-vous pour commenter.

Réponses (1)

Dyuman Joshi
Dyuman Joshi le 21 Oct 2023

0 votes

Utilize meshgrid to generate the points and evaluate the function using the points.
Then employ surf to plot the piecewise function.

9 commentaires

I used the following code:
Can someone verify this is correct?
clc;
clear
U = @(x1,x2) (1-exp(-5*(x1.^3+x2.^2).^1/3)) .* (((x1.^3 + x2.^2) >= 0) & ((x1.^3 + x2.^2) <= 1)) + (x1.^3 + x2.^2 - 1) .* (((x1.^3 + x2.^2) >= 1) & ((x1.^3 + x2.^2) <= 2));
x = linspace(-1, 3);
y = linspace(-1, 3);
[X,Y] = ndgrid(x,y);
figure
fsurf(U, [ -2 3 -2 3], 'MeshDensity',75)
Torsten
Torsten le 21 Oct 2023
Modifié(e) : Torsten le 21 Oct 2023
Why do you plot for -2 <= x1, x2 <= 3 if 0 <= x1, x2 <= 1 as you stated above?
And this part of your code seems superfluous:
x = linspace(-1, 3);
y = linspace(-1, 3);
[X,Y] = ndgrid(x,y);
Yeah I just fixed that.
There is a clear discontinuity when I plot though. How can I tell by how much I must adjust the equations to fix that?
clc;
clear
U = @(x1,x2) (1-exp(-5*(x1.^3+x2.^2).^1/3)) .* (((x1.^3 + x2.^2) >= 0) & ((x1.^3 + x2.^2) <= 1)) + (x1.^3 + x2.^2 - 1) .* (((x1.^3 + x2.^2) >= 1) & ((x1.^3 + x2.^2) <= 2));
x = linspace(-1, 3);
y = linspace(-1, 3);
[X,Y] = ndgrid(x,y);
figure
fsurf(U, [ -0 1 -0 1], 'MeshDensity',75)
You don't need to generate the grid of points with fsurf.
There is a discontinuity because that's how the function works.
U = @(x1,x2) (1-exp(-5*(x1.^3+x2.^2).^1/3)) .* (((x1.^3 + x2.^2) >= 0) & ((x1.^3 + x2.^2) <= 1)) + (x1.^3 + x2.^2 - 1) .* (((x1.^3 + x2.^2) >= 1) & ((x1.^3 + x2.^2) <= 2));
%The domain of x1 and x2 is [0 1]
fsurf(U, [0 1 0 1], 'MeshDensity', 75)
view([45 45])
Torsten
Torsten le 21 Oct 2023
Modifié(e) : Torsten le 21 Oct 2023
There is a clear discontinuity when I plot though. How can I tell by how much I must adjust the equations to fix that?
Compute the values for your two function definitions for x1^3+x2^2 = 1 and make these values equal by adding appropriate values to your two functions. There is not a single solution, but many ways to do so. But I don't know what function manipulations are allowed in your case.
I did:
U(1,0) = U(1,0)
0=1-e^-5
I then subtracted that 1-e^(-5) from the first equation:
clc;
clear
U = @(x1,x2) (1-exp(-5*(x1.^3+x2.^2).^1/3)-(1-exp(-5))) .* (((x1.^3 + x2.^2) >= 0) & ((x1.^3 + x2.^2) <= 1)) + (x1.^3 + x2.^2 - 1) .* (((x1.^3 + x2.^2) >= 1) & ((x1.^3 + x2.^2) <= 2));
figure
fsurf(U, [ 0 1 0 1], 'MeshDensity',75)
Torsten
Torsten le 21 Oct 2023
Modifié(e) : Torsten le 21 Oct 2023
A bracket around 1/3 was missing. Should be
U = @(x1,x2) (1-exp(-5*(x1.^3+x2.^2).^(1/3))-(1-exp(-5))) .* (((x1.^3 + x2.^2) >= 0) & ((x1.^3 + x2.^2) <= 1)) + (x1.^3 + x2.^2 - 1) .* (((x1.^3 + x2.^2) >= 1) & ((x1.^3 + x2.^2) <= 2));
figure
fsurf(U, [ 0 1 0 1], 'MeshDensity',75)
"A bracket around 1/3 was missing."
Ah, that should be it.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Line Plots dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by