2010-12-15 124 views
1

Je prends une avance de fonds de «montant» de ma carte de crédit, en payant un «frais» initiaux (donnés en pourcentage), avec un taux promotionnel 'int ' pour le temps' len '. Je dois payer au moins «min»% du montant dû mensuel.Trouver un taux d'intérêt équivalent pour les frais d'avance de fonds + tarif préférentiel

Je mets «montant» dans un compte d'investissement rapportant un intérêt «p»%, et également effectuer les paiements mensuels à partir de ce compte.

Question: pour quelle valeur de « p », je briserai même après le temps « len »?

Voilà comment je l'ai mis en Mathematica:

DSolve[{ 

(* I start off owing amount plus the fee *) 
owed[0] == amount*(1+fee), 

(* The amount I owe increases due to credit card interest, 
    but decreases due to monthly payments *) 
owed'[t] == int*owed[t]-min*12*owed[t], 

(* I start off having amount *) 
have[0] == amount, 

(* The amount I have increases due to investment interest, 
    but decreases due to monthly payments *) 
have'[t] == p*have[t]-min*12*owed[t], 

(* After len, I want to break even *) 
owed[len] == have[len] 
}, 
{owed[t], have[t]}, {t}] 

Mathematica retourne "DSolve :: bvnul: Pour certaines branches de la solution générale, les conditions de limites données conduisent à une solution vide", qui est en fait raisonnable: il n'y a qu'une seule valeur de 'p' qui donnera une solution pour les équations différentielles ci-dessus .

Comment puis-je trouver COERCE Mathematica dans cette valeur?

J'ai essayé pour la résolution due [t], puis en remplaçant dû [t] en ont [t], et la résolution due [len] == ont [len], mais ce rendement d'une erreur similaire. Running Reduce sur "owed [len] == have [len]" a donné quelque chose de complexe et de moche.

+0

Jusqu'à présent, mon plan pour contraindre les gens à me donner de meilleures réponses n'a pas rencontré un grand succès;) – barrycarter

Répondre

2

l'équation:

owed'[t] == int owed[t]-min 12 owed[t] 

si les deux int et min sont des constantes, est simplement une fonction exponentielle. Avec la condition initiale

owed[0] == amount*(1 + fee) 

donne

owed[t_] := amount E^((int - 12 min) t) (1 + fee) 

Et c'est la solution pour due [t]

Maintenant, pour avoir [t] vous pouvez utiliser:

DSolve[{ 
    have'[t] == p*have[t] - min*12*owed[t], 
    have[len] == owed[len]}, 
{have[t]}, {t}] 

Ce vous donne l'expression pour avoir [t] qui répond à votre condition de rentabilité.

Pour obtenir la valeur de p, vous devez utiliser la dernière équation:

have[0] == amount 

ou, après le remplacement ont [0] pour sa valeur:

(amount E^(-len p) (1 + fee) (12 E^(len p) min + 
    E^(len (int - 12 min)) (-int + p)))/(-int + 12 min + p) == amount 

Cette dernière équation ne semble pas facilement résolu pour p. J'ai essayé quelques trucs (pas trop, certainement) et ça résiste fort.

Mais ...les valeurs numériques données pour le reste des paramètres sont trivialement résolues par n'importe quelle méthode numérique (je suppose)

+0

OK, donc le crux voici que vous ne pouvez pas mettre 'have [0] == amount' dans DSolve, car il n'y a pas de solution générale. Cependant, si vous calculez la solution générale et que vous avez 'have [0] == amount', tout va bien. – barrycarter

+0

@barrycarter Eh bien, je ne sais pas pourquoi cela ne fonctionne pas avec "tout à l'intérieur", juste essayé de trouver un moyen de sortir ... –

+0

Oui, merci! J'essayais juste de comprendre ce que j'avais fait de mal, et ça semble être ça. – barrycarter