填充具有不规则步骤的矩阵的间隙

时间:2017-09-14 13:17:04

标签: arrays matlab csv matrix increment

我正在尝试使用两个不同的矩阵进行计算,但它们的形式略有不同。

一个矩阵(为了利益)填充了波长在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的跳跃。一旦我能够创建缺失的元素,那么我将把注意力转向用正确的值填充它们(可能是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

1 个答案:

答案 0 :(得分:2)

这里需要的功能是interp1。将xi设置为您要考虑的所有波长的矢量,例如xi=280:1:2600;

如果wavelength是文件中所有不规则值的向量,sol是所有太阳能的对应向量(您也可以在此处使用单个矩阵的列引用)

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

将为您提供一个在第1列中波长增加1的新矩阵,第2列将直接包含您文件中存在的值,并且不包含线性插值值。