我正在研究一个家庭作业问题,我应该为这个插补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);绘制拉格朗日;剧情错误
这有道理吗?
你为什么接受任意* kwargs *在你的方法中,如果你不使用它们?为什么不直接调用前两个参数'n'和'm'?或者是你正在工作的环境造成的一项要求?由教授编写的应用程序(特别是当他们不是CS教授时)往往会做一些奇怪的事情:p – ThiefMaster
看起来你正在使用numpy。另外,这是无效的Python;你可以在多个地方引用你的'Lagrange'函数,但除非你添加parens'()',否则它不会被评估。另外,你的函数从两个地方返回,并为它自己的引用赋值。这几乎看起来像用Python-esque语法编写的Matlab。 – voithos