python - 使用 Python 对 sin(x) 进行插值

标签 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 个均匀间隔点组成的列表 生成 y_n 对应的 sin(x_n) 点列表

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

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

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

计算 y_n * (x - x_n[后来的索引]/x_n[先前的索引] - x_n[后来的索引])

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

绘制正弦(x);绘制拉格朗日图;绘图错误

这有意义吗?

最佳答案

一些建议:

  • 您可以通过 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,因此这可能会导致错误。您的意思是在拉格朗日函数内吗?此外,您还需要从数字 np.sin(x) 中减去函数 (拉格朗日),这不会有好的结果.
  • 当您在 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)。

所以:尝试修复代码中的一些问题,并尝试编写一些伪代码来说明您想要做什么,我们将继续为您提供帮助:)

关于python - 使用 Python 对 sin(x) 进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8935478/

相关文章:

python - Tango 与 Django 第 6 章 - URL 不起作用

python - __str__ 和 pretty-print (子)字典

Python - google-cloud 库 - Google Cloud Shell 中出现错误

使用 pylab 绘制 python 绘图

python - 如何使用 python 以更快的方式执行 100000 次 2d fft?

python - 如何将 % 添加到 numpy 数组中的每个值?

python - 为什么 else 在 for/while 语句中的行为与 if/try 语句不同?

python - 如何在没有 .pem 文件或替代 .pem 文件的情况下通过 AWS Lambda 使用 pysftp 连接 EC2

python - 寻找二阶多项式的回归 python

python - 记住Python方法中的单个参数