"Z must be a matrix, not a scalar or vector." PLEASE HELP!
2 次查看(过去 30 天)
显示 更早的评论
So this is the function I want graph using surf.m:
%simple multivariate function;
function [f]=ps2func(x1,x2)
if ((x1<=2) &&(x2<=2))
f=4.*x1+3.*x2; %case 1 for the function
elseif ((x1>2) &&(x2>2))
f=x1.^2+x2.^2; %case 2 for the function
else
f=0; %case 3 for the function
end
%this is the suf.m function i used in an attempt to graph it:
x1 = 1:.1:4;
x2 = 1:.1:4;
[X,Y] = meshgrid(x1,x2);
Z= [f];
mesh(X,Y,Z)
grid on
hold on
0 个评论
采纳的回答
Matt J
2020-9-27
编辑:Matt J
2020-9-27
You should have something like this:
x1 = 1:.1:4;
x2 = 1:.1:4;
mesh(x1,x2, ps2func(x1,x2) );
grid on
hold on
function f=ps2func(x1,x2)
if isvector(x1), x1=x1(:);x2=x2(:).'; end
f1=4.*x1+3.*x2; region1=(x1<=2) & (x2<=2);
f2=x1.^2+x2.^2; region2=(x1>2) & (x2>2);
f=false(size(f2));
f(region1)=f1(region1);
f(region2)=f2(region2);
end
更多回答(1 个)
Rafael Hernandez-Walls
2020-9-27
x1 = 1:.1:4;
x2 = 1:.1:4;
[X,Y] = meshgrid(x1,x2);
Z= ps2func(X,Y);
mesh(X,Y,Z)
grid on
hold on
function [f]=ps2func(x1,x2)
f=size(x1);
f=((x1<=2)&(x2<=2)).*(4.*x1+3.*x2)+((x1>2)&(x2>2)).*(x1.^2+x2.^2);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Interpolation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!