0

私が持っているコードは次のとおりです。

T=[0:0.1:24];
omega=((12-T)/24)*360;
alpha = [0:1:90];
latitude=35;
delta=[-23.45:5:23.45];
sind(alpha)=sind(delta).*sind(latitude)+cosd(delta).*cosd(latitude).*cosd(omega)
cosd(phi)=(sind(alpha).*sind(latitude)-cosd(delta))./(cosd(alpha).*cosd(latitude))

alpha は私の y 軸を表し、0 ~ 90 度の角度です。phi は x 軸を表し、-120 から +120 までの角度です。全体的な結果は、半正弦波のように見えるはずです。

その最後の行を入力しようとするたびに、内部行列の次元が一致しなければならないというエラーが表示されます。そこで、定義した変数が機能するように、マトリックスで reshape を使用しようとしました。しかし、私は「???」を取得します ??? 添え字のインデックスは、実数の正の整数または論理値のいずれかでなければなりません。

方程式で使用するために、新しい変数セットを定義するたびに行列を再形成しなければならないのは非常に面倒です。これらの変数は、軸の範囲を定義するために使用されます。それらをレイアウトできるより良い方法や、毎回確実に機能する自動コマンドはありますか?

次のようなものを使用して、アルファとファイをグラフとしてプロットしたい

plot(alpha,phi) 

しかし、これらのエラーを乗り越えることはできませんか? define x-axis [0:90]、define y-axis [-120:120] などのコマンドを使用することはできませんか? 私はこの問題にあまりにも多くの時間を費やしましたが、解決策を見つけることができません。グラフをプロットしたいだけです。誰か助けてください!ありがとう。

ありがとう

4

3 に答える 3

1

ここから始めましょう:

% Latitude
L=35;

% Hour Angle
h = [-12:5/60:12];
w = 15*h;

% Initialize and clear plot window
figure(1); clf;

% Plot one day per month for half of the year
for N = 1:30:365/2
    % Declination
    d = 23.45*sind(360*(284+N)/365);

    % Sun Height
    alpha = asind(sind(L)*sind(d) + cosd(L)*cosd(d)*cosd(w));

    % Solar Azimuth 
    x = ( sind(alpha)*sind(L)-sind(d) )./( cosd(alpha)*cosd(L) );
    y = cosd(d)*sind(w)./cosd(alpha);
    phi = real(atan2d(y,x));

    % Plot
    plot(phi,alpha); hold on;
end

hold off;
grid on;
axis([-180, 180, 0, 90]);
xlabel('Solar Azimuth')
ylabel('Solar Elevation')

この関数asindは本質的に、-90 ~ 90 の範囲の値を返すように制限されています。つまり、リンク先のような 240 度を超えるプロットは得られません。プロットが +/- 90 度で変曲しないようにするには、象限を推測する方法を見つける必要があります。更新: を使用して角度を取得するために余弦項を追加しましたatan2dMatlab プロット

これで、Matlab を使用して目的の結果を得る方法を理解するのに十分な情報が得られることを願っています。

于 2013-10-16T15:11:51.983 に答える