2011-11-19 44 views
1

这是一个插值问题: 我有一个函数z = z(x,y),我知道x和y之间的关系就像x = f(y,x_0)。这里x_0是曲线在时间y = 0时的起点。假设x_0 = [0 1 2]有三个值。对于x_0的每一个值,我得到R^2.x1 = f1(y),x2 = f2(y)和x3 = f3(y)的曲线,并且我用R^3绘制了z1,z2,z3曲线(x1,f1),(x2,f2)和(x3,f3)。我如何插入z1,z2,23获取曲面? 我会很感激的任何帮助, 米高梅插值曲线到表面

+0

一些示例代码(即通过创造Z1的,Z2,Z3)将是有益的。 –

回答

0

用你的符号,并为X = F(x 0,y)和Z = F(X,Y)的一些任意例子的关系,这是你如何做到这一点(我还增加了直接计算参考的曲线图):

% Define grid 
x0_orig = 0:2; 
y_orig = 0:3; 
[x0, y] = meshgrid(x0_orig, y_orig); 

% Calculate x (replace the relationship with your own) 
x = x0 + 0.1 * y.^2; 

% Calculate z (replace the relationship with your own) 
z = 0.1 * (x.^2 + y.^2); 

% Plot 
subplot(1,3,1) 
surf(x, y, z) 
xlabel('x') 
ylabel('y') 
zlabel('z') 
title('Original data') 

%%%%%%%%%% 
% Interpolate with finer grid 
x0i = 0:0.25:2; 
yi = 0:0.25:3; 

xi = interp2(x0_orig, y_orig, x, x0i, yi'); 
[x0i yi] = meshgrid(x0i, yi); 
zi = interp2(x0, y, z, x0i, yi); 

subplot(1,3,2) 
surf(xi, yi, zi); 
title('Interpolated data') 

%%%%%%%%%% 
% Recalculate directly with finer grid 
x0i = 0:0.25:2; 
yi = 0:0.25:3; 

[x0i yi] = meshgrid(x0i, yi); 
xi = x0i + 0.1 * yi.^2; 
zi = 0.1 * (xi.^2 + yi.^2); 

subplot(1,3,3) 
surf(xi, yi, zi) 
title('Recalculated directly') 

enter image description here

+0

非常感谢您的详细解答,但我不想使用interp2,因为我需要插值曲面作为函数。 Matlab将interp2当然保存为矩阵。我需要整合这个表面功能。你知道interp2使用哪种算法吗? – user1018331

+0

@ user1018331这篇博文是开始的好地方:http://blogs.mathworks.com/loren/2011/06/13/calculating-the-area-under-a-surface/。顺便说一下,还要注意,如果您实际上具有符号功能,则可以直接进行集成(请参阅同样的链接)。 'interp2'可以使用几种不同的算法......默认情况下,它使用线性插值,如上图所示。祝你好运! –