0

私はこの機能を持っています

f(a,b) = { 
            a*a/b   if a < b,
            b       if a >= b 
         }

0から1までのaとbの値に対して定義されます。

この関数は、この範囲のaとbのすべての有効な値で連続です。(本当に!自分で試してみてください!)しかし、Simulinkでそれを評価する方法がわかりません。問題は、関数の両方の「フォーク」を評価し、min(a*a,b*b)/bでゼロ除算エラーが発生せずに最小値または最大値(たとえば)を取ることができる方法でそれを言い換える方法を理解できないことです。b=0条件付きで実行されるサブシステムのようなものに入らないようにしたい。

誰かが私がこれを行う方法を知っていますか?

4

2 に答える 2

2

奇妙な制約があります。両方のフォークを評価し、2つのフォークの最小値を取ることを主張するため、唯一の解決策は、ゼロで除算するのではなく、エラーを回避するために十分に小さい数(たとえば、eps)で除算することです。

ここに画像の説明を入力してください

またはアクションブロックの場合: ここに画像の説明を入力してください

于 2012-04-18T14:30:24.727 に答える
0

最も簡単なアプローチは、 MATLAB関数ブロックを使用することだと思います。このようにコーディングすることができます、

function retVal = myfunc(a, b)
   if (a < b)
     retVal = a*a/b;
   else
     retVal = b;
   end
end

これにより、2つの入力と1つの出力を持つブロックが作成されます。a、b \ in [0,1]をどのように確認しているかはわかりませんが、その制限が満たされている限り、これは機能します。

于 2012-04-18T02:01:42.937 に答える