我正在做一个作业题,我要做一个函数,对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);绘图拉格朗日;绘图误差
有道理吗?在
一些建议:
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.:
这将使实际的代码更易于编写,也更便于我们帮助您(尤其是如果您能够理智地理解您要做什么,而唯一的问题是将其转换为python)。在
所以:试着在你的代码中修正这些要点,并尝试编写一些伪代码来说明你想做什么,我们将继续帮助你:)
相关问题 更多 >
编程相关推荐