Matlab 变变量方程的求解

Matlab 变变量方程的求解,matlab,Matlab,我写了一个简单的代码来解决稳态发酵问题。因为变量太多,所以看起来很多 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

我写了一个简单的代码来解决稳态发酵问题。因为变量太多,所以看起来很多

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,但实际上我需要在0和1之间的时间间隔内求出D的解,然后绘制所有x(1),x(2),x(3)和D。 我试过类似的东西

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


但它不起作用也许我把它放错地方了?最好是将所有数据保存到一个矩阵中,以便轻松绘制。

在fsolve上的MATLAB帮助中有一个解决方法,用于处理多个输入参数。将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应该可以完成任务。

endfunction只是为了让我们理解吗?(因为在malab中没有这样的东西,只有
end
…实际上我是用octavethx写的,但遗憾的是我只得到矩阵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=[qx];end
x是3x1 greetzsry让它运行greetz;)有问题吗