0

fsolveで毎回異なるucの出力を計算したい(毎回ucを0.001ずつ増やします)。fsolveからの各出力は、個別にSimulinkモデルに送信する必要があります。だから私はそうするためにループを設定しました、しかし私は現在の星座で(それがうまくいくなら)1000の異なる値を計算するだけだと信じていますか?値を個別に送信する方法はありますか?

そうでない場合、どうすればパラメータucを作成できますか。それは0から1000になりますか?uc = 0:0.001:1000を試しましたが、繰り返しになりますが、寸法が合わないようです。

関数が呼び出されるたびにベクトル/行列の次の要素を受け取る関数を作成するにはどうすればよいですか?

よろしくお願いします

4

1 に答える 1

0

値の配列を反復処理し、それらを1つずつ関数の一連の評価にフィードする一般的なアプローチは、次の形式に従います。

for ix = 0:0.1:10
   func(arg1, arg2, ix)
end

への各呼び出しにfunc現在の値がどのように含まれるixかを確認してください。最初の反復ix==0、次の反復ix==0.1など。これをニーズに適合させることができるはずです。コードでは、ループインデックス(これを呼び出しますi)はループ内では使用されません。

さて、あなたのコードに対するいくつかの求められていない批判。台詞

x0=[1,1,1];
y=x0(1);
u=x0(2);
yc=x0(3);
options=optimset('Display','off'); 

ループの反復が進むにつれて変更しないでください。iループイテレータ(コード内)の値が何であれ、常に同じ値を返します。それらをループ内に含めるのは無意味です。

Matlabがすべての反復でそれらを計算することを決定した場合、それらをループ内に残すことは多くの時間の無駄でさえあるかもしれません。この場合にMatlabが何をするかはわかりませんが、これらの値が反復ごとに変更されないことを理解するのは賢明かもしれませんが、変更されたとしても、この方法でコードを記述することはプログラミングの習慣としては不適切です。これらのような定数式をループから外します。

投稿したフラグメントから、なぜ定義したのかは明らかではなくy、まったく使用されていません。おそらくそれらはあなたのプログラムの他の部分で使われています。uyc

于 2012-07-06T09:13:21.703 に答える