0

関数内の変数を制限する方法はMATLABにありますか

たとえば、私は機能を持っています

function S0 = S0Func(obj, c, delta, xT, sigma)
beta = obj.betaFunc(sigma);
xb = obj.xbFunc(c, delta, sigma);
S0 = (1-obj.tau).*(obj.x0./(obj.r-obj.mu)-c./obj.r-(xb./(obj.r-obj.mu)-c./obj.r).*((obj.x0./xb).^beta)-((delta-1).*c./obj.r).*((obj.x0./xT).^beta-((obj.x0./xb).^beta)));
end

制限が必要な場合(objはクラスのオブジェクトです)

0<xb<xT<1
0<c
1<delta

私がやりたいのは、上記の制限付きで、次の3Dグラフを描くことです。

S0Func(2.7, 1, 1, 0.3)-S0Func(c,delta,xT,0.2)<0;

編集 私は等値面を使用してみました

optimalStraightCoupon = fminbnd(@(c) -(S0Function(c,1,1)+D0Function(c,1,1)), 0, 4);
[xT, delta, c] = meshgrid(0.8:.01:1, 1:.1:3, 0:.1:4);
values = S0Function(optimalStraightCoupon,1, 1)- S0Function(c,delta, xT);            
patch(isosurface(xT, c, delta, values, 1), 'FaceColor', 'red');
view(3);

いくつかの出力が得られますが、xTの制限に違反しているため、正しくありません。

どんな助けでも大歓迎です。ありがとうございました。

4

3 に答える 3

0

あなたが何を達成しようとしているのかは少し不明確です。(擬似コード)のようなステートメントを記述できることをご存知だと思います。

if c>=0 exit

これは、ある意味で、定義された制約を満たす値のみを操作するように関数を制限します。

上記は非常に単純なので、私はあなたの質問を誤解したと確信しています。

于 2012-04-20T08:25:58.343 に答える
0

制約に違反した場合は NaN を返すだけです。

関数に次の行を追加するだけです(時間を節約するために計算の前に行うことをお勧めします)

if delta <= 1 || c <= 0 || ... % I assume you can write them yourself
   S0 = NaN;
   return
end

プロットは NaN を描画しません。

入力すると、そもそもc,delta,xTなぜそれらが無効な値に設定されているのかという問題があります。事前に確認しておくと、いくつかのチェックと時間を節約できます。

于 2012-04-20T10:46:29.317 に答える
0

いいえ、あなたはただの 3D グラフ以上のものを望んでいるようです。この関数を、c、delta、xT の 3 つの変数の FUNCTION として表示したいようです。つまり、4 次元グラフです。その場合、3 次元メッシュ上で関数を単純に評価する必要があります (meshgrid または ndgrid を使用して点を生成します)。

次に、等値面を使用して結果を視覚化し、本質的に高次元の等高線図として表示します。異なるアイソレベルで、そのようなプロットをいくつか実行します。

于 2012-04-20T10:33:29.593 に答える