"Z must be a matrix, not a scalar or vector." PLEASE HELP!

10 ビュー (過去 30 日間)
Kevin Zhou
Kevin Zhou 2020 年 9 月 27 日
回答済み: Rafael Hernandez-Walls 2020 年 9 月 27 日
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

採用された回答

Matt J
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 件のコメント
Kevin Zhou
Kevin Zhou 2020 年 9 月 27 日
AWESOME! Thank u so much

サインインしてコメントする。

その他の回答 (1 件)

Rafael Hernandez-Walls
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);

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by