【问题标题】:interpolation curve to surface曲线到曲面的插值
【发布时间】:2011-11-19 16:24:38
【问题描述】:

这是一个插值问题: 我有一个函数 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) 中得到一条曲线,并使用 ( x1,f1)、(x2,f2) 和 (x3,f3)。如何插入 z1,z2,23 以获得表面? 我将不胜感激任何帮助, 毫克

【问题讨论】:

  • 一些示例代码(即通过创建 z1、z2、z3)会有所帮助。

标签: math matlab interpolation


【解决方案1】:

使用您的符号,以及 x = f(x0, 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')

【讨论】:

  • 非常感谢您的详细回答,但我不想使用 interp2,因为我需要插值曲面作为函数。 Matlab将interp2保存为矩阵。我需要整合这个表面功能。你知道interp2用的是什么算法吗?
  • @user1018331 这篇博文是一个很好的起点:blogs.mathworks.com/loren/2011/06/13/…。顺便说一句,还要注意,如果你实际上有一个符号函数,你可以直接集成(也请参见相同的链接)。 interp2 可以使用几种不同的算法...它默认使用线性插值,如上图所示。祝你好运!
猜你喜欢
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2023-03-19
相关资源
最近更新 更多