for loopの計算中にタイムステップの変更

計算途中にタイムステップが流動的に変更されるコードを作成したいのですがどうすればいいでしょうか。 具体的には、時間の変数を指定し、1ステップを50秒としてfor loopを回し、ある変数(C)が0未満になってしまったとき、そのステップで変数Cが0になる時間変数で計算をやり直す というプログラムを作成したいと考えております。 どうかお力添えをお願いいたします。

4 个评论

Shoumei
Shoumei 2018-9-7
SimulinkではなくMATLABですか?&nbsp
作りかけのコードでも良いので、例があるとイメージしやすいのですが。
一部ですが、記載します。
dt = 50;
for i = 1:18
eval(['C',num2str(i),' = zeros(M+1,N+1);'])
end
for j = 2 : M
for i = 2 : N
C1(j,1) = 5.55 ;
C2(j,1) = 168.75*sin(j*2*-pi/(2*M))+143 ;
if C2(j,1)<C2min
C2(j,1)=C2min;
end
C3(j,1) = 0.155*sin(j*2*pi/(2*M))+0.1655;
C4(j,1) = 0;
C5(j,1) = 0.0000000035*dt;
C6(j,1) = 0;
C7(j,1) = 0;
C8(j,1) = 0.000000205*dt;
C9(j,1) = 0.00000015*dt;
C10(j,1) = 0;
C11(j,1) = 0;
C12(j,1) = 0.8; %mikawa
C13(j,1) = 25510;
C14(j,1) = (0.00001592*sin(j*2*pi/(2*M))+0.00002267)*dt/10;
C15(j,1) = (0.00001592*sin(j*2*pi/(2*M))+0.00002267)*dt*5/10;
C16(j,1) = (0.00001592*sin(j*2*pi/(2*M))+0.00002267)*dt*4/10;
C17(j,1) = 0.000000070*dt;
C18(j,1) = 0.000000648*dt;
C2(j,i) = (as2(j-1,i+1)*C2(j-1,i+1)+(1-2*as2(j-1,i))*C2(j-1,i)+as2(j-1,i-1)*C2(j-1,i-1)-bs2(1,i+1)*C2(j-1,i+1)+bs2(1,i-1)*C2(j-1,i-1)+phi*(-2*k1*C1(j-1,i)*C2(j-1,i)-k4*C2(j-1,i)*C6(j-1,i)-k6*C2(j-1,i)*C4(j-1,i)-2*k11*C2(j-1,i)*C7(j-1,i)-2*k12*C2(j-1,i)*C9(j-1,i)-7*k13*C2(j-1,i)*C11(j-1,i)-((kOMf*C14(j-1,i)+kOMs*C15(j-1,i)+kOMr*C16(j-1,i))*(C2(j-1,i)/(C2(j-1,i)+Ks1))))*dt) ;
C2(j,N+1) = C2(j,N);
dtが時間変数、C1~18は行列の要素になっています。 for loop内において、例えばC2が一番下の式により、ステップごとに計算されます。しかし、C2があるステップでマイナスになってしまったとき、そのステップで変数Cが0になる時間変数で計算をやり直す、という過程を組み込みたいと考えております。
Shoumei
Shoumei 2018-10-18
> C2があるステップでマイナスになってしまったとき、そのステップで変数Cが0になる時間変数で計算をやり直す &nbsp
というのは、if/elseで違う計算式で計算するのではなく、C2を更新せずに、次のループ処理でC2の計算を再度実行するということでしょうか? &nbsp
forループじゃなくてwhileループにして、ループ変数を自分で計算してやればそのようなことができそうですが。

请先登录,再进行评论。

回答(0 个)

类别

帮助中心File Exchange 中查找有关 ループと条件付きステートメント 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!