2011-06-20 93 views
2

我想在一個二維矩陣(x,y)上實現龍格庫塔的四階積分方法。矩陣包含每個點的高度值(浮點數)。這個想法是在矩陣中放置一個粒子,並觀察它的路徑,因爲它被方向向量u和v'推動'。Matlab - 在任意點取一個矩陣的梯度

我已經實現了歐拉的積分方法,它已經使用了簡單的matlab中構建的'gradient'函數。但是,對於RK4積分,我需要在可變點上取4個斜率,而不是斜率給出的預定斜率。

我認爲Matlab漸變函數本身沒有這些類型的參數(從我從Matlab文檔中理解的)。我應該採取什麼樣的方法?

如果我要編寫自己的漸變函數來計算任意點處的斜率,我不太確定如何編寫它,因爲它不是直向函數。這種方法有什麼建議嗎?

謝謝。

+0

你能告訴我們它是什麼樣子嗎?如果它是幾個變量的函數,你總是可以找到一個雅可比矩陣。如果它是一個常數矩陣,那麼梯度顯然是0. – Phonon

+0

那麼,我猜這就是我困惑的地方。它是一個常數矩陣,所以我想知道如何計算一個「導數」。 根據http://www.mathworks.com/help/techdoc/ref/gradient.html dx和dy是指向增加矩陣值方向的矢量集合。 – Aaron

+0

亞倫,矩陣被解釋爲平面上的函數f(x,y)。梯度的組成部分是(df/dx)和(df/dy)。衍生工具是空間而不是時間。 – nibot

回答

0

如果我寫我自己的梯度 功能,在 任意點計算斜率,我不太肯定 如何寫它,因爲它不是 直盼着功能。有沒有 這種方法的建議?

我懷疑interp2可能是你要找的。你可以給它包含離散點上的梯度的矩陣,並且它會內插以在任何中間點找到梯度的值。

+0

哇。這正是我需要的!我相信我對自己想要做的事情有了更好的理解,現在我可以使用這些插值點來執行RK4算法。非常感謝! – Aaron

+0

多一個查詢:因爲我想在某個任意點取漸變,我應該在預定的漸變矩陣上進行插值嗎?或者我應該先插入原始矩陣,然後從那裏做一個漸變? – Aaron

+0

我想象你一次做'G = gradient(M)',然後根據需要在'G'上使用'interp2'。我不確定你會怎麼做,反過來。 – nibot