[MATLAB] problema nel richiamare una funzione dentro uno script
Ciao ragazzi, mi servirebbe un aiuto con matlab! Sto cercando di richiamare una funzione all'interno di uno script, ma mi continua a restituire errore dicendomi "not enough input arguments"... non riesco a trovare l'errore, mi potete aiutare?
qui sotto copio in ordine la funzione e poi lo script che la richiama...ci potete dare un'occhiata?? Mi fareste davvero un gran favore!
function CTOT = costi(x,u,w,T,CO,CS,CFU,CC,D)
for t = 1:T
if u(t)~= 0
CO(t)=10 +2*u(t);
else
CO(t)=0;
end
if x(t,5)> w(t)
CS(t)= 5*(x(t,5)-w(t));
else
CS(t)=0;
end
CFU(t)= 10*max(0,(w(t)-(D(t)+u(t))));
CC(t)=x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5);
CTOT = CC(t)+ CFU(t) + CS(t) + CO(t);
end
ED ECCO LO SCRIPT:
clear all
clc
load validationdatas
C=20;
T=input('orizzonte temporale considerato=') ;
N = 10;
c1 = 10;
x=zeros(T+1,5);
u= zeros(T+1,1);
d = zeros (T+1,5);
x0(1)= 0;
x0(2)= 0;
x0(3)= 0;
x0(4)= 0;
x0(5)= 0;
x(1,:)= x0;
D= zeros(T,1);
Q= zeros(T,1);
CTOT= zeros(T,1);
CO=zeros(T,1);
CFU= zeros(T,1);
CC= zeros(T,1);
CS= zeros(T,1);
tt= input('limite di riordino tt=');
for t=1:T
u(t)=tt-(x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5));
d(t,5)= min(w(t), x(t,5));
d(t,4)= min(w(t) - d(t,5), x(t,4));
d(t,3)= min(w(t) - d(t,5) - d(t,4), x(t,3));
d(t,2)= min(w(t) - d(t,5) - d(t,4)- d(t,3), x(t,2));
d(t,1)= min(w(t) - d(t,5) - d(t,4)- d(t,3) - d(t,2), x(t,1));
D(t)= (d(t,1)+d(t,2)+d(t,3)+d(t,4)+d(t,5));
x(t+1,1)= 0*(x(t,1)-d(t,1))+ max((u(t)-(w(t)-D(t))),0);
x(t+1,2)= (x(t,1)-d(t,1));
x(t+1,3)= (x(t,2)-d(t,2));
x(t+1,4)= (x(t,3)-d(t,3));
x(t+1,5)= (x(t,4)-d(t,4));
Q(t)= x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5);
if x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5)> C;
disp 'ecceduta capacità di magazzino';
end
CTOT(t) = costi(x(t),u(t),T,CO(t),CS(t),CFU(t),CC(t),D(t));
end
qui sotto copio in ordine la funzione e poi lo script che la richiama...ci potete dare un'occhiata?? Mi fareste davvero un gran favore!
function CTOT = costi(x,u,w,T,CO,CS,CFU,CC,D)
for t = 1:T
if u(t)~= 0
CO(t)=10 +2*u(t);
else
CO(t)=0;
end
if x(t,5)> w(t)
CS(t)= 5*(x(t,5)-w(t));
else
CS(t)=0;
end
CFU(t)= 10*max(0,(w(t)-(D(t)+u(t))));
CC(t)=x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5);
CTOT = CC(t)+ CFU(t) + CS(t) + CO(t);
end
ED ECCO LO SCRIPT:
clear all
clc
load validationdatas
C=20;
T=input('orizzonte temporale considerato=') ;
N = 10;
c1 = 10;
x=zeros(T+1,5);
u= zeros(T+1,1);
d = zeros (T+1,5);
x0(1)= 0;
x0(2)= 0;
x0(3)= 0;
x0(4)= 0;
x0(5)= 0;
x(1,:)= x0;
D= zeros(T,1);
Q= zeros(T,1);
CTOT= zeros(T,1);
CO=zeros(T,1);
CFU= zeros(T,1);
CC= zeros(T,1);
CS= zeros(T,1);
tt= input('limite di riordino tt=');
for t=1:T
u(t)=tt-(x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5));
d(t,5)= min(w(t), x(t,5));
d(t,4)= min(w(t) - d(t,5), x(t,4));
d(t,3)= min(w(t) - d(t,5) - d(t,4), x(t,3));
d(t,2)= min(w(t) - d(t,5) - d(t,4)- d(t,3), x(t,2));
d(t,1)= min(w(t) - d(t,5) - d(t,4)- d(t,3) - d(t,2), x(t,1));
D(t)= (d(t,1)+d(t,2)+d(t,3)+d(t,4)+d(t,5));
x(t+1,1)= 0*(x(t,1)-d(t,1))+ max((u(t)-(w(t)-D(t))),0);
x(t+1,2)= (x(t,1)-d(t,1));
x(t+1,3)= (x(t,2)-d(t,2));
x(t+1,4)= (x(t,3)-d(t,3));
x(t+1,5)= (x(t,4)-d(t,4));
Q(t)= x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5);
if x(t,1)+x(t,2)+x(t,3)+x(t,4)+x(t,5)> C;
disp 'ecceduta capacità di magazzino';
end
CTOT(t) = costi(x(t),u(t),T,CO(t),CS(t),CFU(t),CC(t),D(t));
end
Risposte
la risposta è semplice: la tua funzione prende in input 9 argomenti ma nell'istruzione di richiamo ne hai inseriti solo 8
i messaggi di errore di solito hanno un significato...
i messaggi di errore di solito hanno un significato...