Boucle Scilab

Discutez d'informatique ici !
Zweig
Membre Complexe
Messages: 2010
Enregistré le: 02 Mar 2008, 04:52

par Zweig » 24 Jan 2012, 00:48

Super, j'obtiens un tableau ... mais pas le bon :ptdr: J'aimerai avoir dès la première ligne, le "1" suivi du capital restant du, des intêrets et du capital remboursé, ce qui n'est manifestement pas le cas ici ...

Pour n = 1 :

Code: Tout sélectionner
  1.     0.           0.           0.         
    2.     94651.417    0.           594.       
    3.     94301.933    244.51616    594.       
    4.     93951.546    243.61333    349.48384 
    5.     93600.254    242.70816    350.38667 
    6.     93248.055    241.80066    351.29184 
    7.     92894.946    240.89081    352.19934 
    8.     92540.924    239.97861    353.10919 
    9.     92185.988    239.06405    354.02139 
    10.    91830.136    238.14714    354.93595 
    11.    91473.363    237.22785    355.85286 
    12.    91115.67     236.30619    356.77215 
    13.    90757.052    235.38215    357.69381 
    14.    90397.507    234.45572    358.61785 
    15.    90037.034    233.52689    359.54428 
    16.    89675.63     232.59567    360.47311 
    17.    89313.292    231.66204    361.40433 
    18.    88950.018    230.726      362.33796 
    19.    88585.806    229.78755    363.274   
    20.    88220.652    228.84666    364.21245 
    21.    87854.556    227.90335    365.15334 
    22.    87487.513    226.9576     366.09665 
    23.    87119.523    226.00941    367.0424   
    24.    86750.581    225.05877    367.99059


Code: Tout sélectionner
function t=taux(n) // n en années
    if n <= 10 then
        t = 0.031/12
    else
        if n <= 15 then
            t=0.034/12
        else
            if n <= 20 then
                t=0.035/12
            else
                if n <= 25 then
                    t=0.0365/12
                else
                    if n <= 30 then
                        t=0.0395/12
                       
                    end
                end
            end
        end
    end
endfunction

function [Tab]=pret(n) // n en années
            for i = 1:n*24
             //R(1) = C;               
            R(i+1)= (1+taux(n))*R(i) - M ;// Capital dû restant au mois i
            I(i+1)= R(i)*taux(n) ;// Intêrets payés au mois i
            C(i+1)=M-I(i); // Capital payé au mois i
            Tab(i,1:4) = [i R(i) I(i) C(i)];
        end
   
endfunction
R(1)=95000 ;
M=594 ;



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6472
Enregistré le: 22 Nov 2007, 14:00

par fatal_error » 24 Jan 2012, 02:08

alors,
parenthèse, au lieu de t'emmerder avec l'indentation, tu peux faire un truc plus clean :
Code: Tout sélectionner
function t=taux(n) // n en années
    if n <= 10 then
        t = 0.031/12
        return
    end
    if n <= 15 then
       t=0.034/12
       return
    end
    //etc
endfunction



Ensuite dans ta bouclasse,
Code: Tout sélectionner
Tab(i,1:4) = [i R(i) I(i) C(i)];

pour i = 1, I(i) et C(i) ont jamais été initialisées.
R(i) devrait valoir 95000 (dans ton affichage, ca vaut 0, jsais pas pourquoi).
De toute façon, les variables globales, c'est le mal. Tu peux directement appeler ta fonction pret(n,I,R,C)
et à l'intérieur de celle-ci initialiser
R(1) = R;C(1)=C;I(1)=I;(ou bien si I est déduit de R, et C, t'as pas besoin de passer I).
Fin bref les paramètres tu les passes à la fonction pret au lieu de faire des variables globales.

Ensuite, t'as plus qu'à afficher à l'intérieur de ta boucle for les différentes valeurs, et checker qu'elles sont correctes (genre pour les premieres valeurs, et les tres grandes, parce que si tappeles pret avec n=2, ca va piner :D)!
la vie est une fête :)

Zweig
Membre Complexe
Messages: 2010
Enregistré le: 02 Mar 2008, 04:52

par Zweig » 24 Jan 2012, 02:20

J'ai obtenu le bon code entre temps (modulo les dernières lignes de plot qui posent problèmes, voir ci-dessous)

Code: Tout sélectionner
function t=taux(n) // n en années
    if n <= 10 then
        t = 0.031/12
    else
        if n <= 15 then
            t=0.034/12
        else
            if n <= 20 then
                t=0.035/12
            else
                if n <= 25 then
                    t=0.0365/12
                else
                    if n <= 30 then
                        t=0.0395/12
                       
                    end
                end
            end
        end
    end
endfunction


M=594 ;

function [Tab]=pret(n) // n en années
    R(1)=95000 - (M-95000*taux(n)) ;
I(1) = 95000*taux(n) ;
C(1) = M - 95000*taux(n) ;
            for i = 1:n*12
             //R(1) = C;               
            R(i+1)= (1+taux(n))*R(i) - M ;// Capital dû restant au mois i
            I(i+1)= R(i)*taux(n) ;// Intêrets payés au mois i
            C(i+1)=M-I(i+1); // Capital payé au mois i
            Tab(i,1:4) = [i R(i) I(i) C(i)];
            Periode = [1:12*n]' ;
            clf()
            plot(Periode,[Tab(:,2) Tab(:, 3) Tab(:, 4)])
            clf()
           
        end
   
endfunction


Maintenant, j'obtiens une erreur pour le traçage des 3 courbes (capital dû, capital payé et intérêts en fonction des mois) sur un même graphe.

Code: Tout sélectionner
pret(1)
 !--error 10000
plot: Wrong size for input arguments 'X' and 'Y': Incompatible dimensions.
at line      93 of function checkXYPair called by : 
at line     233 of function plot called by : 
at line      13 of function pret called by :


Pourtant, sauf erreur, les X et Y sont bien des vecteurs colonnes à 12*n lignes ...

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6472
Enregistré le: 22 Nov 2007, 14:00

par fatal_error » 24 Jan 2012, 02:31

Toi t'es un gars comme ca, tu plotes en plein boucle :lol3:
(sinon check la taille de Tab(:,2) j'intuite que sa dimension c'est i!

Alors que Periode c'est 12*n (au passage tu peux sortir Periode de la boucle)
la vie est une fête :)

Zweig
Membre Complexe
Messages: 2010
Enregistré le: 02 Mar 2008, 04:52

par Zweig » 24 Jan 2012, 02:40

J'ai tout sorti du for, je n'obtiens plus d'erreurs, mais une courbe vide xD

Décidemment ...

Zweig
Membre Complexe
Messages: 2010
Enregistré le: 02 Mar 2008, 04:52

par Zweig » 24 Jan 2012, 02:42

Ah non, c'est bon ;-)

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6472
Enregistré le: 22 Nov 2007, 14:00

par fatal_error » 24 Jan 2012, 02:42

clf : clear chais pas quoi.

Faut pe eviter apres ton plot.

Bon, bonne chances pour tes péripéties informatiques, c'est lheure de Gemell!
la vie est une fête :)

Zweig
Membre Complexe
Messages: 2010
Enregistré le: 02 Mar 2008, 04:52

par Zweig » 24 Jan 2012, 15:02

Oui, merci pour tout, j'ai enfin bouclé le truc ;)

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite