#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 /…