2017-09-14 52 views
1

我正在嘗試使用兩個不同的矩陣執行計算,但它們的形式稍有不同。填充具有不規則步驟的矩陣的間隙

一個矩陣(爲了利益)填充了波長爲200nm到2600nm的材料的反射率值,因此每個單獨的波長以1爲增量具有反射率值。

第二個矩陣是一個太陽能矩陣,它存儲了每個波長存在的能量數量。然而,這一個不規則的步驟,範圍從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的跳躍將填補國內空白。一旦我能夠創建缺少的元素,然後我將注意力用正確的值填充它們(可能是兩個給定值之間的中點)

我的最終目標是修剪兩個矩陣所以它們都具有相同的起始和結束波長,並且兩者的整個增量都是1納米(也是爲了感興趣的目的,或者對於某人而言,這是微不足道的建議)。如果有人知道如何填補這些空白或對矩陣進行必要的修改,那將是一個很大的幫助! 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

我仍然似乎無法得到它的工作,我已經添加了一些更多信息,顯示了我的變量的外觀,以及我得到的錯誤 –