Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

12 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Division par zéro

 
n°18118
illana82
Profil : Jeune recrue
Posté le 28-12-2006 à 16:49:30  profilanswer
 

Salut,
 
est-ce que quelqu'un peut me dire pourquoi, quand je tape cette comande dans MATLAB "quad('prime_pure_reass',0,1)" sachant que ma fontion 'prime_pure_reass' est définie par "function y=prime_pure_reass(x);
y=(1+(((1-0.11)^25.8)./((1-0.11.*(1-exp(-0.04.*((1/x)-1))))^25.8))).*(1/(x^2));"
 
Matlab me répond :
"??? Error using ==> /
Matrix dimensions must agree.
 
Error in ==> C:\Documents and Settings\ILLANA\Mes documents\Master Actuariat 2006-2007\Projet de théorie du risque et réassurance\prime_pure_reass.m
On line 2  ==> y=(1+(((1-0.11)^25.8)./((1-0.11.*(1-exp(-0.04.*((1/x)-1))))^25.8))).*(1/(x^2));
Error in ==> C:\MATLAB6p1\toolbox\matlab\funfun\quad.m
On line 62  ==> y = feval(f, x, varargin{:});"
 
 
Merci

n°18119
illana82
Profil : Jeune recrue
Posté le 28-12-2006 à 16:53:51  profilanswer
 

Et quand je calcule l'intégrale de cette fonction en VBA sous Excel, par le programme suivant, sachant que dans Cells(i,1), j'ai simulé 10000 valeurs d'une variable suivant une loi uniforme sur [0,1] :
 
Sub Prime_pure_réass()
Dim N As Double
Dim i As Double
Dim x0 As Double
Dim r As Double
Dim p As Double
Dim E As Double
Dim alpha As Double
 
N = 10000
i = 1
alpha = 0.04
x0 = 350
p = 0.11
r = 25.8
E = 0
 
For i = 1 To N
    Cells(i, 2) = 1 + ((1 - p) ^ r) / ((1 - (p * (1 - Exp(-alpha * ((1 /  
                    Cells(i, 1)) - 1))))) ^ r)
    Cells(i, 3) = (1 / (Cells(i, 1) ^ 2)) * Cells(i, 2)
    E = E + Cells(i, 3)
Next i
 
Cells(7, 7) = E
 
End Sub
 
Le débogueur m'affiche : "Erreur d'exécution '11' : Division par zéro"
 
Pourquoi ???

n°18120
chitiwi
Profil : Membre
Posté le 28-12-2006 à 17:25:38  profilanswer
 

cela vient de la premiere valeur qui est zero, avec le 1/cells(i,1) il divise par 0 est cela bloque, si tu commenceqta boucle a i=2 to N cela marchera (rajoute des ".value" apres chaque cells(i,1) cells(i,2) etc)

n°18121
illana82
Profil : Jeune recrue
Posté le 28-12-2006 à 19:11:37  profilanswer
 

Désolée, j'ai changé mon programme comme tu me l'as conseillé, mais j'ai toujours la même erreur : dans la colonne 1, c'est-à-dire de  
Cells(2,1) à Cells(10001,1), j'ai simulé 10000 valeurs d'une variable de loi uniforme sur [0,1] par le générateur de nombres aléatoires.
Et mon programme VBA est :
 
Sub Prime_pure_réass()
Dim N As Double
Dim i As Double
Dim x0 As Double
Dim r As Double
Dim p As Double
Dim E As Double
Dim alpha As Double
 
N = 10000
i = 2
alpha = 0.04
x0 = 350
p = 0.11
r = 25.8
E = 0
 
For i = 2 To N
    Cells(i, 2).Value = -1 + ((1 - p) ^ r) / ((1 - (p * (1 - Exp(-alpha * ((1 / Cells(i, 1).Value) - 1))))) ^ r)
    Cells(i, 3).Value = (1 / (Cells(i, 1).Value ^ 2)) * Cells(i, 2).Value
    E = E + Cells(i, 3).Value
Next i
 
Cells(7, 7).Value = E
 
End Sub
 
 

n°18124
chitiwi
Profil : Membre
Posté le 28-12-2006 à 20:35:27  profilanswer
 

le probleme ne vient pas de la position des valeur mais de la premiere valeur en l'occurence 0 il ne peut pas calculer la fonction avec comme valeur 0 car cela entraine une division par 0, si tu fait manuellemen le calcul tu trouvera pour la valeur 0 cells(i,2)=0 dans le cas que tu viens de montrer ou 2 dans l'autre cas car je sais pa si cela est fait expré mai il y a une diff entre ton premier et deuxieme pro pour cells(i,2) =1..... et l'autre cells(i,2)=-1..... tu aura donc pour la valeur 0 cells(i,3)= infini ds le prog 1 et 0 ds le prog 2. En faite pour la valuer 0 tu ne peut pas lautomatiser a cause de la division par 0 les autre calcul se font sans probleme


Aller à :
Ajouter une réponse