# Numerical integration in MATLAB

조회 수: 6(최근 30일)
Raj Patel 27 Oct 2020
댓글: Star Strider 27 Oct 2020
Hello everyone,
I am trying to first numerically integrate a function and then plot the output of the integral. However, I have a variable T which is in the range (1:1000). I am not sure how to use a loop in integral and then plot values for all T with the corresponding value of integral. The MATLAB code is:
Hello everyone,
I am trying to first numerically integrate a function and then plot the output of the integral. However, I have a variable T in the integral which is in the range (1:1000). I am not sure how to use a loop in integral and then plot values for all T with the corresponding value of integral. The MATLAB code is:
kb = 1.38 .* 10.^-23;
h = 1.05 .* 10.^-34;
wd = 6.94 .* 10.^13;
vs = 6084;
B1 = 2.7 .* 10.^-19;
B2 = 170;
A1 = 2 .* 10.^-45;
D = 0.004;
T = 300;
c = (h.^2 .* D) ./ (2 .* pi * pi * vs * kb .* T .* T);
T = 1:1000;
fun = @(x) ((x.^4 .* exp((h.*x) ./ (kb .* T))) ./ (((exp((h.*x) ./ (kb .* T))-1).^2) .* ((D.*B1 .* x.^2 .* T .* exp(-B2/T)) + (D.*A1 .* x.^4) + vs)));
K = c .* integral(fun,0,wd)
plot(T, K)
Raj Patel.

#### 댓글 수: 1

Raj Patel 27 Oct 2020
The code is:
(Note: I removed a line where T was defined 2nd time)
Raj Patel.
kb = 1.38 .* 10.^-23;
h = 1.05 .* 10.^-34;
wd = 6.94 .* 10.^13;
vs = 6084;
B1 = 2.7 .* 10.^-19;
B2 = 170;
A1 = 2 .* 10.^-45;
D = 0.004;
c = (h.^2 .* D) ./ (2 .* pi * pi * vs * kb .* T .* T);
T = 1:1000;
fun = @(x) ((x.^4 .* exp((h.*x) ./ (kb .* T))) ./ (((exp((h.*x) ./ (kb .* T))-1).^2) .* ((D.*B1 .* x.^2 .* T .* exp(-B2/T)) + (D.*A1 .* x.^4) + vs)));
K = c .* integral(fun,0,wd)
plot(T, K)

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

### 채택된 답변

Star Strider 27 Oct 2020
Try this:
c = @(T) (h.^2 .* D) ./ (2 .* pi * pi * vs * kb .* T .* T);
fun = @(x,T) ((x.^4 .* exp((h.*x) ./ (kb .* T))) ./ (((exp((h.*x) ./ (kb .* T))-1).^2) .* ((D.*B1 .* x.^2 .* T .* exp(-B2/T)) + (D.*A1 .* x.^4) + vs)));
T = 1:1000;for k = 1:numel(T)
K(k) = c(T(k)) .* integral(@(x)fun(x,T(k)),0,wd);
end
figure
plot(T, K)
grid
xlabel('T')
ylabel('K')
producing: Since both ‘c’ and ‘fun’ are functions of ‘T’, they need to be coded as such.

#### 댓글 수: 4

표시 이전 댓글 수: 1
Star Strider 27 Oct 2020
As always, my pleasure!
It can be fully vectorised, avoiding the loop, using the 'ArrayValued' name-value pair:
c = @(T) (h.^2 .* D) ./ (2 .* pi * pi * vs * kb .* T .* T);
fun = @(x,T) ((x.^4 .* exp((h.*x) ./ (kb .* T))) ./ (((exp((h.*x) ./ (kb .* T))-1).^2) .* ((D.*B1 .* x.^2 .* T .* exp(-B2./T)) + (D.*A1 .* x.^4) + vs)));
T = 1:1000;
K = c(T) .* integral(@(x)fun(x,T),0,wd,'ArrayValued',1);
figure
plot(T, K)
grid
xlabel('T')
ylabel('K')
producing the same plot. The ‘fun’ code changed slightly to make it fully vectorised.
Raj Patel 27 Oct 2020
Oh! I see.
Thanks,
Raj Patel.
Star Strider 27 Oct 2020
As always, my pleasure!

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

### Community Treasure Hunt

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

Start Hunting!