Error: Data must be numeric, datetime, duration, categorical, or an array convertible to double.

Hello everyone,
I am trying to plot a function that has two different variables: theta and phi.
Theta = -pi/2:0.1:pi/2
Phi = Specific Values at 0 and pi/2
I have an error that says:
"Error: Data must be numeric, datetime, duration, categorical, or an array convertible to double."
I've tried looking up this error on different discussions. However, I wasn't able to find anything that helped with my specific scenario.
I have tried different methods and approaches: Using "symbolic variables", fimplicit function, fplot function, etc. However, I got different errors everytime I tried a different approach.
I attached my code for reference:
Plotting_Theta_Phi_Function.m

 Respuesta aceptada

tic
close all; clc;
% Declaring Theta and Phi Variables
theta = 0:0.1:pi/2;
% Phi Values
phi_E_Plane = 0;
phi_H_Plane = pi/2;
phi = [phi_E_Plane, phi_H_Plane];
% Declaring x and y variables as theta and phi
x = sin(phi);
y = cos(theta);
% Function Z is a combination of x and y
Z = @(x,y) x.^2.*y + y.^2.*x;
% Calculating E-Plane and H-Plane "values"
E_Plane = Z(theta,phi(1));
H_Plane = Z(theta,phi(2));
% Plotting E-Plane = Theta Range at phi = 0
plot(theta,E_Plane);
% Holding on to put the H-Plane on the same grid as the E-Plane
hold on;
% Plotting H-Plane = Theta Range at phi = pi/2
plot(theta,H_Plane);
% Placing a grid on the graph
grid on;
% Title, Axes, and Legends
title('E-Plane (dB) and H-Plane (dB) versus Theta (Radians)');
legend({'E-Plane','H-Plane'},'Location','northwest');
xlabel('Theta (Radians)');
ylabel('Magnitude (dB)');
toc
Elapsed time is 0.343450 seconds.

5 comentarios

Hello Voss,
Thank you for the quick response.
My main concern is that my function "Z" is going to grow larger and larger. In other words, its going to be comprised of many different variables and functions that include phi and theta. At that point, I won't be able to "directly" write out the function for "Z".
For example:
x = sin(theta)
y = cos(phi)
a = sin(2*theta)
Y = (a).^2 + (y).^2 + (x).^2
R = 2*Y + (a).^2
Z = (R).^2 + (Y).^2
That's why I used the function "F" to say:
F = @(theta,phi) (Z)
Is there another method to plot "Z" for the specific cases that I have? Thanks.
F = @(theta,phi) (Z)
means that F is to be defined as an anonymous function that accepts up to two parameters. When invoked, the anonymous function will ignore the two parameters, and will return whatever is stored in Z.
But what is stored in Z? Well, you do several calculations on numeric objects, to calculate Z. So Z is a numeric object.
... Except that chances are that theta and phi are undefined at that point, and x = sin(theta) is likely to fail.
You have two choices:
function Z = F(theta, phi)
x = sin(theta);
y = cos(phi);
a = sin(2*theta);
Y = (a).^2 + (y).^2 + (x).^2;
R = 2*Y + (a).^2;
Z = (R).^2 + (Y).^2;
end
or
x = @(theta,phi) sin(theta);
y = @(theta,phi) cos(phi);
a = @(theta,phi) sin(2*theta);
Y = @(theta,phi) a(theta,phi).^2 + y(theta,phi).^2 + x(theta,phi).^2;
R = @(theta,phi) 2*Y(theta,phi) + a(theta,phi).^2;
Z = @(theta,phi) R(theta,phi).^2 + Y(theta,phi).^2;
F = Z;
Voss
Voss el 8 de Jul. de 2024
Editada: Voss el 8 de Jul. de 2024

It may be convenient if you write a named function that calculates the value(s) of Z, given value(s) of phi and theta and whatever else Z depends on. To use your example:

function Z = getZ(theta,phi)
x = sin(theta);
y = cos(phi);
a = sin(2*theta);
Y = a.^2 + y.^2 + x.^2;
R = 2*Y + a.^2;
Z = R.^2 + Y.^2;
end

Which is the same (except for the name of the function) as the first option suggested by Walter.

Hi Voss and Walter,
Thank you for providing this guidance. As far as everything else (plotting, setting the step size for theta, etc), is that meant to be done within the function or outside?
I understand how to "execute the function" F(theta,phi) value. However, I'm trying to extract and then plot specific values for "F".
Would I need to write "seperate" functions for each "task" I'm trying to do: plotting, setting grid size, axes limits, etc? Or can I just write everything into one function?
theta = -pi/2:0.01:pi/2;
phi = [0 pi/2];
E_Plane = F(theta,0);
H_Plane = F(theta,pi/2)
% Then plotting the E-plane and H-plane
plot(theta,E_Plane)
hold on;
plot(theta,H_Plane)
% Other Axis and Grid Settings....
% etc...
The function F (or getZ as I called it) would only calculate Z given theta and phi. Everything else would be outside the function, either in a script or in separate functions if you prefer.

Iniciar sesión para comentar.

Más respuestas (1)

% Declaring Theta and Phi Variables
theta = 0:0.1:pi/2;
% Phi Values
phi_E_Plane = 0;
phi_H_Plane = pi/2;
% Declaring x and y variables as theta and phi
x = @(phi)sin(phi);
y = @(theta)cos(theta);
% Declaring the function Z as a function of theta and phi
F = @(theta,phi)x(phi).^2.*y(theta) + y(theta).^2.*x(phi);
% Calculating E-Plane and H-Plane "values"
E_Plane = F(theta,phi_E_Plane);
H_Plane = F(theta,phi_H_Plane);
% Plotting E-Plane = Theta Range at phi = 0
plot(theta,E_Plane);
% Holding on to put the H-Plane on the same grid as the E-Plane
hold on;
% Plotting H-Plane = Theta Range at phi = pi/2
plot(theta,H_Plane);
% Placing a grid on the graph
grid on;
% Title, Axes, and Legends
title('E-Plane (dB) and H-Plane (dB) versus Theta (Radians)');
legend({'E-Plane','H-Plane'},'Location','northwest');
xlabel('Theta (Radians)');
ylabel('Magnitude (dB)');

1 comentario

Hello Torsten,
Thank you for the quick response.
My main concern is that my function "Z" is going to grow larger and larger. In other words, its going to be comprised of many different variables and functions that include phi and theta. At that point, I won't be able to "directly" write out the function for "Z".
For example:
x = sin(theta)
y = cos(phi)
a = sin(2*theta)
Y = (a).^2 + (y).^2 + (x).^2
R = 2*Y + (a).^2
Z = (R).^2 + (Y).^2
That's why I used the function "F" to say:
F = @(theta,phi) (Z)
Is there another method to plot "Z" for the specific cases that I have? Thanks.

Iniciar sesión para comentar.

Categorías

Más información sobre Variables en Centro de ayuda y File Exchange.

Productos

Versión

R2024a

Etiquetas

Preguntada:

el 7 de Jul. de 2024

Comentada:

el 8 de Jul. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by