Как интегрировать heaviside (y-f) в Matlab?

#matlab #integration #symbolic-math

#matlab — математическая лаборатория #интеграция #символьная математика #matlab

Вопрос:

Я не могу интегрировать heaviside (y-f) для x = 0 в pi / 2 и y = 0 в pi / 2 (только интеграция 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)
  

Ответ №1:

По возможности избегайте символьных вычислений.

Обратите внимание, что функция heaviside может быть определена как:

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

Вы можете использовать либо integral2, либо trapz для вычисления числового интеграла.

 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
  

Комментарии:

1. Но это числовое вычисление, а не символическое. Похоже, что OP требует символьных вычислений

2. Он упомянул, что ему нужен численный ответ, численное вычисление которого намного лучше (вычислительная производительность), чем использование symbolic toolbox

3. OP пытается символически вычислить числовой ответ, используя текст вопроса и исходные теги. Конечно, численно это быстрее

4. да, это числовой ответ, но я имел в виду его как double (integ).

5. на самом деле ответ на этот вопрос содержится в следующей ссылке: in.mathworks.com/matlabcentral/answers /…