Matlab

时间:2017-10-12 13:47:54

标签: matlab chemistry

我正在寻找通过时间按时间模拟矿物的沉淀,r。当这种矿物质沉淀时,它会降低溶液中Fe(II)的浓度,这会降低溶液相对于矿物质的饱和状态,从而减缓矿物质沉淀的速度。

cla;
clf;

%%
%variables and rate calculation
Fe(1)=0.01*0.26/1000; %mM, * activity coefficient, convert to M
Si=1.8/1000; %mM, convert to M
pH=8;
H=10^(-pH);
k=1.11*10^(-9);
b=1.81;
Ksp=4.68*10^(22);
IAP=(Fe^(3)*Si^(2))/H^(6);
logIAP=log10(IAP);
logKsp=log10(Ksp); 

rate=k*exp(b*(logIAP-logKsp)); %mm Fe Kg-1 hour-1

%% 
%Fe vs time 
dt=0.01;
t=0:dt:10;

for ind=2:length(t)
Fe=Fe(1)-(k*exp(b*(logIAP-logKsp))/1000*t);
end

我最终想要一个Fe对时间的情节。上面的代码不起作用,因为Fe依赖于logIAP,它取决于前一个时间步的Fe ...我需要Matlab迭代计算每个时间步的两个。

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

正如其他人指出的那样,你需要使Fe成为一个数组。 您还需要在等式中正确地索引t,因为这是一个向量。

Fe=zeros(size(t)); % now Fe is an array
Fe(1)=0.01*0.26/1000; % first value assigned
...
Ksp=4.68*10^(22);
IAP=(Fe(1)^(3)*Si^(2))/H^(6);
logIAP=log10(IAP);
logKsp=log10(Ksp); 
....
for ind=2:length(t)

    logIAP=log10((Fe(ind-1)^(3)*Si^(2))/H^(6));
    Fe(ind)=Fe(ind-1)-(k*exp(b*(logIAP-logKsp))/1000*t(ind));
end

答案 1 :(得分:-1)

将Fe用作数组:

Promise<+R>

然后在t

的函数中绘制Fe