首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Matlab插值保持形状局部凸/凹

用Matlab插值保持形状局部凸/凹
EN

Stack Overflow用户
提问于 2021-02-23 10:31:27
回答 1查看 109关注 0票数 0

我正在尝试插值一组散乱的值(图中的星号)。迄今为止最有效的算法是:

样条

芯片

然而,它们都未能保持曲线在30°和360°之间的自然趋势。正确的近似应该在两者之间。很明显,这两种不同的行为取决于插值直线在已知值之前的斜率。

是否有办法限制算法,使其不显示出这样的人为趋势?

提前感谢您的任何建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 11:14:04

你可以将你的极地图“展开”成笛卡尔图,以便更好地理解这里发生的事情。如下所示,在给定输入的x-y空间中,0360度与pchip的外推法是非常合理的。

如果您想要支配跨越端点的行为,那么您需要在输入数据中添加人工端点,这将强制插值是循环的。

代码语言:javascript
复制
% Input points
a = 30:30:330;
b = [0.6, 0.8, 0.7, 0.3, 0.3, 0.0, 0.3, 0.3, 0.7, 0.8, 0.6];
% Extend the inputs by wrapping f(330deg)=f(-30deg), f(390deg)=f(30deg)
a_ext = [-30, a, 390]; 
b_ext = [b(end), b, b(1)];
% convert to radians    
a = deg2rad(a);
a_ext = deg2rad(a_ext);

figure();
% Polar plot
subplot(2,1,1)
polarplot( a, b, '.', 'markersize', 20 )
hold on
ainterp = linspace(0,2*pi,100);
polarplot( ainterp, pchip(a,b,ainterp), 'linewidth', 1 )
polarplot( ainterp, pchip(a_ext,b_ext,ainterp), 'k', 'linewidth', 1 )
rlim( [-0.2, 1] )
legend( {'Input points','pchip','pchip extended'} )
% Cartesian plot
subplot(2,1,2)
plot( rad2deg(a), b, '.', 'markersize', 20 )
hold on
plot( rad2deg(ainterp), pchip(a,b,ainterp), 'linewidth', 1.5 )
plot( rad2deg(ainterp), pchip(a_ext,b_ext,ainterp), 'k', 'linewidth', 1.5 )
ylim( [-0.2, 1] ); xlim( [0, 360] ); grid on

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66331410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档