Berechnung von cos Funktionen mit Newton Verfahren



  • Hi ich habe ein Programm geschrieben das die Nullstellen von cos(x)-x und von cos(x²) mit dem Newton Verfahren berechnet. Das ergebniss von cos(x)-x stimm auch schon nur das zweite Ergebniss ist flach... ableitung ewt??? Also ich finde den fehler nicht, könnt ihr ihn sehen?

    #include <stdio.h>
    #include <math.h>
    double cos1(double);
    double cos2(double);
    double cos_ab1(double);
    double cos_ab2(double);
    /********************* Berechnung *********************************************/
    int nullstelle()
    {
    	double x=1, xn=0, i=0;
    	int i1=0, i2=0;
    
            do{
    			xn = x;
    			x = x - (cos1(x) / cos_ab1(x));
    			i1++;			
    		}while(fabs(xn - x) > 0.00000001);
    
            printf("Nullstelle fuer cos(x)-x liegt bei: x= %.8lf \n",x);
    		printf("Iterationen notwendig:%d \n\n",i1);
    
    		x=1;
    
    		do{
    			xn = x;
    			x = x - (cos2(x) / cos_ab2(x));
    			i2++;
    
    		}while(fabs(xn - x) > 0.00000001);
    
    		printf("Nullstelle fuer cos(x*x) liegt bei: x= %.8lf\n",x);
    		printf("Iterationen notwendig:%d \n\n",i2);
    
    		return 0;
    	}
    /********************** FUNKTIONEN & ABLEITUNGEN ******************************/
    double cos1(double x){ return(cos(x)-x); }
    double cos2(double x){ return(cos(x*x)); }
    double cos_ab1(double x){ return(-sin(x)-1); }
    double cos_ab2(double x){ return(-sin(x*x)*(2*x));}
    /******************************** MAIN ****************************************/
    
    	int main()
    	{
    
    		printf("Hier werden die Nullstellen fuer cos(x)-x und cos(x*x)berechnet: \n\n");
    		printf("Zum beginnen des Programms bitte Enter druecken!\n");
    
    		getchar();
    		nullstelle();
    		printf("\n%f", cos(1.25331414));
    	}
    


  • Hallo,
    die Ableitungsregeln für Sinus:

    sin(x);
    cos(x);
    -sin(x);
    -cos(x);
    sin(x); //Wieder von vorne.

    Soweit ich das jetzt sehe, ist deine 2. Ableitung von cos(x); falsch.
    Richtig wäre: -cos(...)...;



  • So wie ich das sehe sind die Ableitungen korrekt. Sollen ja je Funktion ja nur die 1. Ableitungen sein und bei der 2. Fkt ist die Kettenregel korrekt angewendet.
    Nur wirklich weiterhelfen kann ich dir da auch net.



  • ich habe dein programm mal ausprobiert und für die ergebnisse die proberechnung gemacht. die ergebnisse sind korrekt. warscheinlich hast du bei der proberechnung einen fehler gemacht.


Anmelden zum Antworten