2016-07-19 2 views
0

내 기능입니다 : 내가MATLAB의 ode45 기능 '너무 많은 입력 오류'

Lorenz(14,0) 

와 명령 창에서 함수를 실행하면

function [tout, yout] = Lorenz (rho, x0) 
%define constants 
sigma = 10; 
beta = 8/3; 

%initial conditions 
y0 = [x0; 1; 0]; 

f = @(t, y) [sigma*(y(2)-y(1)); (y(1)*(rho-y(3)))-y(2); (y(1)*y(2)) - (beta*y(3))]; 

[tout, yout] = ode45(f, [0 100], y0, 'RelTol', 1e-6, 'AbsTol', 1e-8); 
end 

내가

Error using Lorenz>@(t,y)[sigma*(y(2)-y(1));(y(1)*(rho-y(3)))-y(2);(y(1)*y(2))-(beta*y(3))] 
Too many input arguments. 

어떤을 반환 도움을 많이 주시면 감사하겠습니다.

답변

1

구문이 공식적으로 documented 매스 웍스에 의해 아니지만는 ODE 스위트 구문을 허용하지 : options 다른 이름 값 시스템과 인라인 떨어지는하지 odeset (에 의해 생성 된 struct해야

[t,y] = ode45(odefun,tspan,y0,options,extra1,extra2,...); 

함수)이고 extra1,extra2,...odefun에 전달되는 임의의 수의 추가 해결 상수 매개 변수입니다. 익명 함수가 생성 시간을 허용하기 위해 자신의 작업 공간을 소유하기 전에 끝났다고 생각합니다. function parametrization.

그래서, 옵션 때문에 당신이 struct의 일부가 아닌 전달하는, ode45 통화 odefun(t,y,extra1,extra2,extra3,extra4)를 만들 것입니다, feval를 통해

[t,y] = ode45(odefun,tspan,y0,extra1,extra2,extra3,extra4); 

와,로 구문을합니다. odeset을 사용하여 약간 다시 작성하면 작업을 멋지게 수행해야합니다.

options  = odeset('RelTol', 1e-6, 'AbsTol', 1e-8); 
[tout, yout] = ode45(f, [0 100], y0, options); 
+0

효과가있었습니다. 정말 고마워. –

+1

익명의 함수가 Matlab에 존재하기 이전부터 잠시 멈추었습니다. – horchler

+0

@horchler 그 당시를 놓친 것에 대해 걱정하지 마십시오. – TroyHaskin