在Matlab中保持形状保持夹紧端插值

时间:2012-01-30 15:27:19

标签: matlab interpolation

我在Matlab中寻找一种算法,可以保留数据的形状,同时允许我夹住两端。我正在尝试从弦线,前缘角度,后缘角度和最大弧度的位置生成弧线。有关定义,请参阅Airfoil terminology。使用该信息,我想在前缘和后缘之间产生任意数量的点,在和弦上均匀分布。

以下是我到目前为止评估的算法:

'pchip'似乎不允许钳制,除非我在搜索时反复输入错误,但确实提供了适当的形状保存。

'spline'不保留形状。使用3个数据点,中间数据点为最大弯度,两端夹紧,样条曲线不能保证中间数据是生成曲线上的最高点。有关该行为的示例,请参阅此answer

'csape'提供了足够的最终条件,但我不能确定它是否足够保持形状。

2 个答案:

答案 0 :(得分:0)

如果您的数据只有这三个点,您可以分两个阶段进行,一个用于上半部分,另一个用于下半部分。您可以使用这样的事实:在距离弦线(中间点)最远的点处,线的渐变将为零。

将每一条线生成为两点之间的样条线,每条线都指定角度。

X = [0 5 10];
Y = [0 3 2];
start_slope = 0;
end_slope = -0.7;

xx1 = linspace(X(1), X(2), 100);
xx2 = linspace(X(2), X(3), 100);
yy1 = spline(X(1:2), [start_slope, Y(1:2), 0], xx1);
yy2 = spline(X(2:3), [0, Y(2:3), end_slope], xx2); 

plot([xx1, xx2],  [yy1, yy2]);
hold on
scatter(X, Y, 'filled')

enter image description here

答案 1 :(得分:0)

我在数学堆栈交换中发布了我的问题并获得了以下answer。基本上,我可以使用Fritsch-Carlson方案来计算/设置我的数据点的斜率。如果我想将斜率设置到我的中间点,我会将我的间隔分成两部分,比如Bill Cheatham建议。

我也可以包装我的数据并使用pchip或样条曲线来代替重新实现整个方法的点。