使用线性插值而不使用interp1的matlab代码

我有一个Excel电子表格第一列是给定的高度,其他三列是依赖于高度的Kz值(高压暴露系数)。 我需要编写一个代码,当给定一个特定的高度时,可以使用线性插值来计算Kz并在命令窗口中显示结果。 。 如果用户指定的高度大于500英尺并终止,则还应显示错误消息。 提示用户指定曝光types提示用户指定高于地面的高度根据指定的高度和指定的曝光types确定正确的下限和上限

我使用xlsread导入了电子表格,但是我不能使用interp1函数。

第一栏的第二栏的范围从.7000到1.56,第三栏的范围从.85到1.77,第四栏的范围从1.03到第二栏的范围是[15:5:30,30:10:100,100:20:200,200:50:500] 1.89

data=xlsread('PressureCoef.xslx'); Array=size(data); Height=0; Exposure_B=0; Exposure_C=0 Exposure_D=0 Height(: 1) Height=input('enter the height/n'); For Exposure=input('enter exposure type /n'); kz(:,2:4); kz=y1+((x-x1)(y2-y1)/(x2-x1) disp(kz) if Kz<1.56 && >.70 disp('Exposure B') elseif Kz<1.77 && > .980 disp('Exposure C') elseif Kz<1.89 && >1.16 disp('Exposure D') end end 

所以你的问题归结为“我怎么find方程的值kz=y1+((x-x1)(y2-y1)/(x2-x1)

最简单的一个:

 x = Height 

那么x1需要是来自你的“第一列”的值,它比x小,而x2是更大的值:

我只是假设data是一个很好的数组,因为你没有给我们提供任何信息

 X = data(:,1); x1 = max(X(X<=x)); x2 = min(X(X>x)); 

y只是来自右列,他们的行对应于x s:

 ExposureNum = find('ABC' == Exposure); y1 = data(X==x1, ExposureNum); y2 = data(X==x2, ExposureNum);