вычисление функции бесселя нулевого порядка на матлабе

J(x)= 1/π, интеграл cos(xsintheta). пределы от 0 до π.

Постройте J(2pid/λ) как функцию d/λ в MATLAB для d/λ в диапазоне от 0 до 2. На каком расстоянии (в длинах волн) корреляция между антеннами 0,7, 0?

Я не понимаю, как интегрировать его в Matlab, когда я определяю syms theta и использую J_=integral(J,0,pi); появляется ошибка. во-вторых, когда я интегрирую его вручную, появляется ответ 0. Пожалуйста, помогите мне с этим.


person user1398405    schedule 24.11.2013    source источник


Ответы (2)


Если вам действительно не нужно вычислять это вручную, вы должны использовать встроенный в Matlab besselj функция для вычисления нулевого порядка функции Бесселя первого рода:

dlam = 0:0.01:2;
x = 2*pi*dlam;
y = besselj(0,x)
figure;
plot(x,y)

Это будет быстрее и точнее исполняемой квадратуры.

Если вы хотите определить с высокой степенью точности точки, в которых y равно 0.7 или 0, а не считывать их с графика, вы можете использовать символьные вычисления в сочетании с solve и sym/besselj. Предполагая, что это то, о чем эта часть вопроса (я ничего не знаю об антеннах), вы можете использовать что-то вроде:

syms x;
double(solve(besselj(0,x) == 0.7,x))
person horchler    schedule 24.11.2013
comment
мне нужно выполнить интеграцию на самом деле. Встроенная функция Матлаба его не интегрирует? - person user1398405; 25.11.2013
comment
besselj вычисляет его численно каким-то образом — путем интегрирования или другого означает - это, вероятно, быстрее и точнее, чем использование любого наивного метода. В Matlab вычисление этого самостоятельно похоже на написание собственной версии erf или gamma. - person horchler; 25.11.2013
comment
спасибо за Ваш ответ. предыдущий работает, а второй нет. Ошибка в форматах - person user1398405; 25.11.2013
comment
Если вы используете старую версию Matlab, вы можете попробовать вместо этого double(solve('besselj(0,x)=0.7','x')), но в противном случае я не уверен, что может быть не так, если только which sym/besselj ничего не находит. - person horchler; 25.11.2013
comment
Значение x при y = 0,7 на графике близко к 0,3, но упомянутая выше команда возвращает значение 1,1412. - person user1398405; 25.11.2013
comment
Нет, это не то, что говорит сюжет. Вы поменяли местами x и y. Функция solve работает правильно и возвращает значение x, когда y равно 0.7, как я указал в своем ответе: около 1.1412. Если вам нужно значение y, когда x равно 0.7, тогда вам не нужно делать ничего особенного — даже сюжета — просто besselj(0,0.7). Я не знаю, что означают ваши переменные и что вы решаете с точки зрения антенн, поэтому вам нужно понять проблему. - person horchler; 25.11.2013

Команда integral не работает с символами, она работает с функциями. Для символической интеграции используется команда int.

У меня сейчас нет MATLAB под рукой, чтобы проверить на опечатки и т. д., но что-то вроде этого должно работать:

x = 0.1;
integral(@(theta) cos(x.*sin(theta)), 0, pi)/pi

Или даже

bessel = @(x) integral(@(theta) cos(x.*sin(theta)), 0, pi)/pi;
bessel(0.1)
person Christopher Creutzig    schedule 24.11.2013
comment
спасибо, я попробую это. Я также использовал int, но это тоже не сработало. - person user1398405; 25.11.2013