Effacer les filtres
Effacer les filtres

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

25 vues (au cours des 30 derniers jours)
우영
우영 le 14 Avr 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

Réponses (1)

Angelo Yeo
Angelo Yeo le 14 Avr 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

Catégories

En savoir plus sur 상미분 방정식 dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!