FSOLVE was working until enclosed in a function - difficult for me to interpret error
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Bora Eryilmaz
2022 年 12 月 22 日
編集済み: Bora Eryilmaz
2022 年 12 月 22 日
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 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!