1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
fac=1e-5; % Valeur initial.
kb=0;err=+1;ico=0;isign=1;
while err>0
ico=ico+1; kb=kb+fac; om=kb^2;
e1=-10.4210526315789*om**2;
e2=0;
e3=0;
e4=0;
e5=50021.0526315789*om**2;
e6=-10.4210526315789*om**2;
T = [0 1 0 0 0 0 ;...
e1 0 e2 0 0 e3 ;...
0 0 0 1 0 0 ;...
0 0 0 0 1 0 ;...
0 0 0 0 0 1 ;...
0 e4 e5 0 e6 0];
[E,lambda]=eig(T); lambda=diag(lambda);
gdet1= E;
gdet2= E;
tt1 =gdet1(1,:);
tt2 =gdet1(3,:);
tt3 =gdet1(4,:);
tt4 =gdet2(1,:);
tt5 =gdet2(3,:);
tt6 =gdet2(4,:);
tem1=[tt1;tt2;tt3];
tem2=[tt4;tt5;tt6];
lam1= lambda*1/2;
lam2= lambda*(-1/2);
e_lam1 = diag(exp(lam1),0); %e_lam1(1,2) = a/2;
e_lam2 = diag(exp(lam2),0); %e_lam2(1,2) = -a/2;
% print(lam1,lam2);
bc1 =tem1*e_lam1;
bc2 =tem2*e_lam2;
bc =[bc1;bc2];
for ii=1:6
if real(lam1(ii))>100 % large positive
bc(:,ii)=exp(imag(lam1(ii))*1i)*[tt1(ii); tt2(ii); tt3(ii);0;0;0]';
elseif real(lam1(ii))<-100 % large negative
bc(:,ii)=exp(imag(lam1(ii))*1i)*[0;0;0;tt4(ii); tt5(ii); tt6(ii)]';
end
end
err=det(bc)/det(E);
%% To avoid looping stops at once with just 1 loop
if ico==1
if err<0
isign=-1;
else
isign=1;
end
end
err=err*isign;
%% To decide the tolerance - if the error is quite large when err<0, then err =-err to loop again
if err<0
kb=kb-fac;
fac=fac/2;
if fac>1.0e-5
err=-err;
end
end
printf('err: %f. | fac: %f.| om %f.\n', err, fac, om);
end |
Partager