Calcul Approximatif du Taux de Retour Interne (TRI) en C

CBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, nous apprendrons à approximer le Taux de Retour Interne (TRI) à l'aide d'un programme C. Nous commencerons par lire les flux de trésorerie, qui représentent l'argent investi ou reçu à différentes périodes d'un investissement. Ensuite, nous utiliserons une approche itérative pour trouver le taux où la Valeur Actualisée Nette (VAN) est approximativement nulle, ce qui nous donne le TRI estimé. Enfin, nous afficherons le TRI calculé. Ce laboratoire couvre des concepts clés de mathématiques financières et en démontre la mise en œuvre en programmation C.

Lecture des Flux de Trésorerie

Dans cette étape, nous allons apprendre à lire et stocker les flux de trésorerie pour calculer le Taux de Retour Interne (TRI) dans un programme C. Les flux de trésorerie représentent l'argent investi ou reçu à différentes périodes d'un investissement.

Tout d'abord, créons un fichier C pour implémenter la fonctionnalité de lecture des flux de trésorerie :

cd ~/project
nano irr_calculation.c

Maintenant, écrivons le code initial pour lire les flux de trésorerie :

#include <stdio.h>
#define MAX_CASH_FLOWS 10

int main() {
    double cash_flows[MAX_CASH_FLOWS];
    int num_cash_flows;

    printf("Entrez le nombre de flux de trésorerie (max %d) : ", MAX_CASH_FLOWS);
    scanf("%d", &num_cash_flows);

    printf("Entrez les flux de trésorerie (négatif pour les investissements, positif pour les retours) :\n");
    for (int i = 0; i < num_cash_flows; i++) {
        printf("Flux de trésorerie %d : ", i);
        scanf("%lf", &cash_flows[i]);
    }

    // Affichage des flux de trésorerie saisis pour vérification
    printf("\nFlux de trésorerie saisis :\n");
    for (int i = 0; i < num_cash_flows; i++) {
        printf("Flux de trésorerie %d : %.2f\n", i, cash_flows[i]);
    }

    return 0;
}

Compilation et exécution du programme :

gcc irr_calculation.c -o irr_calculation
./irr_calculation

Exemple de sortie :

Entrez le nombre de flux de trésorerie (max 10) : 4
Entrez les flux de trésorerie (négatif pour les investissements, positif pour les retours) :
Flux de trésorerie 0 : -1000
Flux de trésorerie 1 : 300
Flux de trésorerie 2 : 400
Flux de trésorerie 3 : 500

Flux de trésorerie saisis :
Flux de trésorerie 0 : -1000.00
Flux de trésorerie 1 : 300.00
Flux de trésorerie 2 : 400.00
Flux de trésorerie 3 : 500.00
Explication
  • Nous définissons un nombre maximal de flux de trésorerie (MAX_CASH_FLOWS) pour éviter une utilisation excessive de la mémoire.
  • Le programme demande d'abord à l'utilisateur d'entrer le nombre de flux de trésorerie.
  • Ensuite, il invite l'utilisateur à saisir chaque valeur de flux de trésorerie.
  • Les valeurs négatives représentent les investissements initiaux.
  • Les valeurs positives représentent les retours ou les revenus.
  • Le programme affiche les flux de trésorerie saisis pour vérification.

Utilisation de l'itération pour trouver le taux où la VAN ≈ 0

Dans cette étape, nous allons étendre notre programme précédent de flux de trésorerie pour calculer le Taux de Retour Interne (TRI) à l'aide d'une méthode numérique itérative.

Tout d'abord, modifions notre fichier C existant :

cd ~/project
nano irr_calculation.c

Maintenant, implémentons la logique de calcul de la VAN et du TRI :

#include <stdio.h>
#include <math.h>
#define MAX_CASH_FLOWS 10
#define EPSILON 0.0001

double calculate_npv(double cash_flows[], int num_cash_flows, double rate) {
    double npv = 0.0;
    for (int i = 0; i < num_cash_flows; i++) {
        npv += cash_flows[i] / pow(1 + rate, i);
    }
    return npv;
}

double find_irr(double cash_flows[], int num_cash_flows) {
    double rate_low = -0.9;
    double rate_high = 10.0;
    double rate = 0.1;

    while ((rate_high - rate_low) > EPSILON) {
        double npv = calculate_npv(cash_flows, num_cash_flows, rate);

        if (fabs(npv) < EPSILON) {
            return rate;
        }

        if (npv > 0) {
            rate_low = rate;
        } else {
            rate_high = rate;
        }

        rate = (rate_low + rate_high) / 2.0;
    }

    return rate;
}

int main() {
    double cash_flows[MAX_CASH_FLOWS];
    int num_cash_flows;

    printf("Entrez le nombre de flux de trésorerie (max %d) : ", MAX_CASH_FLOWS);
    scanf("%d", &num_cash_flows);

    printf("Entrez les flux de trésorerie (négatif pour les investissements, positif pour les retours) :\n");
    for (int i = 0; i < num_cash_flows; i++) {
        printf("Flux de trésorerie %d : ", i);
        scanf("%lf", &cash_flows[i]);
    }

    double irr = find_irr(cash_flows, num_cash_flows);
    printf("\nTaux de Retour Interne (TRI) approximatif : %.4f ou %.2f%%\n", irr, irr * 100);

    return 0;
}

Compilation du programme avec la bibliothèque mathématique :

gcc irr_calculation.c -o irr_calculation -lm

Exécution du programme avec des flux de trésorerie d'exemple :

