使用Python插入sin(x)

时间:2012-01-20 00:50:15

标签: python numpy

我正在研究一个家庭作业问题,我本来应该为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()):

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,在这一点上肯定有更多的练习使用Matlab而不是Python(我猜这很明显!)。 n和m是用户在GUI中输入的值; n + 1是插值点的数量,m是您稍后绘制的点数。

伪代码: 给定n和m

生成x_n从0到2 * pi的n个均匀间隔点的列表 为sin(x_n)生成y_n相应的点列表

定义点,由这些有序对组成的2D数组

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

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

评估y_n *(x - x_n [后期索引] / x_n [早期索引] - x_n [后期索引])

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

plot sin(x);情节拉格朗日;情节错误

这有意义吗?

1 个答案:

答案 0 :(得分:1)

一些建议:

  • 您可以通过x_n访问x_n[k]中的项目(以回答您的问题)。
  • 您的循环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]
  • {li} in error = np.sin(x) - Lagrange:您尚未在任何地方定义x,因此可能会导致错误。你的意思是在Lagrange函数内吗?此外,您要从数字Lagrange中减去函数np.sin(x)),这不会很好。
  • 当您在return中使用def Lagrange语句时,您将退出您的职能部门。所以你的循环永远不会循环多次因为你退出了函数。我认为您可能实际上想存储这些值而不是返回它们。

你能写一些伪代码来表明你想做什么吗? 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)。 / p>

所以:尝试在代码中修复其中的一些点,然后尝试编写一些伪代码来说明你想做什么,我们会继续帮助你:)