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と定義しましたが、実際には0と1の間のDの解が必要であり、すべてのx(1)、x(2)、x(3)とDをプロットします。

i = 0:0.1:1の場合D = num2str(i)

しかし、それは機能していません多分私はそれを間違った方法で置きましたか?簡単にプロットできるように、すべてを1つの行列に保存するのが最善です。

4

1 に答える 1

0

複数の入力引数を処理するための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で遊ぶと、作業は完了します。

于 2012-12-30T17:57:16.770 に答える