2012-04-11 1 views
1

Hier meine Arbeit auf Gradienten Abstiegs-Algorithmus istGradient Abstiegs-Algorithmus

#include<iostream> 
#include<math.h> 
#include<float.h> 
using namespace std; 
double f_prime(double x) 
{ 

    return (double)(4.0*powf(x,3)-9.0*powf(x,2)); 


} 
void gradient() 
{ 
    double x_old=0; 
    double x_new=6; 
    double eps=0.01; 
    double precision=0.00001; 
    while(abs(x_new-x_old)>precision) 

    { 
     x_old=x_new; 
    x_new=x_old-eps*f_prime(x_old); 


    } 
    cout<<" local minimum at : "<<x_new<<endl; 

} 
int main() 
    { 

     gradient(); 



     return 0; 
} 

Der obige Code gibt mir Warnungen vor einer nicht korrekten Umwandlung von Doppel zu schweben, einen möglichen Datenverlust, so als Folge es mir einige gibt undefinierte Werte wie -1.IND. Kann mir jemand erklären, warum das so ist?

Antwort

2

abs ist nur für int- und long-Typen definiert. Für Gleitkommazahlen verwenden Sie fabs.

1

Ändern Sie powf zu pow, obwohl ich nicht sicher bin, dass das Ihr Problem lösen wird.

+0

Ich habe Bug gefunden, anstatt -, ich hatte + so war es Problem, danke –