第一个m文件
clear pH Fb
pH = 5:0.1:9;
for i = 1:length(pH)
Fb(i) = pH2Fb(pH(i));
end
plot(Fb,pH)
第二个m档案
function Fb=pH2Fb(pH)
Fb=fsolve(@fun1,1,[],pH);
function f=fun1(Fb,pH)
Fa = 2.9; %ml/s
Ca = 3e-3; %mol/ml
Cb = 5e-5; %mol/ml
Ca1 = -3e-3; %mol/ml
pk1 = 1.27;
pk2 = 4.266;
Xa = (Fa*Ca+Fb*Ca1)/(Fa+Fb);
Xb = (Fb*Cb)/(Fa+Fb);
f= (Xa + 10^(pH-14)-10^(-pH)+ Xb*(1+2*10^(pH-pk2))/(1+10^(pk1-pH)+10^(pH-pk2)))*1e19;
这是问题:
1。
Fb=fsolve(@fun1,1,[ ],pH);
这个等式是什么意思??
2。
对于第二个m文件,为什么在"function f=fun1(Fb,pH)"
"Fb=fsolve(@fun1,1,[ ],pH);"
同时函数“fun1”在被解决之前被调用了?因为到目前为止 我知道,MATLAB是从上到下运行的,假设“fun1”是 未定义,因为它稍后解决..
答案 0 :(得分:1)
回答你的两个问题:
对fsolve
的调用使用old MATLAB syntax将参数传递给目标函数。该调用正在针对目标函数@(x) fun1(x, pH)
进行优化,从初始值1
开始并且不传递任何选项([]
)。对于最新版本的MATLAB,应编写
fsolve(@(x) fun1(x, pH), 1)
fun1
是一个nested function,因此可以从它的父函数pH2Fb
中调用。