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的限制,所以输出不正确。
感谢任何帮助。谢谢。
答案 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
时,问题是为什么它们首先被设置为无效值。如果您事先确定,可以节省一些支票,因此需要时间。