簡體   English   中英

多維Euler方法python

[英]multidimensional Euler's method python

所以我為Euler的方法編寫了一個函數。 但是,我希望它能夠使用任意尺寸的初始條件。 例如,目前我的函數使用這個:

>>>Euler(f, x0, t0, h, N) 

其中x0是浮點數。 但是我希望它能夠使用它:

>>>Euler(f, [x0], t0, h, N) 

其中x0現在是浮點數列表。 (使其成為多維的)

f =函數,x0 =時間t0的初始條件,
t0 =初始時間,h =步長,N =步數。

我嘗試過使用for循環:

    def Euler(f,x0,t0,h,N):
        t = t0
        y = x0
        z = []
        v = []
        for i in y:
            while t <= N:
                xval = t
                yval = [y]
                t += h
                y += h * f(t,y[i]) #i have also tried y+= h*f(t, i)
                z.append(xval)
                v.append(yval)
        return z, v

我得到的錯誤是TypeError:list indices必須是整數或切片,而不是float。 我理解,這意味着我必須索引y,如使用y [0],y [1]等...但是當我這樣做時

y + = h * f(t,y [:])

它給我一個關於我在文件中的其他函數的錯誤:f =>

TypeError: a float is required 
line 22, in <module> vv = -x**3 - x + sin(t)

當我也試試

y += h * f(t, y[0])

然后我進入

>>>Euler(f, [0., 1.], 0., 1, 10)
line 15, in <module>
y += h * f(t,y[0])
builtins.TypeError: 'float' object is not iterable

我本質上想要返回2個列表,第一個列表是z,其中它返回時間值的列表,第二個列表v,其中它返回每個步驟中每個結果的列表列表。 到目前為止,它已經在我使用浮動但不是列表的地方工作。 那么我錯過了什么代碼?

嘗試這個:

def Euler(f,x0,t0,h,N):
    t = t0
    z = []
    v = []
    for y in x0:
        while t <= N:
            xval = t
            yval = [y]
            t += h
            y += h * f(t,y) #i have also tried y+= h*f(t, i)
            z.append(xval)
            v.append(yval)
    return z, v

我不知道這是否是預期的方法,因為y += h * f(t,y)是死代碼並且在其他任何地方都沒有使用


我認為錯誤是由於沒有注意變量的類型。 當你做y = x0時, y是一個列表。

快進到該行y += h * f(t,y[i]) 在這里,你嘗試在y上使用+=運算符,這樣做是為了將另一個iterable的內容追加到y

在同一個語句中,您嘗試使用i索引到y 要索引到一個列表,你需要使用一個整數,但由於iy的元素(它是一個浮點數組), i不能用於索引到列表中,這就是為什么你可以錯誤:

TypeError:list indices必須是整數或切片,而不是float。

當你這樣做y+= h* f(t, y[:]) ,你會得到錯誤:

TypeError:需要一個float

因為y[:]創建一個包含y所有元素的新列表,因此您仍然將列表傳遞給您的函數。

最后當你這樣做y += h * f(t, y[0]) ,你得到錯誤:

builtins.TypeError:'float'對象不可迭代

因為正如我之前提到的, y是一個列表,列表上的+=將另一個iterable的內容追加到當前列表中。 它的方式是在第二個列表上“迭代”並將第二個列表中的項目附加到第一個列表中。 由於值h * f(t, y[0])不是列表,也不是可迭代的,因此會出現錯誤

暫無
暫無

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

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