MATLAB: How to integrate functions inside a loop

for loopintegrate

Hello, I am a beginner in matlab and I am trying to integrate a function where the independent variable is x, from 0 to infinity, for a range of values of en1. Here is my attempt:
a = dlmread('density.txt');// this is a two column matrix with 40 points
en1 = a(:,1);
int1 = a(:,2);
El = 0;
Tl = 0.41;
Em = -918.85;
Tm = 0.17;
Ea = -13.95;
Q = zeros(size(en1));
for k = 1:length(en1)
f = @(x,k) (int1(k))/(((en1(k)-x-El).^2+((Tl)^2)./4)*((en1(k)-x-Ea-Em)^2+((Tm)^2)/4));;
Q = quadgk(f,0,Inf);
end
I am quite lost here and would greatly appreciate it if someone can help.

Best Answer

a = dlmread('density.txt');
en1 = a(:,1);
int1 = a(:,2);
El = 0;
Tl = 0.41;
Em = -918.85;
Tm = 0.17;
Ea = -13.95;
f = @(x) int1./(((en1-x-El).^2+Tl^2./4).*((en1-x-Ea-Em).^2+Tm^2/4));
Q = integral(f,0,inf,'ArrayValued',true);
or
en1 = a(:,1);
int1 = a(:,2);
El = 0;
Tl = 0.41;
Em = -918.85;
Tm = 0.17;
Ea = -13.95;
f = @(x,k) int1(k)./(((en1(k)-x-El).^2+Tl^2./4).*((en1(k)-x-Ea-Em).^2+Tm^2/4));
Q = zeros(numel(int1),1);
for k = 1:length(en1)
Q(k) = quadgk(@(x)f(x,k),0,Inf);
end