2017-01-20 21 views
0

Matlabの2項ガウスモデルを使って2つのフィット曲線をプロットしようとしています。フィッティングしたカーブを個別にプロットしている間、プロットはフィッティングされたカーブ全体を表示しますが、フィッティングした両方のカーブを1つのプロットで組み合わせると、カーブの一部だけが表示され、残りはカットされます。同じプロット(MATLAB)でフィットした2つの曲線をプロットする

コード:

% Data  
X1 = [0 1 2 3 4 5 6 7 8 9 10]'; 
Y1 = [0.004 0.010 0.025 0.036 0.057 0.061 0.044 0.032 0.039 0.024 0.020]'; 
X2 = X1; 
Y2 = [0.012 0.018 0.032 0.046 0.067 0.071 0.054 0.042 0.025 0.019 0.011]'; 

[p1,p2,p3] = deal(0.04, 3.5, 1.6); 
[q1,q2,q3] = deal(0.03, 5.8, 4.02); 

% Options 
opt = fitoptions('method','NonlinearLeastSquares','Lower',[-Inf -Inf 0]); 
ind1 = isfinite(X1) & isfinite(Y1); 
ind2 = isfinite(X2) & isfinite(Y2); 

set(opt,'Startpoint',[p1 p2 p3 q1 q2 q3]); 
typ = fittype('gauss2'); 

% Fit 
cf1 = fit(X1(ind1),Y1(ind1),typ,opt); 
cf2 = fit(X2(ind2),Y2(ind2),typ,opt); 

figure(1) 
plot(cf1,'fit',0.95); 

figure(2) 
plot(cf2,'fit',0.95); 

% Problem lies here while combining the two plots 
figure(3) 
hold on 
plot(cf1,'fit',0.95); 
plot(cf2,'fit',0.95); 
  • 私は同じプロットで二つの曲線を表示するにはどうすればよいです?。
  • フィッティングされたカーブを、元の形状のほとんどを変更せずに、ポイントx = 0、y = 0.02から開始するにはどうすればよいですか?
+1

'plot(cf1、cf2)'を試してください。両方の曲線を同じプロットにプロットする必要があります。これは、データを収集し、データとフィットした曲線を1つのプロット 'plot(fitobject、data_x、data_y)'にプロットしたい場合にも有効です。 – fukurai

答えて

4

何が起こっている

figure(3) 
plot(cf1,'fit',0.95); 
hold on 
plot(cf2,'fit',0.95); 

によって

figure(3) 
hold on 
plot(cf1,'fit',0.95); 
plot(cf2,'fit',0.95); 

置き換えますか? hold onコマンドは、すでにプロットの軸を固定しています。フィットプロットは、この軸を使用してプロット範囲を決定するように見えます。ホールドの前にプロットすると、フィットプロットによってプロット範囲が自動的に決定されます。

+0

フィットしたカーブをどのようにして強制的に開始しますか?たとえば、フィット曲線がy = 0.02で始まるようにしたいのですか? – dykes

+0

'axis([xmin、xmax、ymin、ymax]);'コマンドを試してください。 – Florian

+0

このようにではなく、あなたが私を間違ってしまったら、すみません。私はフィットした曲線の両方が、その形状のほとんどを保持しながら、点x = 0、y = 0.02で始まるように探しています。初期点での形状のわずかな変化、例えばx = 0からx = 1まで許容される。 – dykes