Hi! I have a running code to which I'd like to change the default number of iterations. Without setting options=… the script runs just fine as it is supposed to do. But the moment I add options it says that I gave too many input arguments.
function FIT1 format long clc close all clear all V=0.5; % volume del reattore [L]
k0=[616350 0.86 1.3 2]; %stima parametri iniziali, il primo è k1, secondo terzo e quarto sono gli esponenti di A B C
%carica i dati UNO= =================================================================
load ('prova1.mat','seconds','absorbance') csi1_1=0.2276*absorbance/1000; %in mol/L (M)
sec_1=seconds; C0_1=[0.00005 0.001 0.05]; %species A,B and C
C0_A_1=C0_1(1); %conc OF IO3- in mol/L
C0_B_1=C0_1(2); %conc OF I- in mol/L
C0_C_1=C0_1(3); %conc OF H+ in mol/L
C_A_1=C0_A_1-csi1_1; C_B_1=C0_B_1-5*csi1_1; C_C_1=C0_C_1-6*csi1_1; Cexp1=[C_A_1 C_B_1 C_C_1]; %carica i dati DUE ==================================================================
load ('prova2.mat','seconds','absorbance') csi1_2=0.2276*absorbance/1000; %in mol/L (M) sec_2=seconds; C0_2=[0.00003 0.001 0.025]; %species A,B and C C0_A_2=C0_2(1); %conc OF IO3- in mol/L C0_B_2=C0_2(2); %conc OF I- in mol/L C0_C_2=C0_2(3); %conc OF H+ in mol/L C_A_2=C0_A_2-csi1_2; C_B_2=C0_B_2-5*csi1_2; C_C_2=C0_C_2-6*csi1_2; Cexp2=[C_A_2 C_B_2 C_C_2]; %carica i dati TRE ==================================================================
load ('prova3.mat','seconds','absorbance') csi1_3=0.2276*absorbance/1000; %in mol/L (M) sec_3=seconds; C0_3=[0.00005 0.001 0.01]; %species A,B and C C0_A_3=C0_3(1); %conc OF IO3- in mol/L C0_B_3=C0_3(2); %conc OF I- in mol/L C0_C_3=C0_3(3); %conc OF H+ in mol/L C_A_3=C0_A_3-csi1_3; C_B_3=C0_B_3-5*csi1_3; C_C_3=C0_C_3-6*csi1_3; Cexp3=[C_A_3 C_B_3 C_C_3]; %carica i dati QUATTRO ==================================================================
load ('prova4.mat','seconds','absorbance') csi1_4=0.2276*absorbance/1000; %in mol/L (M) sec_4=seconds; C0_4=[0.00005 0.0015 0.025]; %species A,B and C C0_A_4=C0_4(1); %conc OF IO3- in mol/L C0_B_4=C0_4(2); %conc OF I- in mol/L C0_C_4=C0_4(3); %conc OF H+ in mol/L C_A_4=C0_A_4-csi1_4; C_B_4=C0_B_4-5*csi1_4; C_C_4=C0_C_4-6*csi1_4; Cexp4=[C_A_4 C_B_4 C_C_4]; %carica i dati CINQUE ==================================================================
load ('prova5.mat','seconds','absorbance') csi1_5=0.2276*absorbance/1000; %in mol/L (M) sec_5=seconds; C0_5=[0.00005 0.00075 0.025]; %species A,B and C C0_A_5=C0_5(1); %conc OF IO3- in mol/L C0_B_5=C0_5(2); %conc OF I- in mol/L C0_C_5=C0_5(3); %conc OF H+ in mol/L C_A_5=C0_A_5-csi1_5; C_B_5=C0_B_5-5*csi1_5; C_C_5=C0_C_5-6*csi1_5; Cexp5=[C_A_5 C_B_5 C_C_5]; %carica i dati NOVE ==================================================================
load ('prova9.mat','seconds','absorbance') csi1_9=0.2276*absorbance/1000; %in mol/L (M) sec_9=seconds; C0_9=[0.00005 0.001 0.01]; %species A,B and C C0_A_9=C0_9(1); %conc OF IO3- in mol/L C0_B_9=C0_9(2); %conc OF I- in mol/L C0_C_9=C0_9(3); %conc OF H+ in mol/L C_A_9=C0_A_9-csi1_9; C_B_9=C0_B_9-5*csi1_9; C_C_9=C0_C_9-6*csi1_9; Cexp9=[C_A_9 C_B_9 C_C_9]; %minimizzo funzione errore ==========================================================
% Metodo fminsearch: simplesso(lento ma spesso convergente)
options=optimset('MaxFunEvals',10^12) [k,fval] = fminsearch(@err,k0,[], sec_1,sec_2,sec_3,sec_4,sec_5,sec_9,Cexp1,Cexp2,Cexp3,Cexp4,Cexp5,Cexp9,options); k %mostra valore parametri alla fine
%funzione errore come somma di errori
function S = err(k,sec_1,sec_2,sec_3,sec_4,sec_5,sec_9,Cexp1,Cexp2,Cexp3,Cexp4,Cexp5,Cexp9) S = err1(k,sec_1,Cexp1) + err2(k,sec_2,Cexp2) + err3(k,sec_3,Cexp3)+ err4(k,sec_4,Cexp4) + err5(k,sec_5,Cexp5)+ err9(k,sec_9,Cexp9); S %mostra errore ad ogni passo
%UNO==================================================================
function S1 = err1(k,sec_1,Cexp1) % predizione del modello con i parametri k attuali
sol1 = diff1(k,sec_1); Ccalc1 = deval(sol1,sec_1)'; % ricalcolo della soluzione sui soli tempi sperimentali
S1 = norm(Ccalc1 - Cexp1); function theoretical1=diff1(k,sec_1) nu=[-1; -5; -6]; % matrice stechiometrica; ordine specie: (A B C)
C01 = [0.00005 0.001 0.05]; % concentrazione iniziale
theoretical1= ode45(@myode1,sec_1,C01,[],k,nu); function dCdt1 = myode1(t,C,k,nu) R1 = k(1)*C(1)^k(2)*C(2)^k(3)*C(3)^k(4); % velocita' delle 2 reazioni
r1 = nu*R1; % velocita' di produzione delle singole specie
dCdt1 = r1; % BMi = derivate nel tempo delle concentrazioni
%DUE========================================================================
function S2 = err2(k,sec_2,Cexp2) % predizione del modello con i parametri k attuali sol2 = diff2(k,sec_2); Ccalc2 = deval(sol2,sec_2)'; % ricalcolo della soluzione sui soli tempi sperimentali
S2 = norm(Ccalc2 - Cexp2); function theoretical2=diff2(k,sec_2) nu=[-1; -5; -6]; % matrice stechiometrica; ordine specie: (A B C) C02 = [0.00003 0.001 0.025]; % concentrazione iniziale theoretical2= ode45(@myode2,sec_2,C02,[],k,nu); function dCdt2 = myode2(t,C,k,nu) R2 = k(1)*C(1)^k(2)*C(2)^k(3)*C(3)^k(4); % velocita' delle 2 reazioni r2 = nu*R2; % velocita' di produzione delle singole specie dCdt2 = r2; % BMi = derivate nel tempo delle concentrazioni %TRE========================================================================
function S3 = err3(k,sec_3,Cexp3) % predizione del modello con i parametri k attuali sol3 = diff3(k,sec_3); Ccalc3 = deval(sol3,sec_3)'; % ricalcolo della soluzione sui soli tempi sperimentali S3 = norm(Ccalc3 - Cexp3); function theoretical3=diff3(k,sec_3) nu=[-1; -5; -6]; % matrice stechiometrica; ordine specie: (A B C) C03 = [0.00005 0.001 0.01]; % concentrazione iniziale theoretical3= ode45(@myode3,sec_3,C03,[],k,nu); function dCdt3 = myode3(t,C,k,nu) R3 = k(1)*C(1)^k(2)*C(2)^k(3)*C(3)^k(4); % velocita' delle 2 reazioni r3 = nu*R3; % velocita' di produzione delle singole specie dCdt3 = r3; % BMi = derivate nel tempo delle concentrazioni %QUATTRO========================================================================
function S4 = err4(k,sec_4,Cexp4) % predizione del modello con i parametri k attuali sol4 = diff4(k,sec_4); Ccalc4 = deval(sol4,sec_4)'; % ricalcolo della soluzione sui soli tempi sperimentali S4 = norm(Ccalc4 - Cexp4); function theoretical4=diff4(k,sec_4) nu=[-1; -5; -6]; % matrice stechiometrica; ordine specie: (A B C) C04 = [0.00005 0.0015 0.025]; % concentrazione iniziale theoretical4= ode45(@myode4,sec_4,C04,[],k,nu); function dCdt4 = myode4(t,C,k,nu) R4 = k(1)*C(1)^k(2)*C(2)^k(3)*C(3)^k(4); % velocita' delle 2 reazioni r4 = nu*R4; % velocita' di produzione delle singole specie dCdt4= r4; % BMi = derivate nel tempo delle concentrazioni %CINQUE==================================================================
function S5 = err5(k,sec_5,Cexp5) % predizione del modello con i parametri k attuali sol5 = diff5(k,sec_5); Ccalc5 = deval(sol5,sec_5)'; % ricalcolo della soluzione sui soli tempi sperimentali S5 = norm(Ccalc5 - Cexp5); function theoretical5=diff5(k,sec_5) nu=[-1; -5; -6]; % matrice stechiometrica; ordine specie: (A B C) C05 = [0.00005 0.00075 0.025]; % concentrazione iniziale theoretical5= ode45(@myode5,sec_5,C05,[],k,nu); function dCdt5 = myode5(t,C,k,nu) R5 = k(1)*C(1)^k(2)*C(2)^k(3)*C(3)^k(4); % velocita' delle 2 reazioni r5 = nu*R5; % velocita' di produzione delle singole specie dCdt5 = r5; % BMi = derivate nel tempo delle concentrazioni %NOVE==================================================================
function S9 = err9(k,sec_9,Cexp9) % predizione del modello con i parametri k attuali sol9 = diff9(k,sec_9); Ccalc9 = deval(sol9,sec_9)'; % ricalcolo della soluzione sui soli tempi sperimentali S9 = norm(Ccalc9 - Cexp9); function theoretical9=diff9(k,sec_9) nu=[-1; -5; -6]; % matrice stechiometrica; ordine specie: (A B C) C09 = [0.00005 0.00102 0.025]; % concentrazione iniziale theoretical9= ode45(@myode9,sec_9,C09,[],k,nu);; function dCdt9 = myode9(t,C,k,nu) R9 = k(1)*C(1)^k(2)*C(2)^k(3)*C(3)^k(4); % velocita' delle 2 reazioni r9 = nu*R9; % velocita' di produzione delle singole specie dCdt9 = r9; % BMi = derivate nel tempo delle concentrazioni
I'm not sure whether I get this error because I have to add options in some other place I don't know or if it is because I'm asking the system to do too many iterations.
Best Answer