2012-11-10 4 views
0

맥락에서 나는 Matlab에서 시공간 신경망을 모델링하고 시뮬레이트하려고한다. 내 뉴런의 역 동성을 나타내는 미분 방정식을 결정했습니다.미분 방정식을 계속적으로 풀어 냄

이제이 미분 방정식을 "지속적으로"풀 수 있어야합니다. 즉, 시뮬레이션을 실행하고 몇 가지 일을해야하며, 그 동안에는 뉴런이 미분 방정식에 따라 업데이트되어야한다는 의미입니다. 나는 이런 식으로 뭔가를 할 수있는, 첫째

:

순간

, 나는 두 가지 접근 방법이

ode45(@diffEquation, [0, inf], nn.U); % where nn.U is the initial (usually randomized) neuron state 

function dUdt = diffEquation(t,U) 
    nn.U = U; 
    dUdt = % the equation 
end 

그래서 아이디어는 무한 ode45 실행 백그라운드에서 병렬 작업을 시작하는 것입니다 내 뉴런 상태를 직접 업데이트하십시오 nn.U. 그러나 ode45는 대개 각 t에 대한 값의 "내역"을 저장하고 계산이 완료되면 그 값을 반환합니다 (예 : tTFINAL). 그 값에 관심이 없기 때문에 이런 식으로 ode45를 실행하면 곧 메모리가 부족해질 것이라고 예상합니다.

다른 아이디어는 (또한 비동기 백그라운드 작업에) 무한, 반복 ode45 호출하는 것입니다 :

while 1 % i.e. simulation not over yet 
    [~,y] = ode45(@diffEquation, [0, 0.001], nn.U); 
    nn.U = y(end,:); 
end 

이것은 첫 번째 방법처럼, 매우 서투른 나에 대한 어색한 것 같다. 내 문제에 대한보다 우아한 해결책이 있어야한다는 생각이 들었습니다.

아마도 ode45는 올바른 선택이 아닐 수 있습니까?

편집 : 그냥 명확히하기 위해 diff. 방정식은 시간에 따른 일반적인 방정식이며, ode45 (즉, dUdt = -U + some-stuff * networkoutput)에 의해 공상적이고 풀릴 수있는 것은 없습니다.

+0

너의 ode가 충분히 간단하다면. 당신은 odesolve를 제공하고 분석 솔루션 및 분배를 할 수 있습니다. 어쨌든. 당신은 가상 시간에 ode를 해결하면서 시뮬레이션을하고 싶습니다. Simulink가이를위한 더 나은 선택 일 수 있습니다. – Jorge

+0

흠, 그래서 당신이 말하고자하는 것은 Matlab (Simulink가없는) 내에 가상 시간 (미분 시간 간격없이)의 미분 방정식을 "달리게"할 수있는 방법이 없다는 것입니다. – JiaYow

+0

솔버의 정확한 기능을 기억하지 못해도 가능하다고 생각합니다. 도움말 파일을 읽으면서 루프의 ode45를 반복적으로 사용하고, tspan 벡터를 변경하고, 각 루프에 적절한 초기 조건을 할당하는 것이 가장 좋습니다. 근본적으로, 시간 단계 (반드시 같지는 않음)에서 점진적으로 ode를 풀어야합니다. 솔버는 자체적 인 내부 단계를 사용하므로 첫 루프에서는 [t0 t1]을, 두 번째 루프에서는 [t1 t2]를 사용해야하며 물론 각 루프에서 적절한 초기 조건을 사용해야합니다 (이전의 단계입니다. – Jorge

답변

0

당신의 ode가 충분히 간단하다면. 당신은 odesolve를 제공하고 분석 솔루션 및 분배를 할 수 있습니다. 어쨌든. 당신은 가상 시간에 ode를 해결하면서 시뮬레이션을하고 싶습니다. Simulink가이를위한 더 나은 선택 일 수 있습니다.

관련 문제