Surf Plot using loops- Z must be a matrix, not a scalar or vector.
1 次查看(过去 30 天)
显示 更早的评论
Hello everyone,
I'm trying to plot a surface with the following code, but I keep getting this error. I don't know how to solve this, could someone help me?
Thanks in advance.
clear all;
% Welding parameters
%----------------------------
U = 28; %Voltage (V)
I = 260; %Current (A)
n = 0.9; %Efficiency
Q = U*I*n;
% Goldak Double-ellipsoid
%------------------------
a = 5;
b = 6;
C1 = 5;
C2 = 20;
FF = 0.6;
FR = 1.4;
x = [-10:.2:10];
y= 0;
for z = -15:.05:15
if z < 0
C = C1;
F = FF;
else
C = C2;
F = FR;
end
end
[xx,zz] = meshgrid(x,z);
A = ((6*sqrt(3)*F*Q)/(a*b*C*pi*sqrt(pi)));
B = exp(-3*(xx.^2/a.^2)).*exp(-3*(zz.^2/C.^2));
q = A*B;
surf (xx,zz,q)
Error using surf (line 57)
Z must be a matrix, not a scalar or vector.
Error in Goldak2 (line 34)
surf (xx,zz,q)
1 个评论
KSSV
2017-6-20
In your code z is a scalar, to use surf after meshgrid z should be matrix and a vector respectively.
采纳的回答
David Goodmanson
2017-6-20
编辑:David Goodmanson
2017-6-20
Hi Fabricio, the z vector does not survive (except for its last value) after the for loop. z is a scalar at that point. So you need to do something like
z = -15:.05:15;
for z1 = z
if z1 < 0
C = C1;
F = FF;
else
C = C2;
F = FR;
end
end
[xx,zz] = meshgrid(x,z);
If you change the z spacing to something like .2 instead of .05, the plot is easier to see.
0 个评论
更多回答(1 个)
Mechrod
2017-6-29
Do you have a picture of what you are trying plot? So we now what are the dimensions a, b, c1, c2 and etc.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Surface and Mesh Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!