Numeric integration of a matrix using integral2()

조회 수: 7 (최근 30일)
Gleidson Costa
Gleidson Costa 2013년 12월 5일
답변: Mike Hosea 2013년 12월 11일
I need to integrate the function F over the area 0<f<2*pi,0<p<a where:
a = 50
F = @(f,p) p.*exp(1i*k*p.*A)
k = 1
A = sin(pi/180*theta)'*cos(pi/180*phi-f)
theta = [-5:0.05:5]
phi = [0 45 90]
A is a (201x3)size matrix and so is F for earch pair (f,p). Tried integral2(F,0,2*pi,0,a) but it didn't work!
Then I made F not a handler anymore and did:
syms p f
fun=p.*exp(1i*k*p.*A)
int(fun,f,0,2*pi)
int(ans,p,0,a)
but it didn't work at all either plus computing time was intolerable! Would it be possible to resolve this still using integral2 way? I'm a MATLAB newcomer and stuck so far... Thanks in advance for any help!
  댓글 수: 1
Walter Roberson
Walter Roberson 2013년 12월 5일
Some of the integration work can be made easier by treating it as a list of integrals, one for each phi, as some of them simplify when particular values of phi are substituted. Unfortunately, for other phi (e.g., 45) the integral stays messy, and there is no obvious way to convert it to a closed form.

댓글을 달려면 로그인하십시오.

답변 (1개)

Mike Hosea
Mike Hosea 2013년 12월 11일
This is an advanced exercise for using integral2. I think this does what you wanted. The approach is to work with all scalar parameters to define the right integral and then evaluate it on a grid:
% A is a "vectorized" function of f. We will only call it with
% scalar phi and theta below.
A = @(phi,theta,f)sin(pi/180*theta).*cos(pi/180*phi-f);
% Define the integrand function with parameters k, phi, and theta. It is a
% vectorized function of the variables f and p. These can be any size as
% long as they are the same size. The function should only see scalar k,
% phi, and theta inputs.
F = @(f,p,k,phi,theta)p.*exp(1i*k*p.*A(phi,theta,f));
% Now define the integral as a function of phi and theta.
% This function only works with scalar phi and theta inputs.
a = 50;
k = 1;
ys = @(phi,theta)integral2(@(f,p)F(f,p,k,phi,theta),0,2*pi,0,a);
% Define phi and theta vectors.
theta = -5:0.05:5;
phi = [0 45 90];
% Form arrays that present each combination of phi and theta possible.
[phigrid,thetagrid] = ndgrid(phi,theta);
% Evaluate the integral function for each phi and theta combination.
y = arrayfun(ys,phigrid,thetagrid);

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differentiation에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by