FSOLVE was working until enclosed in a function - difficult for me to interpret error
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Paul
am 22 Dez. 2022
Kommentiert: Torsten
am 22 Dez. 2022
This section of code was working fine as part of my main live script but has stopped working since I put it into now part of a function;
Vbv = [(0:0.2:9) (9.2:0.2:9.8) (9.82:0.05:9.97) 10 (10.03:0.05:10.18) (10.2:0.2:10.8) (11:0.5:20)];
options = optimset('Display','off','TolFun',1e-12,'TolX',1e-12);
pHv0 = 2;
for i = 1:numel(Vbv)
fun_actual = @(x)fun(x,Ca1, Va, pKa1, Cb1, pKb) - Vbv(i);
pHv(i) = fsolve(fun_actual,pHv0,options);
pHv0 = pHv(i);
end
Vbv is this function
function Vbv = fun(pHv, Ca, Va, pKa, Cb, pKb)
Kw = 1*10^-14;
Ka = 10^-pKa;
Kb = 10^-pKb;
H = 10^-pHv;
Vbv = Va * ((Ca/(1+H/Ka) - H + Kw/H)/(Cb/(1+Kw/(H*Kb )) + H - Kw/H ));
end
Now that it is part of a function I am getting these errors which I am having difficulty interpreting

The script and associated data are attached - they should be in the same folder/location. Any help will be highly appreciated.
0 Kommentare
Akzeptierte Antwort
Bora Eryilmaz
am 22 Dez. 2022
Bearbeitet: Bora Eryilmaz
am 22 Dez. 2022
The variable pKb that you pass to the function is not initialized as global and assigned a value, so it is passed as [] to the function. This makes Kb to be empty as well. As a result the computation of Vbv fails.
Actually, on line 48 you have
pKb = 0.2;
It should be
global pKb
pKb = 0.2;
1 Kommentar
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Construct and Work with Object Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!