2013-10-17 4 views
0

내 코드가 제 솔루션 벡터에 대해 제로를주고 있지만 왜 그런지 모르겠습니다. 결합 된 2 차 ODE를 4 차 1 차 ODE로 분해했습니다. 나의 초기 조건이 모두 0 내 초기에는 그것이가 있기 때문에0에 사방을주는 MATLAB ODE 솔버

[t,z] = ode45('xp',[1,100],[0 0 0 0]); 

:

내 기능 나는 다음과 같은 명령을 사용하여 MATLAB에서 실행

function zprime = f(t,z) 
a = 1; 
b = 1; 
c = 1.5; 

zprime = zeros(4,1); 

zprime(1) = z(2); 
zprime(2) = -a*z(1) + b*(z(3) - z(1)); 
zprime(3) = z(4); 
zprime(4) = -c*(z(3) - z(1)); 
end 

xp.m로 정의 조건은 0의 해답을 줄 것인가? 내가 IC를 변경하면 솔루션이 예상대로 바뀝니다. I.C.s z_0 = [0,0,0,0]

감사

특정 사례를 들어

답변

2

실제 질문은 Matlab 또는 프로그래밍보다 수학과 관련이 있습니다. 함수 f에 0을 연결하면 0 이외에 다른 대답을 줄 수 있음을 즉시 알 수 있습니다. equilibrium points 또는 fixed points을 찾아야합니다. 평형이 불안정하더라도 (언덕 꼭대기를 상상해보십시오), 방해가없는 지점 (외부 입력, 수치 오류)은 영원히 균형을 유지할 것입니다. 미분 방정식으로 작업하는 경우 평형 점을 찾는 방법을 알고 시스템 특성을 결정하기 위해이 점에서 계산 된 Jacobian 행렬을 계산하는 방법을 알아 두는 것이 좋습니다. 이 분야에 대해 더 궁금한 점이 있으시면 math.stackexchange.com으로 갈 것을 권합니다.

또한 통합 기능을 호출하기 위해 이전 구성표를 사용하고 있습니다. 매개 변수를 전달할 수도 있습니다. 당신의 주요 기능이나 별도의 기능을 파일로 하위 기능으로 기본 기능에

function zprime = f(t,z,a,b,c) 
zprime(1,1) = z(2); 
zprime(2,1) = -a*z(1) + b*(z(3) - z(1)); 
zprime(3,1) = z(4); 
zprime(4,1) = -c*(z(3) - z(1)); 

그런 다음, (당신이 f이 아닌 다른 뭔가를 할 것입니다 – 함수 이름과 동일한 파일 이름을) 당신의 통합 기능을 정의 전화

a = 1; 
b = 1; 
c = 1.5; 
[t,z] = ode45(@(t,z)f(t,z,a,b,c),[1 100],[0 0 0 0]); 
4

은,이 솔루션은 z_out = [0,0,0,0]의 값으로, 꾸준히해야한다. z = z_0을 플러그인하고 ODE 해석기를 통해 실행하면 함수를 살펴보십시오.

zprime(1) = z(2);      % ---> 0 
zprime(2) = -a*z(1) + b*(z(3) - z(1)); % ---> -a*(0) + b*(0) 
zprime(3) = z(4);      % ---> 0 
zprime(4) = -c*(z(3) - z(1));   % ---> -c*(0-0) = 0 

수치 솔루션의 일반적인 전제를 염두에 두십시오. 당신은 초기 조건을 취하여 그 미분을위한 공식에 넣습니다. 이것은 당신이 풀고있는 함수의 기울기를 알려줍니다. 이 슬로프를 사용하여 미래의 특정 시점 (또는 근처의 위치 또는 유사한 위치)에서 함수의 값을 결정한 다음이를 다시 미분 공식으로 공급하고 다시 시작합니다.

다른 방법 (전방/후방 오일러, RK4, ...) 간의 유일한 주요 차이점은 현재 위치에서 기울기를 결정하는 데 사용하는 방법입니다.