2012-12-30 30 views
1

我写了一个简单的代码来解决稳态发酵问题。它看起来很多,因为这么多变数。求解变化变量的方程

function y = f (x) 

mumax = 1.10; %h-1 
Ksx = 1.32; %gl^-1 
Pix=1.39; %gl^-1 
Pmx=49.9; %gl^-1 
Kix=304; %gl^-1 
Pis=47.1; %gl^-1 
Pms=95.5; %gl^-1 
Kis=140; %gl^-1 
qsmax=3.42; %gg^-1h^-1 
Kss=2.05; %gl^-1 
alp=0.39; 
qpmax=3.02; %gg^-1h^-1 
Ksp=2.05; %gl^-1 
Kip=140; %gl^-1 
Pip=47.1; %gl^-1 
Pmp=95.5; %gl^-1 
F=240; 
S=40; 
V=120; 
D=0.5; 
mu= (mumax*x(2))/(Ksx+x(2)); 


    y=[x(1)*(-D+mu*(1-(x(3)-Pix)/(Pmx-Pix))*(Kix/(Kix+x(2)))); 
    D*(S-x(2))-(qsmax*(x(2)/(Kss+x(2)))*(1-((x(3)-Pis)/(Pms-Pis)))*(Kis/(Kis+x(2))))*x(1); 
    -x(3)*D+x(1)*(-D+mu*(1-(x(3)-Pix)/(Pmx-Pix))*(Kix/(Kix+x(2))))*alp+qpmax*(x(2)/(Ksp+x(2)))*(1-(x(3)-Pip)/(Pmp-Pip))*x(1)*(Kip/(Kip+x(2)));]; 

endfunction 


[x, fval, info] = fsolve (@f, [2; 10; 30]) 

我定义d为0.5,但实际上我需要d溶液在间隔0和1,然后绘制所有的x(1),X(2)中,x(3)与D. 我之间想是这样

对于i = 0:0.1:1 d = num2str(I)

但它不工作,也许我把它放在一个错误的方式?最好的办法是将所有内容保存到一个矩阵中,以便轻松地绘制它

+0

是'endfunction'只是为了我们理解? (因为在malab中没有这样的东西,只是'end' ... – bla

+0

其实我写了这个八度 – hendrik

回答

0

从MATLAB的fsolve帮助处理多个输入参数有这个解决方法。定义d作为参数:

function y = fffff (x,D) 

,那么你可以创建一个匿名函数撬开了fsolve参数。尝试类似

ivals=linspace(0,1); 
for j=ivals;D=j; 
    [x, fval, info] = fsolve (@(x) fffff(x,D), [2; 10; 30]); 
    Q=[Q x]; 
end 

如果你想测试很多关于d值(或者,如果你正在做的时间演化),那么你就不会以这种方式建立Q,但fsolve打这应该得到这份工作完成。

+0

thx,但遗憾的是我只能得到矩阵Q中D(例如x1-x3)的最后值:它是这样的:'ivals = linspace(0.2,0.8,20); Q = [];%定义正确?? 对于j = ivals; D = j; [x,fval,info] = fsolve(@ x)f(x,D),[2; 10; 30]) Q = [Q x]; end'这是x是3x1的问题greetz – hendrik

+0

sry使其运行greetz;) – hendrik