Effacer les filtres
Effacer les filtres

Surf Plot using loops- Z must be a matrix, not a scalar or vector.

1 vue (au cours des 30 derniers jours)
Fabricio Pena
Fabricio Pena le 20 Juin 2017
Réponse apportée : Mechrod le 29 Juin 2017
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 commentaire
KSSV
KSSV le 20 Juin 2017
In your code z is a scalar, to use surf after meshgrid z should be matrix and a vector respectively.

Connectez-vous pour commenter.

Réponse acceptée

David Goodmanson
David Goodmanson le 20 Juin 2017
Modifié(e) : David Goodmanson le 20 Juin 2017
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.

Plus de réponses (1)

Mechrod
Mechrod le 29 Juin 2017
Do you have a picture of what you are trying plot? So we now what are the dimensions a, b, c1, c2 and etc.

Catégories

En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by