2017-03-12 5 views
0

나는 ODE45를 사용하여 해결하려고하는 ODE 시스템을 가지고 있습니다.여러 초기 조건을 테스트하기 위해 루프에서 ODE45 실행

나는 테스트하고 싶은 약 80 가지 초기 조건을 가지고있다. 아이디어는 각 반복 후에 종속 변수의 최종 값을 얻고 싶습니다.

사실, ODE45는 초기 조건이 바뀔 때마다 다른 크기의 매트릭스를 제공하며, 각 반복마다 새로운 매트릭스를 생성하려고하지만 온라인 사람들은 이것이 이라고 말합니다. 실제로는 나쁜 아이디어입니다.

그래서 셀 배열을 사용해야하지만 어떻게해야하는지 잘 모르겠습니다.

명확히하기 위해 본질적으로 ODE45를 여러 번 실행하여 최종 조건 (도메인 끝 부분)과 초기 조건을 표시하려고합니다.

감사합니다.

편집, 여기에 내 현재 설정이야 :

y0=0.02; 
z0=0; 
T0=[450:0.25:470]; 
initialconditions=[y0 T0]; 
[zsol, DVsol]=ode45(@ccDEdef,domain,initialconditions(1:N)); 

그리고 난 그냥 수동으로 초기 조건 T0

을 변경하기 위해 N의 값을 변경 그리고 내가 좋아하는 무언가 정렬을 원하는 :

for k=1:length(initialconditions) 
[zsolN, DVsolN]=ode45(@ccDEdef,domain,initialconditions(1:k)); 
end 

그렇다면 DVsol에서 최종 번호를 추출하고 T0에 대해 그려야합니다.

parpool(N) %N is your desired number of initial conditions 
spmd 
    q=your_function(your_inputs(labindex)); %labindex is index of your initial condition 
end 

병렬 컴퓨팅 툴박스 설치한다 : 만약 (동일 프로그램을 복수의 데이터를 의미한다)을 MATLAB SPMD 여기

사용할 수

+0

모든 우아한 해결책 나는 당신의 ODE의 결합에 달려 만들 수 있습니다, 그래서 당신은'ccDEdef'의 코드를 게시하시기 바랍니다 수 있을까? 그 동안에는 ['deval'] (https://www.mathworks.com/help/matlab/ref/deval.html)을 사용하여'ode45'에서 출력 벡터의 크기를 정규화 할 수 있습니다. – TroyHaskin

+0

정확합니까? 당신의 시스템은 가변적 인 차원 '1 + N'을 가졌습니까? 그렇다면 그 결과가 그 차원과 구성의 벡터 목록 일 것을 기대해야합니다. – LutzL

+0

왜'DVsolN (end, :)'를 배열에 저장할 수 없습니까? 'for' 루프의 각 증가분에 대해 (미리 할당해야합니다)? TSPAN (귀하의'도메인')에 두 개 이상의 값을 갖도록하십시오.이 경우 출력 솔루션의 크기가 고정됩니다. – horchler

답변

0

는 예이다.

는이 문장을 "사용할 수있는 데이터를 검색 할 수 있습니다 :

q{1} % result of your first initial condition 
    q{2} 
    q{your_desired_labindex}