입력인수가 너무많다고 하는데 어떻게 할까요

40 views (last 30 days)
우영
우영 on 14 Apr 2024
Answered: Angelo Yeo on 14 Apr 2024
clear,clc,close all
tspan=[0,10];
X_ini=[5,0,1];
options1=odeset('Refine',1);
options2=odeset(options1,'NonNegative',1);
[T,X]=ode45(@ask,tspan, X_ini, options2);
Error using solution>ask
Too many input arguments.

Error in odearguments (line 92)
f0 = ode(t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ode45 (line 104)
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
figure(1);
plot(T,X(:,1),'r-','LineWidth',2),hold on,
plot(T,X(:,2),'b--','LineWidth',2), plot(T,X(:,3),'k:','LineWidth',2)
xlabel('시간'),ylabel('반응량'),legend('A','B','C')
function dXdt=ask(X)
x=X(1); y=X(2);
dxdt=-2.*x.^3;
dydt=2.*x.^3-x.*y;
dzdt=x.*y;
dXdt=[dxdt;dydt;dzdt];
end

Answers (1)

Angelo Yeo
Angelo Yeo on 14 Apr 2024
ode45의 문서를 읽어보면 풀고자 하는 미분방정식에는 t와 y 모두 입력으로 들어가야 합니다. 아래는 문서의 설명 일부를 가져 온 것입니다.
"스칼라 t와 열 벡터 y에 대한 함수 dydt = odefun(t,y)는 f(t,y)에 대응하는 single이나 double 데이터형의 열 벡터 dydt를 반환해야 합니다. odefun은 입력 인수 ty 모두를 받아야만 하는데, 이는 이 중 하나가 함수에 사용되지 않더라도 마찬가지입니다."
clear,clc,close all
tspan=[0,10];
X_ini=[5,0,1];
options1=odeset('Refine',1);
options2=odeset(options1,'NonNegative',1);
[T,X]=ode45(@ask,tspan, X_ini, options2);
figure(1);
plot(T,X(:,1),'r-','LineWidth',2),hold on,
plot(T,X(:,2),'b--','LineWidth',2), plot(T,X(:,3),'k:','LineWidth',2)
xlabel('시간'),ylabel('반응량'),legend('A','B','C')
function dXdt=ask(t, X) % add "t"
x=X(1); y=X(2);
dxdt=-2.*x.^3;
dydt=2.*x.^3-x.*y;
dzdt=x.*y;
dXdt=[dxdt;dydt;dzdt];
end

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!