ERROR : Unrecognized function or variable , Index exceeds the number of array elements

2 visualizzazioni (ultimi 30 giorni)
Graphs of parallel and vertical polarization of microwaves are being implemented as matlabs.
However, the error mentioned in the title occurred.
Please tell me how to solve this error.
er1 = 2.55;
er2 = 1;
eta_1 = 377;
eta_2 = 377/sqrt(er1);
sin(theta_b) = 1/sqrt(1+er1/er2);
cos(theta_t) = sqrt(1-er1*sin(theta_b)^2/er2);
for theta_i = [1:90];
parallel_pol = (eta_2*cos(theta_t)-eta_1*cos(theta_i))/(eta_2*cos(theta_t)+eta_1*cos(theta_i));
end
plot(theta_i,abs(parallel_pol),"-","r","LineWidth",2)

Risposta accettata

Voss
Voss il 16 Mar 2022
Modificato: Voss il 16 Mar 2022
This line:
sin(theta_b) = 1/sqrt(1+er1/er2);
is not valid syntax because you cannot assign a value to sin(theta_b). If you want to assign a value to theta_b such that the mathematical relation above is true, you could do this:
theta_b = asind(1/sqrt(1+er1/er2));
which is basically "solving for" theta_b in terms of the other variables, using the inverse sine function asind(), which returns an angle in degrees.
And since you're dealing with angles in degrees here, you should use sind and cosd, instead of sin and cos, which expect input angles to be in radians.
I made those changes and a few others below:
er1 = 2.55;
er2 = 1;
eta_1 = 377;
eta_2 = 377/sqrt(er1);
% sin(theta_b) = 1/sqrt(1+er1/er2);
% cos(theta_t) = sqrt(1-er1*sin(theta_b)^2/er2);
theta_b = asind(1/sqrt(1+er1/er2));
theta_t = acosd(sqrt(1-er1*sind(theta_b)^2/er2));
% for theta_i = [1:90];
% parallel_pol = (eta_2*cos(theta_t)-eta_1*cos(theta_i))/(eta_2*cos(theta_t)+eta_1*cos(theta_i));
% end
theta_i = 1:90;
parallel_pol = (eta_2*cosd(theta_t)-eta_1*cosd(theta_i))./(eta_2*cosd(theta_t)+eta_1*cosd(theta_i));
% plot(theta_i,abs(parallel_pol),"-","r","LineWidth",2)
plot(theta_i,abs(parallel_pol),"-r","LineWidth",2);
xlabel('theta_i');
ylabel('parallel\_pol');
  7 Commenti
Voss
Voss il 16 Mar 2022
Check if you have any variables called sind, sin, acosd, or sqrt, because there is no indexing going on in that line, which is what the error is about, so it seems that some variable may have the same name as one of those functions. And maybe put a clear statement at the top of your script (I don't if that matters in a Live Script).
Also, note that I changed sin to sind in that line - it was an oversight in my original answer.
건희 이
건희 이 il 16 Mar 2022
OK. I'll review it again based on your answer. Thank you very much for everything.

Accedi per commentare.

Più risposte (2)

David Hill
David Hill il 16 Mar 2022
er1 = 2.55;
er2 = 1;
eta_1 = 377;
eta_2 = 377/sqrt(er1);
sin_theta_b = 1/sqrt(1+er1/er2);%just a scalar sin(theta_b) makes no sense
cos_theta_t = sqrt(1-er1*sin_theta_b^2/er2);%just scalar cos(theta_t) makes no sense
theta_i = 1:90;%no need for a loop (I assume this is in degrees)
parallel_pol = (eta_2*cos_theta_t-eta_1*cosd(theta_i))./(eta_2*cos_theta_t+eta_1*cosd(theta_i));%I assume you want cosd
plot(theta_i,abs(parallel_pol))

Enrico Gambini
Enrico Gambini il 16 Mar 2022
Hi, try this.
er1 = 2.55;
er2 = 1;
eta_1 = 377;
eta_2 = 377/sqrt(er1);
sin_theta_b = 1/sqrt(1+er1/er2);
cos_theta_t = sqrt(1-er1*sin_theta_b^2/er2);
for i = [1:90];
parallel_pol(i) = (eta_2*cos_theta_t-eta_1*cos(i))/(eta_2*cos_theta_t+eta_1*cos(i));
end
plot([1:90],abs(parallel_pol),"r-","LineWidth",2);

Categorie

Scopri di più su Mathematics in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by