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

16 Ansichten (letzte 30 Tage)
우영
우영 am 14 Apr. 2024
Beantwortet: Angelo Yeo am 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

Antworten (1)

Angelo Yeo
Angelo Yeo am 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

Kategorien

Mehr zu 상미분 방정식 finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!