Plot surface from non-anonymus function

조회 수: 1 (최근 30일)
Santiago Ortiz Laverde
Santiago Ortiz Laverde 2021년 2월 27일
댓글: Star Strider 2021년 2월 27일
Hello guys,
I'd like to plot a surface from a global function. I don't know how to create the function, so it is applied to every value in a multidimensional array (mesh grid). There plenty of examples using anonymous functions, but I haven't found any from a non-anonymous one (which I call "global").
Take this function as an example
function z = test(w)
x = w(1);
y = w(2);
z = 2*x.^2 + 2*y.^2 +10*(1.1*y.^2 +3*x.^2).^0.5;
end
Is it possible?
Regards,
Santiago

채택된 답변

Star Strider
Star Strider 2021년 2월 27일
See if this does what you want —
function z = test(w)
x = w{1};
y = w{2};
z = 2*x.^2 + 2*y.^2 +10*(1.1*y.^2 +3*x.^2).^0.5;
end
x = -10:10;
y = -15:5;
[W{1},W{2}] = ndgrid(x,y);
Z = test(W);
figure
surf(W{1},W{2},Z)
grid on
Note that I created ‘w’ as cell arrays to pass its elements as matrices. Other than that change, your function is as you wrote it.
  댓글 수: 2
Santiago Ortiz Laverde
Santiago Ortiz Laverde 2021년 2월 27일
Thank you!, It worked. I just didn't know about 'cell arrays'.
Star Strider
Star Strider 2021년 2월 27일
As always, my pleasure!
They’re quite useful!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Hernia Baby
Hernia Baby 2021년 2월 27일
편집: Hernia Baby 2021년 2월 27일
clc,clear,close all;
w = [1:10;2:11];
x = w(1,:);
y = w(2,:);
f = @(x,y) 2*x.^2 + 2*y.^2 +10*(1.1*y.^2 +3*x.^2).^0.5;
[X,Y] = meshgrid(x,y);
z = f(X,Y);
figure
surf(X,Y,z)
grid on

카테고리

Help CenterFile Exchange에서 Graphics Object Programming에 대해 자세히 알아보기

제품


릴리스

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by