我有一些微分方程需要使用MATLAB的ODE解算器來解決。雖然微分方程本身非常簡單,但它們依賴於很多「常量」。這些常量不是通用的,需要由調用者提供。如何解決ODE不使用嵌套函數?
這種的一個例子ODE將是:
dx/dt = -j * (k + x) ./ (l + x)
式中,j,k和l是常數,x是可變的。
到目前爲止,我一直在解決這些問題的方法是使用一個函數,它將所有初始值和所有常量(其中大約有10個)的值作爲參數,然後調用一個內部「步驟」函數,它採用MATLAB期望的ODE解算器形式的向量。所以......
function [outputVector] = someFunction(x, y, j, k, l, m, n, o)
function [output] = someFunctionStep(t, inputVector)
x = inputVector(1);
y = inputVector(2);
dx = -j .* (k + x) ./ (l + x);
dy = -m .* (n + y) ./ (o + y);
output = [dx;dy]
end
outputVector = ode15s(@someFunctionStep, [0, endTime], [x,y]);
end
然而,隨着變量的數目和代碼大小的增加,這變得越來越優雅,導致代碼該死的 - 近不可讀的混亂。所以,我想要做的是將每個系統的step函數移動到它自己的文件中,而不必將常量傳遞給輸入向量中的step函數,或者b)使用全局變量。有沒有這樣做的合理方式,或者我應該把它吸起來,寫出醜陋的代碼?
這看起來好多了!謝謝! – 2009-10-16 13:53:18