2012-01-20 45 views
1

我正在研究一个家庭作业问题,我应该为这个插补sin(x)的函数插入n + 1个插值点,并将插值与实际的sin值进行比较那些点。问题陈述要求一个函数拉格朗日算子(x,points)来完成这个,尽管我当前的执行它的尝试并没有在循环中使用'x'和'points',所以我认为我将不得不再次尝试(特别是)但是,为什么我不能使用索引访问x_n数组中的项目,如x_n [k]?另外,有没有办法只访问points数组中的'x'值并循环那些L_x?最后,我认为我的'错误'定义是错误的,因为它也应该是一组值。是否有必要让另一个for循环将'error'数组中的每个值与'max_error'进行比较?这是我的代码,现在(我们在GUI我们的教授做执行,所以我觉得一些命令所独有的,如messages.write()):使用Python插值sin(x)

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

从0至2 * PI 生成x_n的n个均匀间隔的点的列表生成y_n点为罪(x_n)的相应列表

定义点, 2D阵列由这些有序对

定义拉格朗日,x的在范围n + 1中的每个值的函数和点

(这是我想用点,但不知道如何访问这些适当值)

评估y_n *(X - x_n [之后的索引]/x_n [之前的索引] - x_n [之后的索引])

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

plot sin(x);绘制拉格朗日;剧情错误

这有道理吗?

+0

你为什么接受任意* kwargs *在你的方法中,如果你不使用它们?为什么不直接调用前两个参数'n'和'm'?或者是你正在工作的环境造成的一项要求?由教授编写的应用程序(特别是当他们不是CS教授时)往往会做一些奇怪的事情:p – ThiefMaster

+1

看起来你正在使用numpy。另外,这是无效的Python;你可以在多个地方引用你的'Lagrange'函数,但除非你添加parens'()',否则它不会被评估。另外,你的函数从两个地方返回,并为它自己的引用赋值。这几乎看起来像用Python-esque语法编写的Matlab。 – voithos

回答

1

几点建议:

  • 您可以通过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]
  • in error = np.sin(x) - Lagrange:您还没有在任何地方定义x,所以这可能会导致错误。你的意思是这个在Lagrange函数中吗?此外,你从np.sin(x)减去函数Lagrange),这将不会很好结束。
  • 当您在def Lagrange中使用return语句时,您正在退出您的功能。所以你的循环永远不会循环多次,因为你正在退出函数。我想你可能实际上想要商店这些值而不是返回它们。

你能写一些伪代码来显示你想要做什么吗?例如:

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)。

所以:尝试修复了一些点在你的代码,并尝试写一些伪说你想要做什么,我们会继续帮助你:)

相关问题