2012-10-16 3 views
0

ode45와 같은 ODE 솔버를 사용할 수 있습니까? 여전히 호출 된 함수 내에서 매개 변수의 값을 '변경'할 수 있습니까? 예를 들어ODE 솔버와 함께 사용할 함수 내의 파라미터 변경

, 나는 다음과 같은 기능을 사용하는 경우 :이 스크립트

function y = thisode(t, Ic) 
% example derivative function 

% parameters 
a = .05; 
b = .005; 
c = .0005; 
d = .00005; 

% state variables 
R = Ic(1); 
T = Ic(2); 

y = [(R*a)-(T/b)+d; (d*R)-(c*T)]; 

을 : 내가 기대하는 것처럼

clear all 
% Initial conditions 
It = [0.06 0.010]; 
% time steps 
time = 0:.5:10; 
% ODE solver 
[t,Ic1] = ode45(@thisode, time, It); 

모든 작품. 그러나 매개 변수 값을 쉽게 변경하는 방법을 원하지만 하나의 함수와 하나의 스크립트로 ODE 해석기를 여러 번 반복 실행하십시오. 그러나, 난 그냥 예를 들어, ODE 솔버에 더 많은 조건을 추가 할 수 있습니다 아닌 것 같아 :

function y = thisode(t, Ic, P) 

% parameters 
a = P(1); 
b = P(2); 
c = P(3); 
d = P(4); 

% state variables 
R = Ic(1); 
T = Ic(2); 

y = [(R*a)-(T/b)+d; (d*R)-(c*T)]; 

을이 스크립트 :

clear all 
% Initial conditions 
It = [0.06 0.010]; 
P1 = [.05 .005 .0005 .00005] 
% time steps 
time = 0:.5:10; 
% ODE solver 
[t,Ic1] = ode45(@thisode, time, It, [], P1); 

이 작동하지 않습니다. 나는 이것이 작동하지 않아야한다는 것을 알지만, 나는 해결책을 찾을 수 없었다. 또한 함수 내에서 if 문을 고려한 다음 사용하도록 기반으로 된 여러 매개 변수 집합을 하드 코딩했습니다 (예 : P == 1 일 때 1을 사용하고 P == 2 일 경우 2를 설정). 그러나이 또한 작동하지 않습니다. ODE와 함께 사용할 집합을 호출 할 위치가 아닙니다. 매개 변수 값을 변경할 수있는 동안 하나의 함수와 하나의 스크립트를 ODE 해결사와 함께 사용하는 방법에 대한 조언이나 제안 사항은 많은 도움이됩니다.

는 마이크

+0

ode45에서 Matlab 도움말을 열고 설명 아래에 "매개 변수화 함수"에 대한 도움말 링크가 표시됩니다.이 함수는 내가 원하는 것으로 생각합니다. – Bitwise

답변

1

을 주셔서 감사합니다 당신은 다른 함수를 호출해야합니다 :

[t,Ic1] = ode45(@(t,y) thisode(t,y,P1), time, It); 

기능 ode45가 건네 모든 기능 만 ty을 받아 가정합니다. 위의 호출은 P1을 전달하기 위해 standard trick이며, 모든 호출시 과 y이 전달됩니다.

+0

예제 코드, 설명 및 표준 트릭 링크를 보내 주셔서 감사합니다. 예를 들어 내가 게시하기 전에 Bitwise가 ode45 도움말을 체크 아웃했지만 여전히 솔루션을 찾지 못했습니다. 건배. – nofunsally