2011-11-19 76 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'可以使用幾種不同的算法......默認情況下,它使用線性插值,如上圖所示。祝你好運! –