【问题标题】:Using 'int' when declaring functions in matlab在 matlab 中声明函数时使用“int”
【发布时间】:2017-03-08 22:49:03
【问题描述】:

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

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 . 另外我知道我可以使用分段(。)来指定实用程序,但我使用的是 2016a,所以它不在我的 Matlab 版本上。

基本上我的问题是每当我点击"expectedutility(2)" 时都会收到错误提示

"Undefined function 'int' for input arguments of type 'double'."

我希望 'int' 集成关于 I 的函数,插入 -10 和 10 说,然后让我观察 u 的不同 x 值。

提前致谢

【问题讨论】:

  • 你在找integral吗?
  • 嗯,我希望将多个变量的函数与其中一个变量进行数值积分。这会给我一个关于许多不同变量的答案,我认为数值积分只是为了给出数值答案?
  • 您提供的代码中没有任何内容使其成为非数字。
  • 恐怕我不太明白你的意思 - 在我的代码的第二行中,我希望得到一个以变量 x 表示的表达式,而不仅仅是一个数字.因此表达式不是数字 - 也许我错误地使用了“数字”这个词?无论哪种情况,如果我可以使用“集成”功能来解决我的问题,我将不胜感激。
  • 你说“我打了expectedutility(2),我得到了错误”。如果x 是象征性的,那么你应该这样定义。如果你做expectedutility(2),那么x=2,因此是数字。因为.... 2 是一个数字...

标签: matlab function integrate


【解决方案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)

【讨论】:

  • 感谢您的回答!我不只是想像你说的那样整合这个功能。我想使用 int 命令指定函数。有没有办法指定密度,并将 u = utility(x,I)*density(I) 相对于 I 积分,以便我可以在命令窗口中将实用程序 (x) 作为函数调用?
  • 你可以不用function关键字编写自己的函数。我的意思是,你可以从字面上复制代码,把它放在你的脚本上。我使用了一个函数,因为你使用了一个,不需要一个。 @雨果露。但是,您不能“使用int 命令指定函数”,因为int 仅集成。查看更新
  • 更新:我使用 heaviside 代替了我的 IF ELSE 函数,现在我已经成功地得到了我想要的。非常感谢。在我的包裹中没有“分段”真的很痛苦!
【解决方案2】:

整数的int 函数不采用任何双精度数据类型作为输入。您必须使用syms x(符号标量变量)使其兼容。您可以查看here。代码的另一个问题是变量I 未定义。

【讨论】:

  • 虽然这可能是答案,但请尝试正确格式化并添加相关代码以解决问题
  • 您的要求不清楚。无法重新格式化。以正确的格式定义函数的输入变量和“int”
  • 我的要求是你写一个正确陈述和书面的答案。我不是最初的提问者,我只是想教你如何写出高质量的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多