簡體   English   中英

Python中的數值方法-無法發現問題?

[英]Numerical method in python- can't spot the problem?

我正在寫這個梯形規則的數值方法公式用於雙積分。 在此處輸入圖片說明

注意hx =(ba)/ nx,hy =(dc)/ ny以獲取間隔寬度,xj = a + hx j和yi = c + hy i

您的代碼中的一些問題:

首先,是的,您的縮進是關閉的(但是我認為這是因為沒有正確地復制它,因為這會導致錯誤而不是錯誤的值)。 以后請確保問題的縮進與您在自己的計算機上的縮進一致,然后再進行發布...

然后,僅當在相應的總和中時才應在for添加一個術語...在這里,您將所有內容都放入double for循環中,這與將所有術語都包含在double sum中相對應。

最后, range(1,n)僅在n-1處停止,因此您要刪除范圍中的那些-1

到底:

def double_integral(f,a,b,c,d,nx,ny):

    hx = (b-a)/nx
    hy = (d-c)/ny 

    first_term = (f(a,c)+f(a,d)+f(b,c)+f(b,d))

    i_sum = 0
    for i in range(1,ny):
        i_sum += f(a,c+i*hy)+f(b, c+i*hy)

    j_sum = 0
    for j in range(1,nx):
        j_sum += f(a+j*hx,c)+f(a+j*hx,d)

    ij_sum = 0
    for i in range(1,ny):
        for j in range(1,nx):
            ij_sum += f(a+j*hx,c+i*hy)

    integral = (first_term/4 + i_sum/2 + j_sum/2 + ij_sum) * hx * hy

    return integral


def t(x,y):
    return x*(y**(2))

print(double_integral(t,0,2,0,1,10,10))

0.6700000000000003

通過選擇大於10的步數,您將接近2/3 ...

通過使用sum理解,您可以變得更加Python化:

def double_integral(f,a,b,c,d,nx,ny):
    hx = (b-a)/nx
    hy = (d-c)/ny 
    first_term = (f(a,c)+f(a,d)+f(b,c)+f(b,d))
    i_sum = sum(f(a,c+i*hy)+f(b, c+i*hy) for i in range (1,ny))
    j_sum = sum(f(a+j*hx,c)+f(a+j*hx,d) for j in range(1,nx))
    ij_sum = sum(f(a+j*hx,c+i*hy) for i in range (1,ny) for j in range(1,nx))
    integral = (first_term/4 + i_sum/2 + j_sum/2 + ij_sum) * hx * hy
    return integral

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM