IF 和 FOR 循环不打印正确的值
IF and FOR cycle do not print correct values
我有一个可能很愚蠢的问题,但我无法解决它。
这一切的目的是让F_hor_alb和F_ver_alb这两个变量根据if语句中报告的规则定义。
如果该角度的余弦值 (60wt) 大于 -0.37(阴影),则这两个变量必须呈正弦趋势。否则它们的价值为零。
通过验证余弦和变量的输出,第一个是应该的,但变量的所有值都等于零,除了第一个,因此不遵循余弦本身假定的值。
IF里面有没有什么不行的?
(Fhor 和 Fver 已经在另一段代码中定义了)。
Example of output
Cos(60wt): 0,9980 0,9970 0,9960 .....
F_hor_alb: 0,9980*F_hor 0 0 0 0 0 0 0 0 0 0
F_ver_alb: 0,9980*F_ver 0 0 0 0 0 0 0 0
Re = 6378; % Radius of Earth (km)
z = 500; % Orbital Altitude (km)
mu = 3.986004415e5 % Gravitational constan of Earth (km3/s2)
OrbitalT = 2*pi*sqrt(((Re+z)^3)/mu); % Orbital Period (s)
orbits = 30; % Number of cycles for the simulation
simtime = (OrbitalT*orbits)/60; % Simulation time (min)
simstep = 1; % Sampling step (min)
w=2*pi/OrbitalT;
F_hor_alb = zeros(ceil(simtime));
F_ver_alb = zeros(ceil(simtime));
for t = 1:simstep:ceil(simtime)
if cos(w*t*60)>shadow
F_hor_alb = F_hor*cos(w*t*60);
F_ver_alb = F_ver*cos(w*t*60);
else
F_hor_alb = 0;
F_ver_alb = 0;
end
F_hor_alb(t) = F_hor_alb;
F_ver_alb(t) = F_ver_alb;
coseno(t)=cos(w*t*60);
t=t+1;
end
我不得不更改您的代码中的一些内容。
您似乎无法理解 for 循环在 Matlab 中的工作原理。
Re = 6378; % Radius of Earth (km)
z = 500; % Orbital Altitude (km)
mu = 3.986004415e5 % Gravitational constan of Earth (km3/s2)
OrbitalT = 2*pi*sqrt(((Re+z)^3)/mu); % Orbital Period (s)
orbits = 30; % Number of cycles for the simulation
simtime = (OrbitalT*orbits)/60; % Simulation time (min)
simstep = 1; % Sampling step (min)
w=2*pi/OrbitalT;
F_hor = 1;
F_ver = 2;
shadow = 0.5;
t = (1:simstep:ceil(simtime))';
F_hor_alb = nan(size(t));
F_ver_alb = nan(size(t));
coseno = nan(size(t));
for i = 1:length(t)
if cos(w*t(i)*60)>shadow
disp('here');
F_hor_alb(i) = F_hor*cos(w*t(i)*60);
F_ver_alb(i) = F_ver*cos(w*t(i)*60);
else
F_hor_alb(i) = 0;
F_ver_alb(i) = 0;
end
coseno(i)=cos(w*t(i)*60);
end
我有一个可能很愚蠢的问题,但我无法解决它。
这一切的目的是让F_hor_alb和F_ver_alb这两个变量根据if语句中报告的规则定义。
如果该角度的余弦值 (60wt) 大于 -0.37(阴影),则这两个变量必须呈正弦趋势。否则它们的价值为零。
通过验证余弦和变量的输出,第一个是应该的,但变量的所有值都等于零,除了第一个,因此不遵循余弦本身假定的值。 IF里面有没有什么不行的?
(Fhor 和 Fver 已经在另一段代码中定义了)。
Example of output
Cos(60wt): 0,9980 0,9970 0,9960 .....
F_hor_alb: 0,9980*F_hor 0 0 0 0 0 0 0 0 0 0
F_ver_alb: 0,9980*F_ver 0 0 0 0 0 0 0 0
Re = 6378; % Radius of Earth (km)
z = 500; % Orbital Altitude (km)
mu = 3.986004415e5 % Gravitational constan of Earth (km3/s2)
OrbitalT = 2*pi*sqrt(((Re+z)^3)/mu); % Orbital Period (s)
orbits = 30; % Number of cycles for the simulation
simtime = (OrbitalT*orbits)/60; % Simulation time (min)
simstep = 1; % Sampling step (min)
w=2*pi/OrbitalT;
F_hor_alb = zeros(ceil(simtime));
F_ver_alb = zeros(ceil(simtime));
for t = 1:simstep:ceil(simtime)
if cos(w*t*60)>shadow
F_hor_alb = F_hor*cos(w*t*60);
F_ver_alb = F_ver*cos(w*t*60);
else
F_hor_alb = 0;
F_ver_alb = 0;
end
F_hor_alb(t) = F_hor_alb;
F_ver_alb(t) = F_ver_alb;
coseno(t)=cos(w*t*60);
t=t+1;
end
我不得不更改您的代码中的一些内容。
您似乎无法理解 for 循环在 Matlab 中的工作原理。
Re = 6378; % Radius of Earth (km)
z = 500; % Orbital Altitude (km)
mu = 3.986004415e5 % Gravitational constan of Earth (km3/s2)
OrbitalT = 2*pi*sqrt(((Re+z)^3)/mu); % Orbital Period (s)
orbits = 30; % Number of cycles for the simulation
simtime = (OrbitalT*orbits)/60; % Simulation time (min)
simstep = 1; % Sampling step (min)
w=2*pi/OrbitalT;
F_hor = 1;
F_ver = 2;
shadow = 0.5;
t = (1:simstep:ceil(simtime))';
F_hor_alb = nan(size(t));
F_ver_alb = nan(size(t));
coseno = nan(size(t));
for i = 1:length(t)
if cos(w*t(i)*60)>shadow
disp('here');
F_hor_alb(i) = F_hor*cos(w*t(i)*60);
F_ver_alb(i) = F_ver*cos(w*t(i)*60);
else
F_hor_alb(i) = 0;
F_ver_alb(i) = 0;
end
coseno(i)=cos(w*t(i)*60);
end