我正在尝试定义一个看起来有点像这样的函数:
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)可以是随机变量 I 的任何 pdf。我知道我可以使用piecewise(.) 来指定实用程序,但我使用的是2016a,所以它不在我的Matlab 版本上。
基本上我的问题是,每当我点击
"expectedutility(2)"
时,我都会收到错误
"Undefined function 'int' for input arguments of type 'double'."
我希望“int”能够对 I 进行积分,插入 -10 和 10 说,然后允许我观察 u 的不同 x 值。
您的代码中有几处错误,但我认为您正在尝试做的是集成一个具有符号变量
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)