MATLAB: Use of optimset to change maxfun evals

fminsearchiterationmaxfunevalsoptimizationoptimset

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

Use
[k,fval] = fminsearch(@(k)err(k,sec_1,sec_2,sec_3,sec_4,sec_5,sec_9,Cexp1,Cexp2,Cexp3,Cexp4,Cexp5,Cexp9),k0,options);
instead of
[k,fval] = fminsearch(@err,k0,[],sec_1,sec_2,sec_3,sec_4,sec_5,sec_9,Cexp1,Cexp2,Cexp3,Cexp4,Cexp5,Cexp9,options);
Best wishes
Torsten.