MATLAB问题

时间:2011-06-15 08:28:27

标签: matlab

第一个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”是    未定义,因为它稍后解决..

1 个答案:

答案 0 :(得分:1)

回答你的两个问题:

  1. fsolve的调用使用old MATLAB syntax将参数传递给目标函数。该调用正在针对目标函数@(x) fun1(x, pH)进行优化,从初始值1开始并且不传递任何选项([])。对于最新版本的MATLAB,应编写

    fsolve(@(x) fun1(x, pH), 1)

  2. fun1是一个nested function,因此可以从它的父函数pH2Fb中调用。