我正在尝试使用两个不同的矩阵进行计算,但它们的形式略有不同。
一个矩阵(为了利益)填充了波长在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')];
存储在这些变量中的值以及我收到的错误如下:
答案 0 :(得分:2)
这里需要的功能是interp1。将xi设置为您要考虑的所有波长的矢量,例如xi=280:1:2600;
。
如果wavelength
是文件中所有不规则值的向量,sol
是所有太阳能的对应向量(您也可以在此处使用单个矩阵的列引用)
newsol = [xi interp1(wavelength,sol,xi,'linear','extrap')];
将为您提供一个在第1列中波长增加1的新矩阵,第2列将直接包含您文件中存在的值,并且不包含线性插值值。