2011-07-23 3 views
0

私はx値の配列とy値の配列を持っています。プロットすると、2つのピークがあり、それらの領域の傾きは非常に急である。私の目標は、そのピークの半値全幅を見つけることです。私はyの値を半分で見つけることができますが、傾きの急峻さとデータが配列にあるという事実を考慮すると、このy値に対応する4つのx値を見つけるのは難しいです。Matlab:データが配列内にあるときのy値を指定した補間されたx値の検索

私はループを使って、与えられたy値の前後にある点を見つけ、それらを線に当てはめることを考えていました(高い勾配はそれを作るので曲線は線形方程式で近似することができますこれらの方程式を使って補間されたx値を見つけ出します。この値から、全幅を計算することができます。ここで

は、これまでのところ、このための私のコードです:私はこのコードを実行すると

% yarray is list of y values 
    % A = y value where I need to find the 4 corresponding x values 
    for k = 1:length(yarray)-1 
     if yarray(k+1) <= A & yarray(k) >= A 
      M = [yarray(k) yarray(k+1) k k+1] 
     elseif yarray(k+1) >= A & yarray(k) <= A 
      M = [yarray(k) yarray(k+1) k k+1] 
     end 
    end 

は、4 Mの配列がありますが、それを取得するたびに上書きさ。後で呼び出すことができるように、これらの配列を「保存」するにはどうすればよいですか?この問題に対するより簡単なアプローチがありますか?私の質問を明確にすることができたら教えてください。どうもありがとう!

+0

書式設定を、あなたのコード:

とにかく、一つのピークとの簡単なデモは、状況を明確にすることがあります。今あなたの意図に従っていることを確認してください。ありがとう – eat

答えて

0

私は、後で使用するためにアレイを保存するための答えを提供することができ、私はこれに対する3つのアプローチを考えることができます。

1)配列をmatfileに保存します。条件文の後に次の行を置き、saved_array_k.matという名前のmatfileに配列を保存します。ここで、kは繰り返し番号です。

M = [yarray(k) yarray(k+1) k k+1]; 
save(['saved_array_' num2str(k) '.mat'],'M'); 

2)evalコールを使用して、4つのアレイを動的に作成することもできます。以下のようなもので、あなたの条件式の各代入文を交換してください:あなたのケースで

eval(['M' num2str(k) '= [yarray(k) yarray(k+1) k k+1];']); 

を、これは、変数、M1M2M3M4、それぞれが必要な情報が含まれますが生成されます。

3)行列の各行に必要なデータが含まれている結果を含む行列を作成します。 (これはおそらく最高です)。使用あなたの代入文ではM

よう
M = zeros(4); % each of your arrays has length 4 and there are 4 of them 

行列を作成します。

M(:,k) = [yarray(k) yarray(k+1) k k+1]; 

は、この情報がお役に立てば幸いです。

0

はい、問題へのアプローチが簡単です。はい、質問を明確にする必要があります。 (例えば、FWHMのような頭字語は一般的に知られておらず、あなたのデータがどこから来ているのかを記述したいと思うかもしれません。

>>> x= linspace(0, pi, 100); y= sin(x); 
>>> mi= min(y); ma= max(y); 
>>> x_above= x(y> (ma- mi)/ 2); 
>>> fwhm= x_above(end)- x_above(1) 
fwhm = 2.0627 
関連する問題