How to take an integral of a matrix

I want to find an integral of a matrix:
T=[2 -sqrt(3) -1]';
R=[0.0042 -0.0755];
I=eye(3);
A=diag([7, 5, 2.05]');
B=[1 1 1]';
F=[-30.6722 17.8303 -0.3775];
fun=@(x) T*F*inv(exp(i*x)*I-A-B*F)*B*R*R'*B'*inv(exp(i*x)*I-A-B*F)'*F'*T';
q=integral(fun,0,2.*pi)
Can you please help me to correct the code? It is possible to use this integral function for matrix?

2 Commenti

Do not use inv() for this purpose. Use \ instead.
You can precalculate much of that for performance reasons.
And do not do it all in an anonymous function, since the exp(j*x*I - A - BF) has to be calculated twice.
Hi, thanks for reply. I have changed e to exp. My matrix is small, I don't worry for performance, I just want to able to calculate the integral

Accedi per commentare.

 Risposta accettata

Hi Radik,
I assume you basically want to integrate each element in the resulting product matrix.
Lots of inner and outer products here. Looking at the overall product, R*R' is (row) x (col), a scalar inner product, so you can pull that out as an overall factor [where Matlab uses ' instead of the * that is in the formula]. The quantity
G = F*inv(exp(i*x)*I-A-B*F)*B
is (row) x (matrix) x (col) so it is also a scalar. Now that R*R' is out front, one can pull out G*G' and all that is left is T*T', which is the outer product (col) x (row). It's a matrix of rank 1. All together you have
(T*T')*(R*R')* Integral(G*G')dx
so you only have to integrate a scalar function of x. As Walter pointed out, in general it's better to use
G = F*( (exp(i*x)*I-A-B*F)\B )
instead of inv, but for a 2x2 it probably doesn't matter too much.

6 Commenti

David, when I
syms x real
simplify( rewrite(fun(x), 'sinhcosh') )
then I get back a 3 x 3, not a 1 x 1 ?
Hi David,
Here I rewrote the code:
T=[2 -sqrt(3) -1]';
R=[0.0042 -0.0755];
I=eye(3);
A=diag([7, 5, 2.05]');
B=[1 1 1]';
F=[-30.6722 17.8303 -0.3775];
syms x
G=F*((exp(i*x)*I-A-B*F)\B);
W=R*R';
P=T*T';
f = G*G';
L=int(f,[0 2.*pi])
K=W*P*L;
I expect 3 by 3 real matrix, since I have specified the integral from 0 to 2.*pi, however, I get 3 by 3 matrix which still contains integral and unknown x.
Output:
[ int(2*((71142687689456006461795063853565*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(144115188075855872*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) - (20678260188530778820845412562775*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(72057594037927936*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) + (248858507409610761*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(2048*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335)), x, 0, 2*pi), int(-3^(1/2)*((71142687689456006461795063853565*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(144115188075855872*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) - (20678260188530778820845412562775*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(72057594037927936*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) + (248858507409610761*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(2048*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335)), x, 0, 2*pi), int(-((71142687689456006461795063853565*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(144115188075855872*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) - (20678260188530778820845412562775*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(72057594037927936*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) + (248858507409610761*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(2048*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335)), x, 0, 2*pi)]
[ int(-(1648069585494111*3^(1/2)*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335))*((43167283903322915*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335) + (10625680370827264*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))/144115188075855872, x, 0, 2*pi), int((4944208756482333*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335))*((43167283903322915*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335) + (10625680370827264*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))/288230376151711744, x, 0, 2*pi), int((1648069585494111*3^(1/2)*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335))*((43167283903322915*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335) + (10625680370827264*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))/288230376151711744, x, 0, 2*pi)]
[ int(-2*((71142687689456006461795063853565*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(288230376151711744*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) - (20678260188530778820845412562775*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(144115188075855872*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) + (248858507409610761*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(4096*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335)), x, 0, 2*pi), int(3^(1/2)*((71142687689456006461795063853565*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(288230376151711744*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) - (20678260188530778820845412562775*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(144115188075855872*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) + (248858507409610761*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(4096*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335)), x, 0, 2*pi), int(((71142687689456006461795063853565*(205 + 20*exp(x*2i) - 141*exp(x*1i)))/(288230376151711744*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) - (20678260188530778820845412562775*(287 + 20*exp(x*2i) - 181*exp(x*1i)))/(144115188075855872*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)) + (248858507409610761*(exp(x*1i) - 5)*(exp(x*1i) - 7))/(4096*(5494532282880627*exp(x*1i) - 23379311565587116*exp(x*2i) + 28147497671065600*exp(x*3i) - 344947583959335)))*((43167283903322915*(205 + 20*exp(-conj(x)*2i) - 141*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) - (25093916386220050*(287 + 20*exp(-conj(x)*2i) - 181*exp(-conj(x)*1i)))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335) + (10625680370827264*(exp(-conj(x)*1i) - 5)*(exp(-conj(x)*1i) - 7))/(5494532282880627*exp(-conj(x)*1i) - 23379311565587116*exp(-conj(x)*2i) + 28147497671065600*exp(-conj(x)*3i) - 344947583959335)), x, 0, 2*pi)]
Hi Radik, I suggest that you not declare x to be a sym, create a function that defines G*G' and use 'integral' to calculate the integral numerically.
Hi Walter,
I don't think I am understanding the gist of your comment, out of context.
Radik:
T=[2 -sqrt(3) -1]';
R=[0.0042 -0.0755];
I=eye(3);
A=diag([7, 5, 2.05]');
B=[1 1 1]';
F=[-30.6722 17.8303 -0.3775];
syms x real %changed
G=F*((exp(i*x)*I-A-B*F)\B);
W=R*R';
P=T*T';
f = G*G';
L=int(f,[0 2.*pi])
K=W*P*L;
that is it, thank you Walter!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su MATLAB Parallel Server in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by