Bonjour,

J'ai ce programme qui converge bien sous octave 3.0.5. mai ne converge pas sous octave 5.2.0
Pourriez-vous m'aide ?
Cordialement.

Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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