用Python插值sin(x)

用Python插值sin(x),python,numpy,Python,Numpy,我正在做一个家庭作业,我要做一个函数,为n+1个插值点插值sin(x),并将插值与这些点的sin的实际值进行比较。问题语句需要一个函数Lagrangian(x,points)来实现这一点,尽管我当前执行它的尝试没有在循环中使用“x”和“points”,所以我想我必须再试一次(特别是因为我的代码不能按原样工作!)但是,为什么我不能用索引访问x_n数组中的项,比如x_n[k]?此外,是否有方法仅访问点数组中的“x”值并循环L_x的值?最后,我认为我的“错误”定义是错误的,因为它也应该是一个值数组。是

我正在做一个家庭作业,我要做一个函数,为n+1个插值点插值sin(x),并将插值与这些点的sin的实际值进行比较。问题语句需要一个函数Lagrangian(x,points)来实现这一点,尽管我当前执行它的尝试没有在循环中使用“x”和“points”,所以我想我必须再试一次(特别是因为我的代码不能按原样工作!)但是,为什么我不能用索引访问x_n数组中的项,比如x_n[k]?此外,是否有方法仅访问点数组中的“x”值并循环L_x的值?最后,我认为我的“错误”定义是错误的,因为它也应该是一个值数组。是否需要进行另一个for循环,以将“error”数组中的每个值与“max_error”进行比较?这是我现在的代码(我们正在教授制作的GUI中执行,因此我认为一些命令是唯一的,例如messages.write()):

编辑:

是的,ThiefMaster提到的不同事物是我(非CS)教授环境的一部分;是的,voithos,我正在使用numpy,在这一点上,我肯定比Python有更多的Matlab实践(我想这是显而易见的!)。n和m是用户在GUI中输入的值;n+1是插值点数,m是稍后绘制的点数

伪代码: 给定n和m

生成一个由n个均匀分布的点组成的列表,从0到2*pi 为sin(x)生成相应的点列表

定义点,由这些有序对组成的二维数组

定义拉格朗日,一个x和点的函数

对于n+1范围内的每个值(这是我希望使用点但不知道如何正确访问这些值的地方)

计算y_n*(x-x_n[后期索引]/x_n[早期索引]-x_n[后期索引])

计算最大误差 计算误差插值拉格朗日-sin(x)

图sin(x);拉格朗日曲线;绘图错误

这有意义吗?

一些建议:

  • 您可以通过
    x\u n[k]
    访问
    x\u n
    中的项目(以回答您的问题)
  • n+1中i的
    循环:
    和n+1中k的
    循环:
    每次只执行一次,一个循环使用
    i=n+1
    ,另一个循环使用
    k=n+1
    。您需要对范围(n+1)中的i使用
    (或
    xrange
    )来获得整个值列表
    [0,1,2,…,n]
  • error=np.sin(x)-Lagrange
    中:您没有在任何地方定义
    x
    ,因此这可能会导致错误。您的意思是将其置于
    Lagrange
    函数中吗?另外,你要从一个数值
    np.sin(x)
    中减去一个函数(
    Lagrange
    ),结果不太好
  • 当您在
    def Lagrange
    中使用
    return
    语句时,您正在退出函数。因此,您的循环将不会循环超过一次,因为您将退出函数。我认为您可能实际上想要存储这些值,而不是返回它们
你能写一些伪代码来显示你想做什么吗?e、 g:

Given a set of points `xs` and "interpolated" points `ys`:
For each point (x,y) in (xs,ys):
    Calculate `sin(x)`
    Calculate `sin(x)-y` being the difference between the function and y
.... etc etc
这将使您更容易编写实际代码,我们也更容易为您提供帮助(特别是如果您在智力上理解了您要做的事情,唯一的问题是如何将其转换为python)

因此:请尝试在代码中解决其中一些问题,并尝试编写一些伪代码来说明您想要做什么,我们将继续帮助您:)

一些建议:

  • 您可以通过
    x\u n[k]
    访问
    x\u n
    中的项目(以回答您的问题)
  • n+1中i的
    循环:
    和n+1中k的
    循环:
    每次只执行一次,一个循环使用
    i=n+1
    ,另一个循环使用
    k=n+1
    。您需要对范围(n+1)中的i使用
    (或
    xrange
    )来获得整个值列表
    [0,1,2,…,n]
  • error=np.sin(x)-Lagrange
    中:您没有在任何地方定义
    x
    ,因此这可能会导致错误。您的意思是将其置于
    Lagrange
    函数中吗?另外,你要从一个数值
    np.sin(x)
    中减去一个函数(
    Lagrange
    ),结果不太好
  • 当您在
    def Lagrange
    中使用
    return
    语句时,您正在退出函数。因此,您的循环将不会循环超过一次,因为您将退出函数。我认为您可能实际上想要存储这些值,而不是返回它们
你能写一些伪代码来显示你想做什么吗?e、 g:

Given a set of points `xs` and "interpolated" points `ys`:
For each point (x,y) in (xs,ys):
    Calculate `sin(x)`
    Calculate `sin(x)-y` being the difference between the function and y
.... etc etc
这将使您更容易编写实际代码,我们也更容易为您提供帮助(特别是如果您在智力上理解了您要做的事情,唯一的问题是如何将其转换为python)


因此:尝试在代码中修复其中一些要点,并尝试编写一些伪代码来说明您想要做什么,我们将继续帮助您:)

如果您不使用它们,为什么您在方法中接受任意Kwarg?为什么不直接调用前两个参数
n
m
?或者这是由您工作的环境引起的要求?由教授编写的应用程序(特别是当他们不是CS教授时)有时会做一些奇怪的事情:pIt看起来像是在使用numpy。而且,这是无效的Python;您在多个位置引用了
Lagrange
函数,但除非添加parens
()
,否则不会对其求值。另外,您的函数从两个位置返回,并将一个值指定给它自己的引用。。?这看起来像是用Python风格的语法编写的Matlab。如果不使用它们,为什么在方法中接受任意KWARG?为什么不直接调用前两个参数
n
m
?或者这是一个要求