插值曲线

时间:2014-11-21 00:29:12

标签: matlab interpolation

将以下数据插入到区间ε[-2 4.9]中的平滑曲线中。在同一图上绘制实际数据和插值曲线。

x| -2 -1.7 -1.4 -1.1 -0.8 -0.5 -0.2 0.1 0.4 0.7 1 1.3
y| 0.1029 0.1174 0.1316 0.1448 0.1566 0.1662 0.1733 0.1775 0.1785 0.1764 0.1711 0.1630

x| 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3 4.6 4.9
y| 0.1526 0.1402 0.1266 0.1122 0.0977 0.0835 0.0702 0.0579 0.0469 0.0373 0.0291 0.0224

我目前的代码是......但是我在实际插补曲线上遇到了麻烦,是否有助于将这些数据放入Excel工作表?第一次处理这件事。

close all
clear all
clc

x = [-2, -1.7, -1.4, -1.1, -0.8, -0.5, -0.2, 0.1, 0.4, 0.7, 1, 1.3, 1.6, 1.9, 2.2, 2.5, 2.8, 3.1, 3.4, 3.7, 4, 4.3, 4.6, 4.9];
y = [0.1029, 0.1174, 0.1316, 0.1448, 0.1566, 0.1662, 0.1733, 0.1775, 0.1785, 0.1764, 0.1711, 0.1630, 0.1526, 0.1402, 0.1266, 0.1122, 0.0977, 0.0835, 0.0702, 0.0579, 0.0469, 0.0373, 0.0291, 0.0224];
plot(x,y)

1 个答案:

答案 0 :(得分:0)

This post that I just recently answered几乎解决了你的问题。但是,我会给你一块骨头并帮助你。使用interp1为您执行此插值。你要做的是指定(x,y)控制点,这些控制点是数据集中的那些点,然后指定一系列其他x点,这些点具有更多的粒度并且在这些点之间具有值您最初指定的原始x值的值,您可以看到输出是什么。

以下是执行此插值所需执行的步骤:

  1. 定义您的(x,y)点(这是您已经完成的)。
  2. 定义x点的网格,与您拥有的网格相比,它们更加细化。您可以指定x值,这些值介于您拥有的原始x值之间。使用linspace生成最小值和最大值之间的设定点数...在您的情况下分别为-2和4.9。我们可以在您的min点上使用maxx隐藏此内容,以便您可以将其调整为您要使用的任何数据集。
  3. interp1与步骤(2)中的网格点结合使用,找到插补的y点。
  4. 绘制积分。
  5. 我要做的是做上面的过程,然后产生一个图,我将绘制给出的原始点,以及显示插值曲线的虚线。我还将使用样条插值来消除任何不规则性。

    因此:

    %// Define your points - Step #1
    x = [-2 -1.7 -1.4 -1.1 -0.8 -0.5 -0.2 0.1 0.4 0.7 1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4 4.3 4.6 4.9];
    y = [0.1029 0.1174 0.1316 0.1448 0.1566 0.1662 0.1733 0.1775 0.1785 0.1764 0.1711 0.1630 0.1526 0.1402 0.1266 0.1122 0.0977 0.0835 0.0702 0.0579 0.0469 0.0373 0.0291 0.0224];
    
    %// Step #2 - Define grid of x points - Define 100 points in between min and max
    xval = linspace(min(x), max(x), 100);
    
    %// Step #3 - Use interp1
    yval = interp1(x, y, xval, 'spline');
    
    %// Step #4 - Plot the stuff
    plot(x, y, 'bo', xval, yval, 'r--');
    
    %// Throw in a grid too
    grid;
    

    这是我得到的情节:

    enter image description here

    酷?