2017-01-09 1 views
1

사용하여 미분 방정식의 시스템을 해결내가 미분 방정식 (로렌츠 방정식)의 시스템을 해결하기 위해 MATLAB을 사용하는 방법을 배우고 t의 함수로 각 솔루션을 플롯하려고 ODE45

X’ = −σx + σy 
Y’ = ρx − y − xz 
Z’ = −βz + xy 

σ = 10, β = 8/3 , 및 ρ = 28x(0) = −8, y(0) = 8z(0) = 27을 포함한다.

function xprime = example(t,x) 

sig = 10; 
beta = 8/3; 
rho = 28; 
xprime = [-sig*x(1) + sig*x(2); 
      rho*x(1) - x(2) - x(1)*x(3); 
      -beta*x(3) + x(1)*x(2)]; 

x0 = [-8 8 27];  
tspan = [0 20];  
[t,x] = ode45(@example, tspan, x0); 

figure  
plot(t,x(:,1)), hold on 
plot(t,x(:,2)), hold on 
plot(t,x(:,3)), hold off 

그러나,이 오류가 발생, 나는이 문제를 해결 어떻게 : 여기

내가 사용하고있는 코드? 나는 어떤 인수가 빠졌는지 또는 내가 잘못 가고 있는지 확실하지 않다. 고마워. 고마워.

입력 인수가 충분하지 않습니다. 예제

오류 (라인 9)는 xprime = [- 시그마 × (1) + 시그마 X (2); ρ * x (1) -x (2) -x (1) x (3); - 베타 x (3) +
x (1) * x (2)];

+0

- 그 의도, 또는은 ...? –

+0

아마, 나는 그것을 쓰는 더 좋은 방법을 모르기 때문에 그럴 것입니다. – Tina

답변

3

사실 이것은 꽤 좋은 첫 번째 시도입니다!

실행 단추를 누르거나 (F5 키를 누를 때), 인수가없는 example 함수를 호출하는 것이 문제입니다. 이것은 MATLAB이 불평하는 것입니다.

두 번째 문제는이 같은 기능을 실행할 수 있도록하더라도, ode45 때까지, 등등 ode45를 호출 할 example을 부를 것이다 ode45 부를 것이다 기능 example를, 부를 것이다,이다 재귀 한계에 도달합니다.

모두에 대한 해결책은 두 가지 기능 (이이 같은 M-파일에 기록 될 수 있습니다)에서 그것을 분할하는 것입니다 : 당신은 재귀하는

% top-level function; no arguments 
function caller() 

    x0 = [-8 8 27]; 
    tspan = [0 20]; 
    [t,x] = ode45(@example, tspan, x0); 

    figure 
    plot(t,x(:,1)), hold on 
    plot(t,x(:,2)), hold on 
    plot(t,x(:,3)), hold off 

end 

% The derivative 
function xprime = example(t,x) 

    sig = 10; 
    beta = 8/3; 
    rho = 28; 
    xprime = [-sig*x(1) + sig*x(2); 
       rho*x(1) - x(2) - x(1)*x(3); 
       -beta*x(3) + x(1)*x(2)];    
end 
관련 문제