Matrix Dimensions must agree using integral

Hello all,
I am trying to integrate over a function.
% calculation of f(b)
b = exp((-q*Vj)/(2*kB*Temp))*cosh((Et-Ei)/((kB*Temp)+0.5*(log(tau_p0/tau_n0))));
% integrate over x while varying b
fcn_b = zeros(1,length(b));
fcn = @(x)1./((x.^2)+(2.*b.*x)+1);
fcn_b = integral(fcn,0,Inf);
end
But I receive an error after the fcn = @x line saying matrix dimensions must agree.
The size of b => 1 x 141. Any help would be appreciated.

2 commentaires

KSSV
KSSV le 21 Fév 2018
Modifié(e) : KSSV le 21 Fév 2018
Give us the complete code......what is q? what is size of x?
atsprink
atsprink le 21 Fév 2018
Modifié(e) : atsprink le 21 Fév 2018
All of those values are just constants except Vj. Vj is an array of 1 x 141. x is not a size, its a function of x as in f(x) = Integration of 1 / (x^2 + 2bx + 1) I uploaded all the files. Start with main.m
edit: added too many files.... comment out lines 10-19 in main.m as those function calls are not needed

Connectez-vous pour commenter.

 Réponse acceptée

atsprink
atsprink le 21 Fév 2018

2 votes

I figured it out I believe. I needed to add " 'ArrayValued', true " to my integral fcn_b line of code. It is at least not throwing an error right now but not sure if it is returning a correct answer.

3 commentaires

Benjamin
Benjamin le 6 Nov 2019
I had the same error of
Error using /
Matrix dimensions must agree.
in an numerical integration in which the @(x) function is very complicated, and after I added 'ArrayValued',true it fixed my problem.
Thank you so.
Lucas Ivan
Lucas Ivan le 23 Fév 2023
Hello everyone! I was having the same error and I could solve it with this. However, any idea on why we need to add this argument?
Torsten
Torsten le 23 Fév 2023
Modifié(e) : Torsten le 23 Fév 2023
However, any idea on why we need to add this argument?
If you don't add this argument, MATLAB calls your function to be integrated with a vector of values for the integration variable and expects your function to return a vector of the same size. This won't happen since your function itself is a vector of functions - depending on the vector b. If you set "ArrayValued" to "true", MATLAB "knows" that you want to integrate a vector-valued function and calls it only with single (scalar) values for the integration variable.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by