【问题标题】:Interpolate curve插值曲线
【发布时间】:2015-01-19 01:25:15
【问题描述】:

将以下数据插值成区间内的平滑曲线???? ∈ [-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)

【问题讨论】:

  • 所以你还没有做任何事情并希望我们为你做这个家庭作业问题?谷歌搜索“matlab 插值”给出了第一个结果:au.mathworks.com/help/matlab/ref/interp1.html。 Stackoverflow 用于解决您重新审视自己后遇到的编程问题。
  • 你真以为我没研究过,我翻遍了我的课本和网上,这是我唯一的手段,连我的同学都不知道。不要指责我什么。我所要求的只是一些指导而不是指责。
  • 如果您尝试使用 Matlab 做某事但您遇到了困难,那么第一步几乎应该始终是谷歌“Matlab”以及您正在尝试做的事情。
  • 这是我做的第一件事,我找不到带有 x 和 y 数据点的示例。我不知道如何插入它。如果你不打算帮助你为什么评论,我想要的只是提示或起点,而不是答案。
  • 如果您阅读了我在第一条评论中链接的interp1 的文档,您会发现您正在尝试做什么的示例。

标签: matlab interpolation


【解决方案1】:

This post that I just recently answered 几乎可以解决您的问题。不过,我会扔给你一块骨头来帮你。使用interp1 为您执行此插值。您所做的是指定 (x,y) 控制点,这些点是数据集的一部分,然后指定大量其他 x 点,这些点具有更多的粒度并且值介于原始值之间x 您最初指定的值,您可以看到输出是什么。

执行此插值需要执行以下步骤:

  1. 定义您的(x,y) 点(这是您已经完成的)。
  2. 定义一个由x 点组成的网格,与您所拥有的相比,这些点更加精细。您将指定介于您拥有的原始 x 值之间的 x 值。使用linspace 在最小值和最大值之间生成一组点...在您的情况下分别为-2和4.9。我们可以通过在您的 x 点上使用 minmax 来隐藏它,以便您可以将其调整为您想要使用的任何数据集。
  3. interp1 与步骤(2) 中的点网格一起使用,并找到插值的y 点。
  4. 绘制点。

我要做的是执行上述过程,然后生成一个绘图,我将在其中绘制给定的原始点,以及显示插值曲线的虚线。我还将使用样条插值来消除任何不规则性。

这样:

%// 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;

这是我得到的情节:

酷吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2023-03-19
    • 1970-01-01
    • 2022-08-09
    • 2012-07-06
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多