用Python进行sin(x)的插值

2024-10-06 15:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个作业题,我要做一个函数,对n+1个插值点的sin(x)进行插值,并将插值与这些点的sin的实际值进行比较。问题语句要求使用一个函数Lagrangian(x,points)来实现这一点,尽管我当前尝试执行它的时候没有在循环中使用'x'和'points',所以我想我必须再试一次(尤其是因为我的代码不能正常工作!)但是,为什么我不能用索引(比如x_n[k])来访问xün数组中的项呢?另外,有没有办法只访问点数组中的“x”值,并在L\u x的值上循环?最后,我认为我的“错误”定义是错误的,因为它也应该是一个值数组。是否需要创建另一个for循环来比较“error”数组中的每个值与“max_error”?这是我现在的代码(我们是在教授制作的GUI中执行的,所以我认为有些命令是独一无二的,比如消息.写入()):

def problem_6_run(problem_6_n, problem_6_m, plot, messages, **kwargs):
    n = problem_6_n.value
    m = problem_6_m.value

    messages.write('\n=== PROBLEM 6 ==========================\n')

    x_n = np.linspace(0,2*math.pi,n+1)
    y_n = np.sin(x_n)

    points = np.column_stack((x_n,y_n))

    i = 0
    k = 1
    L_x = 1.0

    def Lagrange(x, points):
        for i in n+1:
            for k in n+1:
                return L_x = (x- x_n[k] / x_n[i] - x_n[k])
            return Lagrange = y_n[i] * L_x

    error = np.sin(x) - Lagrange

    max_error = 0
    if error > max_error:
        max_error = error

    print.messages('Maximum error = &g' % max_error)

    plot.draw_lines(n+1,np.sin(x))
    plot.draw_points(m,Lagrange)
    plots.draw_points(m,error)

编辑时间:

是的,ThiefMaster提到的不同的东西是我(非CS)教授的环境的一部分;是的,voithos,我使用的是numpy,在这一点上,肯定比Python有更多的实践经验(我想这很明显!)。n和m是用户在GUI中输入的值;n+1是插值点的数目,m是以后绘制的点数。在

伪代码: 给定n和m

生成从0到2*pi的n个等距点的列表 生成sin(x\n)对应的点列表

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

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

对于n+1范围内的每个值(这是我想使用点的地方,但不知道如何适当地访问这些值)

求值y_n*(x-x\u n[后期索引]/x\n[早期索引]-x\n[后期索引])

计算最大误差 计算误差插值Lagrange-sin(x)

绘图sin(x);绘图拉格朗日;绘图误差

有道理吗?在


Tags: 函数代码for定义plotnperror数组
1条回答
网友
1楼 · 发布于 2024-10-06 15:22:26

一些建议:

  • 您可以通过x_n[k]访问x_n中的项目(回答您的问题)。在
  • 循环for i in n+1:for k in n+1:只执行一次,一个使用i=n+1,另一个使用k=n+1。您需要使用for i in range(n+1)(或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)。在

所以:试着在你的代码中修正这些要点,并尝试编写一些伪代码来说明你想做什么,我们将继续帮助你:)

相关问题 更多 >