2016-12-27 24 views
0

ここで私の知らないことは許されますが、単純なMATLAB forループ内にデータをプロットする方法を理解できないようです。私は現在次のようなものを持っています:MATLAB:Forループ内のプロット

sigma=[.9 .9250 .95 .95]; 
gamma=[1 .0784 .54 .4862]; 
F=[0 0 .25 0;0 0 0 0;0 0 0 0;0 0 0 0]; 
for e=0:.01:.2 
    R_0=max(eig(F*inv((eye(4)-[sigma(1)*(1-gamma(1)) 0 0 0;... 
     sigma(1)*gamma(1) sigma(2)*(1-gamma(2)) 0 0;... 
     0 sigma(2)*gamma(2) sigma(3)*(1-gamma(3))*(1-e) sigma(4)*gamma(4);... 
     0 0 sigma(3)*gamma(3)*(1-e) sigma(4)*(1-gamma(4))])))) 
end 

私はeに関してR_0をプロットしようとしています。 forループは、eの各値(0、次に.01、次に.02、2まで)で動作し、R_0(1.1049、次に1.0138、.9365、.3949まで)の値を返します。だから、基本的には私がプロットしようとしているラインのグループにはポイントがありますが、これをプロットする方法を見つけることはできません。

もう一度、この質問は非常に単純なようですが、私は非常に助けていただければ幸いです。

答えて

1

最初に、コードの現在のバージョンでは、それぞれの繰り返しで値を上書きしていますが、各繰り返しでR_0の値を収集する必要があります。

すべての値を保存するには、配列にR_0を使用して、ループ内でインクリメントするカウンタを導入する必要があります。 plot関数を使用してデータをプロットすることができます。あなたが見ることができ、次のコードでは

conterの初期化各itaration

ループ

sigma=[.9 .9250 .95 .95]; 
gamma=[1 .0784 .54 .4862]; 
F=[0 0 .25 0;0 0 0 0;0 0 0 0;0 0 0 0]; 

% Initialize the counter 
cnt=0; 

for e=0:.01:.2 
    % Increment the counter 
    cnt=cnt+1; 
    % Use R_0 as an array and store the value of each iteration 

    R_0(cnt)=max(eig(F*inv((eye(4)-[sigma(1)*(1-gamma(1)) 0 0 0;... 
     sigma(1)*gamma(1) sigma(2)*(1-gamma(2)) 0 0;... 
     0 sigma(2)*gamma(2) sigma(3)*(1-gamma(3))*(1-e) sigma(4)*gamma(4);... 
     0 0 sigma(3)*gamma(3)*(1-e) sigma(4)*(1-gamma(4))])))) 
end 
% Plot the results 
plot([0:.01:.2],R_0,'o-') 
plot機能の使用時 cnt

その増分

enter image description here

このことができます

希望、

Qapla」

+0

感謝。後続の質問と同様に、グラフにy = 1の線を追加すると(ここに示すように:https://i.stack.imgur.com/fO7sc.jpg)、最も良い方法は何ですか?この交差点を見つける – Dibbs

+0

ところで、これは私のコードです – Dibbs

+0

申し訳ありませんが、私は押し続けます。 graph1 = plot([0:.01:.2]、R_0) を保持する graph2 = plot(xlim、[1]) – Dibbs

関連する問題