我正在研究一個家庭作業問題,我應該爲這個插補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