MATLAB中的平滑数据和图形

时间:2016-08-04 17:03:12

标签: matlab matlab-figure

我有一个小的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列中的时间和剩余温度值,尽管它们在脚本中重新排序以匹配它们沿管的位置。该脚本已经创建了一个漂亮的图形: enter image description here

但我真正想要的是平滑数据以填补图形峰值的空白。我认为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)

结果: enter image description here

如您所见,峰值之间仍然存在差距。

EDIT3: 我通过在现有的for循环之间添加以下内容来解决这个问题:

refined = zeros(size(tempplot));
refined(:,:) = 27;
for step = 1:size(temps,1)
    refined(step,:) = smooth(tempplot(step,:),'lowess');
end

然后我绘制了精致的'矩阵代替' tempplot'。 enter image description here

虽然它不是很顺利,但这是一个开始。

0 个答案:

没有答案