#include "profitability.hpp" #include "secant.cpp" using namespace std; bool profitability::run ( double * y ) { OK=true; // cout<N;i++) { if(C->Inv[i]>EPS) den+=C->Inv[i]; num+=(C->Rev[i]-C->Coper[i]-C->Amort[i]); } if (num>EPS && den>EPS && C->N>0) { // if(!MUTE)cout<<" OK"; return num/C->N/den; } else return 0.0; } double profitability::RR() { // if(!MUTE)cout<N;i++) { num+=(C->Rev[i]-C->Coper[i])/pow(1.0+C->i_rate, i); den+=C->Inv[i]/pow(1.0+C->i_rate, i); } if(num>EPS && den>EPS) { // if(!MUTE)cout<<" OK"; return num/den; } else return 0.0; } double profitability::DFR() { //if(!MUTE)cout<(); solver->set(this, 0.0, 0.01); OK = solver->run(); if ( OK && num>EPS && num < 1e20 ) { // if(!MUTE)cout<<" OK"; return num; } else return 0.0; } double profitability::f(double x) { num=x; sum=0.0; for(i=0;iN;i++) sum += C->Flow[i]/pow(1.0+x, i); return sum; } double profitability::PT() { // if(!MUTE)cout<N;i++) { if((sum+C->Flow[i])>0.0) { den=0.0; while(sum+den*C->Flow[i]<=0.0) den+=0.001; den+=double(i-1); i=C->N; } else sum+=C->Flow[i]; } if(den>EPS) { // if(!MUTE)cout<<" OK"; return den; } else return 0.0; } double profitability::AEC() { //if(!MUTE)cout<N;i++) sum+=(C->Coper[i]+C->Inv[i])/pow(1.0+C->i_rate, i); if (sum>EPS) { // if(!MUTE) // cout<<" OK"; return sum*(C->i_rate*pow(1.0+C->i_rate,C->N))/(pow(1.0+C->i_rate,C->N)-1.0); } else return 0.0; } double profitability::NPV() { // if(!MUTE)cout<N ; i++ ) sum += C->Flowact[i]; if ( sum > EPS ) { // if(!MUTE) // cout<<" OK"; return sum; } return 0.0; }