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

问题描述 投票:0回答:1

我无法对 x= 0 到 pi/2 和 y = 0 到 pi/2 的 heaviside(y-f) 进行积分(仅 syms 积分“int”)。运行代码后,输出如下所示,我无法获得数字答案。您能给出一些如何继续的想法吗?

代码:

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

结果:

integ =
 
int(int(heaviside(y - sin(x)), x, 0, pi/2), y, 0, pi/2)
matlab numerical-integration
1个回答
0
投票

尽可能避免符号计算。

注意赫维赛德函数可以定义为:

hvsd = @(x) (x > 0) + 0.5*(x == 0); % another name to do not overshadow heaviside

您可以使用 integral2trapz 来计算数值积分。

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))
I1 =

    1.4674


I2 =

    1.4695
© www.soinside.com 2019 - 2024. All rights reserved.