我正在尝试定义一个看起来像这样的函数:
function u = expectedutility(x)
u = int(utility(x,I)*density(I),I,-10,10)
function t = utility(x,I)
m = x+I
if m>=0 u = m^(1/2)
else u = -2*((-m)^(1/2))
end
end
function s = density(I)
s = 1/20
end
end
在上面的例子中,我使用了上限为10和下限为-10的均匀分布,但我希望能够推广它,以便函数密度(I)可以是随机变量的任何pdf我另外我明白我可以使用分段(。)来指定实用程序,但我使用2016a所以它不在我的Matlab版本上。
基本上我的问题是每当我点击"expectedutility(2)"
时我都会收到错误
"Undefined function 'int' for input arguments of type 'double'."
我想'int'将函数与I集成,插入-10和10说然后允许我观察你不同的x值。
提前致谢
答案 0 :(得分:1)
您的代码中有几个问题,但我认为您要做的是集成一个具有符号变量I
和数字变量x
的函数。
代码中的主要问题是您根本没有定义I
。但是,即使您这样做,也存在次要问题:符号函数中不允许使用条件。还有一种替代方法,即使用heaviside
函数。
如果您将utility
功能定义为:
function u=utility(x,I)
m = x+I;
u = m^(1/2)*heaviside(m); % for positives
u =u + -2*( (-m)^(1/2) )*heaviside(-m); % for negatives
end
然后你可以打电话:
density=1/20;
syms I;
x=2;
u = int(utility(x,I)*density,I,-10,10)
它给出了:
u=
(4*3^(1/2))/5 - (16*2^(1/2))/15
要获得数值结果,只需拨打double(u)
ans =
-0.1229
如果您不想要单独的功能,请执行以下操作:
density=1/20;
syms I;
x=2;
m = x+I;
u = m^(1/2)*heaviside(m); % for positives
u =u + -2*( (-m)^(1/2) )*heaviside(-m); % for negatives
uint = int(u*density,I,-10,10)
答案 1 :(得分:0)
整数的int
函数不接受任何双数据类型的输入。您必须使用syms x
(符号标量变量)才能使其兼容。您可以查看here。该代码的另一个问题是变量I
未定义。