在matlab中声明函数时使用'int'

时间:2017-03-08 11:52:23

标签: matlab function integrate

我正在尝试定义一个看起来像这样的函数:

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值。

提前致谢

2 个答案:

答案 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未定义。