# FSOLVE was working until enclosed in a function - difficult for me to interpret error

조회 수: 1 (최근 30일)
Paul . 2022년 12월 22일
댓글: Torsten . 2022년 12월 22일
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.

댓글을 달려면 로그인하십시오.

### 채택된 답변

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없음 표시없음 숨기기
Torsten 2022년 12월 22일
@Paul comment moved here:
That's absolutely great Bora - many, many thanks.

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Function Creation에 대해 자세히 알아보기

R2022b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by