如何在Matlab中集成heaviside(y-f)?

如何在Matlab中集成heaviside(y-f)?,matlab,integration,symbolic-math,Matlab,Integration,Symbolic Math,对于x=0到pi/2和y=0到pi/2,我无法将heaviside(y-f)积分(仅syms积分“int”)。运行代码后,输出如下图所示,我无法得到数字答案。你能就如何进行提出一些想法吗 代码: 结果: integ = int(int(heaviside(y - sin(x)), x, 0, pi/2), y, 0, pi/2) 尽可能避免符号计算。 请注意,heaviside函数可以定义为: hvsd = @(x) (x > 0) + 0.5*(x == 0); % another

对于x=0到pi/2和y=0到pi/2,我无法将heaviside(y-f)积分(仅syms积分“int”)。运行代码后,输出如下图所示,我无法得到数字答案。你能就如何进行提出一些想法吗

代码:

结果:

integ =
 
int(int(heaviside(y - sin(x)), x, 0, pi/2), y, 0, pi/2)

尽可能避免符号计算。

请注意,heaviside函数可以定义为:

hvsd = @(x) (x > 0) + 0.5*(x == 0); % another name to do not overshadow heaviside
您可以使用或来计算数值积分

heaviside = @(x) (x > 0) + 0.5*(x == 0);
fun = @(x,y) heaviside(y-sin(x));
% using integral2
I1 = integral2(fun,0,pi/2,0,pi/2)

nx = 100; ny = 100;
x = linspace(0,pi/2,nx);
y = linspace(0,pi/2,ny);
[X,Y] = meshgrid(x,y);
Z = fun(X,Y);
% using trapz
I2 = trapz(y,trapz(x,Z.*(Z>0),2))

尽可能避免符号计算。

请注意,heaviside函数可以定义为:

hvsd = @(x) (x > 0) + 0.5*(x == 0); % another name to do not overshadow heaviside
您可以使用或来计算数值积分

heaviside = @(x) (x > 0) + 0.5*(x == 0);
fun = @(x,y) heaviside(y-sin(x));
% using integral2
I1 = integral2(fun,0,pi/2,0,pi/2)

nx = 100; ny = 100;
x = linspace(0,pi/2,nx);
y = linspace(0,pi/2,ny);
[X,Y] = meshgrid(x,y);
Z = fun(X,Y);
% using trapz
I2 = trapz(y,trapz(x,Z.*(Z>0),2))

但这是数值计算,不是符号计算。看起来OP想要符号计算他提到他想要数字答案,数字计算它比使用符号工具箱要好得多(计算性能),OP试图通过问题文本和原始标记以符号方式计算数字答案。当然,从数字上来说,这是一个快速的数字答案,但我的意思是double(整数)。实际上,它在下面的链接中得到了回答:但这是数值计算,不是符号。看起来OP想要符号计算他提到他想要数字答案,数字计算它比使用符号工具箱要好得多(计算性能),OP试图通过问题文本和原始标记以符号方式计算数字答案。当然这是数字答案,但我的意思是double(整数)。实际上它在下面的链接中得到了回答: