MATLAB의 ODE 해결사를 사용하여 해결해야 할 미분 방정식이 있습니다. 미분 방정식 자체는 매우 단순하지만 많은 "상수"에 의존합니다. 이러한 상수는 보편적이지 않으며 호출자가 제공해야합니다.중첩 된 함수를 사용하지 않고 ODE를 어떻게 해결할 수 있습니까?
이러한 종류의 예시 ODE가 될 것이다 : J, K 및 L은 상수이다 X
dx/dt = -j * (k + x) ./ (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
그러나 변수의 수와 코드 크기가 증가함에 따라,이 코드의 저주 - 근처 읽을 수 엉망 갈수록 우아하고 결과가된다. 그래서, 나는 a) 입력 벡터의 스텝 함수에 상수를 전달하거나 b) 전역 변수를 사용하지 않고 각 시스템의 스텝 함수를 자신의 파일로 옮기는 것입니다. 이 작업을 수행하는 합리적인 방법이 있습니까? 아니면 그냥 잡아 당겨 추악한 코드를 작성해야합니까?
그게 훨씬 더 잘 보입니다! 감사! –