IF和FOR循环无法打印正确的值

时间:2020-02-02 12:16:59

标签: matlab for-loop if-statement trigonometry

我可能有一个愚蠢的问题,但我无法克服。

所有这些操作的目的是根据if语句中报告的规则定义两个变量F_hor_alb和F_ver_alb。

如果在这种情况下该角度(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

1 个答案:

答案 0 :(得分:0)

我不得不在您的代码上进行一些更改。

您似乎很难理解Matlab中for循环的工作原理。

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