在Matlab中限制变量

时间:2012-04-20 08:13:34

标签: function matlab restriction

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

我想要做的是绘制以下上述限制的以下三维图表

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

修改 我尝试过使用isosurface

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的限制,所以输出不正确。

感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:0)

有点不清楚你想要实现的目标。我希望您知道可以编写语句,例如(伪代码):

if c>=0 exit

在某种意义上,它限制您的函数仅对符合定义约束的值进行操作。

上述内容非常简单,我确信我误解了你的问题。

答案 1 :(得分:0)

不,看起来你想要的不仅仅是一个三维图形。您希望将此函数视为三个变量的函数:c,delta,xT。所以一个4-d图。在这种情况下,您需要简单地评估3维网格上的函数(使用meshgrid或ndgrid生成点。)

然后使用等值面来显示结果,基本上是更高维的等高线图。在不同的等级下做几个这样的情节。

答案 2 :(得分:0)

当违反约束时,我会返回NaN。

只需在您的函数中添加以下行(最好在计算之前节省时间)

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

Plot不会绘制NaN。

虽然在您输入c,delta,xT时,问题是为什么它们首先被设置为无效值。如果您事先确定,可以节省一些支票,因此需要时间。