我有一个小的MATLAB(R2010a)脚本,可以导入一个温度数据文件,并将它们绘制成一个表示沿着陶瓷管的点的曲面图。
raw = importdata('C:\Users\Jonathan\Documents\EMP\LabJack\He_Test_7-29\SiMgO_8-1.dat');
temps = raw(:,[9 3:8]);
time = round((raw(:,1) - 3552917232.273) * 10.^1) / 10.^1;
x = (0:41)*0.0254; % Record the x scale for tube plots
tempplot = zeros(length(time),size(x,2));
tempplot(:,:) = 27;
tempplot(:,end) = temps(:,1);
for n = 1:3
tempplot(:,2+2*n) = temps(:,8-n);
tempplot(:,31+2*n) = temps(:,5-n);
end
for t = 1:length(time)*.01
timeplot(t) = transpose(time(t)) / 36;
end
%* Plot tube temperature versus x and t as wire-mesh and contour plots
tempplot = tempplot(1:100:end-74,:);
figure(3); clf;
surf(timeplot,x,transpose(tempplot)); % Wire-mesh surface plot
shading interp
xlabel('Time (hours)'); ylabel('x (meters)'); zlabel('T(x,t) (C)');
title('Diffusion of temp along mullite tube (experimental)');
以下是导入数据的示例:
3552917232.273000 299.745906 27.491608 27.463276 27.420625 27.173824 27.198507 26.933061 26.944948
3552917233.274000 299.745906 27.462362 27.484601 27.421235 27.185099 27.221056 26.945863 26.965064
3552917234.274000 299.745906 27.476376 27.473025 27.413009 27.196069 27.218923 26.935195 26.967503
3552917235.276000 299.745906 27.490390 27.460535 27.403869 27.203382 27.231721 26.967198 26.948606
第一列是时间,第二列是冷结控制温度。我最感兴趣的是第3-9列中的时间和剩余温度值,尽管它们在脚本中重新排序以匹配它们沿管的位置。该脚本已经创建了一个漂亮的图形:
但我真正想要的是平滑数据以填补图形峰值的空白。我认为interp1或interp2能够实现这一点,但到目前为止我还没弄清楚。任何帮助表示赞赏。
修改
根据excaza的要求:
我和interp2一起玩过,比如
y = interp2(tempplot)
或
y = interp2(x,timeplot,tempplot,xi,yi)
但我不明白xi和yi是如何在这个函数中使用的。
EDIT2: 为了回应rayryeng将此标记为重复问题,以下是使用interp2时会发生的更全面的示例:
[x1,y1] = meshgrid(1:size(tempplot,2),1:size(tempplot,1));
[x2,y2] = meshgrid(1:.5:size(tempplot,2),1:.5:size(tempplot,1));
refined = interp2(x1,y1,tempplot,x2,y2,'linear');
surf(refined)
如您所见,峰值之间仍然存在差距。
EDIT3: 我通过在现有的for循环之间添加以下内容来解决这个问题:
refined = zeros(size(tempplot));
refined(:,:) = 27;
for step = 1:size(temps,1)
refined(step,:) = smooth(tempplot(step,:),'lowess');
end
然后我绘制了精致的'矩阵代替' tempplot'。
虽然它不是很顺利,但这是一个开始。