2017-09-14 7 views
1

2つの異なる行列を使用して計算を実行しようとしていますが、わずかに異なる形式になっています。不規則なステップを持つ行列の空白を埋める

1つのマトリックスは、波長200nmから2600nmまでの材料の反射率値で満たされているため、個々の波長は1の単位で反射率値を持ちます。

第2のマトリックスは、各波長に存在するエネルギーの量を格納する太陽エネルギーマトリックスです。しかし、これは不規則な段差を有し、280nmから4000nmの範囲である。しかし、280nmから400nmまでは0.5nm単位で、400nmから1705nmまでは1nm単位で、1750nmから4000nmまでは5nm単位で行われます。

私がやってみようとしてきたことは、この太陽エネルギーマトリックスを編集して、1nmのステップで全範囲を与えることです。上記

filename='H:\I_sol data.csv'; 
Dataisol = csvread(filename,1,0); 

for j=1:1:count 
    if Dataisol(j,:)~=Dataisol(j+1,:)-1 %compare the wavelength to the value of the next wavelegth 
     newx=(Dataisol(j,:)+[1,0])  %if the next wavelength is not 1 larger than the previous, add a new row 
     newx(1,2)=NaN     %make the new row to add blank 
     Dataisol=insertrows(Dataisol, newrow, j+1) %insert the new blank row 
    end 
end 

私はちょうど波長間5nmのジャンプがある新しい行に追加することにより、ギャップを埋めるためにしようとしています現時点では、使用を開始したものです。いったん私は欠けている要素を作成することができたら、私は正しい値(おそらく2つの値の中間点)にそれらを移入することに注意を向けるでしょう。

私の最終目標は両方の行列をトリミングすることですそれらは両方とも同じ開始波長と終了波長を持ち、両方とも1nmの増分を持ちます(興味のため、またはこれが誰かにとって些細なことであれば助言をします)。これらのギャップを埋める方法やマトリックスに必要な変更を加える方法を知っている人は、大きな助けになるでしょう! csvファイルの

例:ここ

Wvlgth nm Etr W*m-2*nm-1 
280.0 8.2000E-02 
280.5 9.9000E-02 
281.0 1.5000E-01 
281.5 2.1200E-01 
282.0 2.6700E-01 
282.5 3.0300E-01 
283.0 3.2500E-01 
283.5 3.2300E-01 
284.0 2.9900E-01 
284.5 2.5024E-01 
285.0 1.7589E-01 
285.5 1.5500E-01 
286.0 2.4200E-01 
...  ..... 
428.0 1.6510E+00 
429.0 1.5230E+00 
430.0 1.2120E+00 
431.0 1.0990E+00 
432.0 1.8220E+00 
433.0 1.6913E+00 
434.0 1.5600E+00 
435.0 1.7090E+00 
436.0 1.8680E+00 
437.0 1.9000E+00 
438.0 1.6630E+00 
439.0 1.6010E+00 
440.0 1.8300E+00 
.... ..... 
2205.0 8.0900E-02 
2210.0 8.0810E-02 
2215.0 8.0410E-02 
2220.0 7.9990E-02 
2225.0 7.8840E-02 
2230.0 7.8400E-02 
2235.0 7.7930E-02 
2240.0 7.6510E-02 
2245.0 7.6250E-02 
2250.0 7.5370E-02 
...  ..... 

は、私は次のように呼ばれるinterp1を関数で使用される変数を割り当てるために使用するコードである:

solx=Dataisol(:,1); 
soly=Dataisol(:,2); 
xi=280:1:2600; 
newsol = [xi interp1(solx,soly,xi,'linear','extrap')]; 

これらの変数に格納されている値と、受け取ったエラーは次のとおりです。

enter image description here

答えて

2

ここで必要な機能はinterp1です。 xiを考慮するすべての波長のベクトル、たとえばxi=280:1:2600;に設定します。

wavelengthは、ファイルからのすべてのあなたの不規則な値のベクトルであり、solはすべて太陽エネルギーの対応するベクトルである場合には(あなたがここにもあなたの単一の行列の列参照を使用することができます)

newsol = [xi interp1(wavelength,sol,xi,'linear','extrap')];

は、1列目に波長が1ずつ増加する新しい行列を与え、2列目にはファイルの値が直接存在し、直線的に補間されていない値が含まれます。

+0

"newsol = ..."という行は、単独で、またはforループ内に挿入する必要がありますか?私はそれをインパメントしようとしましたが、受信者は次のエラー:(エラーはgriddedInterpolantを使用しています。 –

+0

ループを必要としない – etmuse

+0

私はまだそれを働かせることができないようだ、私は私の変数がどのように見えるか、そして私が得ているエラーを示すいくつかのさらなる情報を追加した –

関連する問題