./irr_calculation

Exemple de sortie :

Entrez le nombre de flux de trésorerie (max 10) : 4
Entrez les flux de trésorerie (négatif pour les investissements, positif pour les retours) :
Flux de trésorerie 0 : -1000
Flux de trésorerie 1 : 300
Flux de trésorerie 2 : 400
Flux de trésorerie 3 : 500

Taux de Retour Interne (TRI) approximatif : 0.2154 ou 21.54%
Explication
  • calculate_npv() calcule la Valeur Actualisée Nette (VAN) pour un taux d'intérêt donné.
  • find_irr() utilise la méthode de bissection pour trouver le taux où la VAN ≈ 0.
  • Nous utilisons EPSILON pour définir la précision de la convergence.
  • L'algorithme réduit itérativement l'intervalle du TRI.
  • Le TRI final est calculé et affiché en décimal et en pourcentage.

Affichage du TRI estimé

Dans cette dernière étape, nous allons améliorer notre programme de calcul du TRI pour fournir une sortie plus détaillée et démontrer différents scénarios d'investissement.

Modifions notre fichier C existant pour ajouter une analyse du TRI plus complète :

cd ~/project
nano irr_calculation.c

Mettre à jour le code avec une sortie et une analyse supplémentaires :

#include <stdio.h>
#include <math.h>
#define MAX_CASH_FLOWS 10
#define EPSILON 0.0001

double calculate_npv(double cash_flows[], int num_cash_flows, double rate) {
    double npv = 0.0;
    for (int i = 0; i < num_cash_flows; i++) {
        npv += cash_flows[i] / pow(1 + rate, i);
    }
    return npv;
}

double find_irr(double cash_flows[], int num_cash_flows) {
    double rate_low = -0.9;
    double rate_high = 10.0;
    double rate = 0.1;

    while ((rate_high - rate_low) > EPSILON) {
        double npv = calculate_npv(cash_flows, num_cash_flows, rate);

        if (fabs(npv) < EPSILON) {
            return rate;
        }

        if (npv > 0) {
            rate_low = rate;
        } else {
            rate_high = rate;
        }

        rate = (rate_low + rate_high) / 2.0;
    }

    return rate;
}

void print_investment_analysis(double cash_flows[], int num_cash_flows, double irr) {
    double total_investment = 0;
    double total_returns = 0;

    printf("\n--- Analyse de l'investissement ---\n");

    // Détail des flux de trésorerie
    for (int i = 0; i < num_cash_flows; i++) {
        printf("Période %d : $%.2f\n", i, cash_flows[i]);

        if (cash_flows[i] < 0) {
            total_investment += fabs(cash_flows[i]);
        } else {
            total_returns += cash_flows[i];
        }
    }

    // Résumé de l'investissement
    printf("\nInvestissement total : $%.2f\n", total_investment);
    printf("Retours totaux : $%.2f\n", total_returns);
    printf("Profit net : $%.2f\n", total_returns - total_investment);

    // Détails du TRI
    printf("\nTaux de Retour Interne (TRI) :\n");
    printf("Décimal : %.4f\n", irr);
    printf("Pourcentage : %.2f%%\n", irr * 100);

    // Interprétation des performances de l'investissement
    if (irr > 0.15) {
        printf("\nPerformance de l'investissement : Excellente\n");
    } else if (irr > 0.10) {
        printf("\nPerformance de l'investissement : Bonne\n");
    } else if (irr > 0) {
        printf("\nPerformance de l'investissement : Modérée\n");
    } else {
        printf("\nPerformance de l'investissement : Faible\n");
    }
}

int main() {
    double cash_flows[MAX_CASH_FLOWS];
    int num_cash_flows;

    printf("Entrez le nombre de flux de trésorerie (max %d) : ", MAX_CASH_FLOWS);
    scanf("%d", &num_cash_flows);

    printf("Entrez les flux de trésorerie (négatif pour les investissements, positif pour les retours) :\n");
    for (int i = 0; i < num_cash_flows; i++) {
        printf("Flux de trésorerie %d : ", i);
        scanf("%lf", &cash_flows[i]);
    }

    double irr = find_irr(cash_flows, num_cash_flows);
    print_investment_analysis(cash_flows, num_cash_flows, irr);

    return 0;
}

Compilation du programme :

gcc irr_calculation.c -o irr_calculation -lm

Exécution du programme avec un scénario d'investissement d'exemple :

./irr_calculation

Exemple de sortie :

... (sortie identique à l'exemple précédent)
Explication
  • Fonction print_investment_analysis() ajoutée pour fournir une sortie complète.
  • Calcule l'investissement total, les rendements et le profit net.
  • Interprète les performances du TRI avec des catégories descriptives.
  • Fournit une ventilation détaillée des flux de trésorerie et des indicateurs d'investissement.

Résumé

Dans ce laboratoire, nous avons d'abord appris à lire et à stocker les flux de trésorerie pour calculer le Taux de Retour Interne (TRI) dans un programme C. Les flux de trésorerie représentent l'argent investi ou reçu à différentes périodes d'un investissement. Nous avons ensuite exploré l'utilisation de l'itération pour trouver le taux où la Valeur Actualisée Nette (VAN) est approximativement nulle, ce qui correspond au TRI. Enfin, nous avons appris à afficher le TRI estimé. Les points clés de ce laboratoire sont la compréhension des structures de données des flux de trésorerie, la mise en œuvre d'algorithmes itératifs pour trouver le TRI et la présentation du résultat final.