Probleme bei der Berechnung von extrema, nullstellen, usw bei fkt 3.grades



  • Moin Leute,
    Ich hänge jetzt schon ziemlich lange am selben Problem..
    und zwar möchte ich ein Programm schreiben, welches die Extrema, die Nullstellen und den y-Achsenabschnitt errechnet.
    Nun steckt aber irgendwo ein Fehler drinn und ich finde ihn nicht 😞
    vielleicht kann mir ja jemand weiterhelfen 🙂

    Code-Auszug:

    float a,b,c,d,e,x,y[1001];
    int i;
    			float berechnung(float a,float b, float c,float d, float x)
    				{
    					float y;
    					y=a*x*x*x+b*x*x+c*x+d;
    					return y;
    				}
    			int main()			
    				{
    					cout << "Polynome 3.Grades" << endl;		
    					cout << "================" << endl;
    					cout << "Berechnet werden:" << endl;
    					cout << "----------------: Nullstellen" << endl;
    					cout << "----------------: Extrema" << endl;
    					cout << "Ausgangsformel: y=ax³+bx²+cx+d" << endl;
    					cout << "===========================" << endl;
    					cout << "Bitte gebe Werte für a-d ein" << endl;
    					cout << "a = " ;
    					cin >> a;
    					cout << "b = " ;
    					cin >> b;
    					cout << "c = " ;
    					cin >> c;	
    					cout << "d = " ;
    					cin >> d;
    
    					x=-50;		
    						for (i=1;i<1000;i++)
    							{
    								y[i-1]=berechnung(a,b,c,d,x-0.1);
    								y[i]=berechnung(a,b,c,d,x);
    								y[i+1]=berechnung(a,b,c,d,x+0.1);
    								//Maximum
    								if((y[i]>y[i-1])&&(y[i+1]<y[i]))
    									{
    										cout << "Maximum: ("<< x << "/" << y[i] << ")"<<endl;
    									}
    								//Minimum
    								if((y[i]<y[i-1])&&(y[i+1]>y[i]))
    									{
    										cout << "Minimum: ("<< x<< "/" << y[i] << ")"<<endl;
    									}
    								//Nullstelle
    								if ((y[i-1]<0 && y[i]>0) || (y[i-1]>0 && y[i]<0))
    									{
    										cout << "Nullstelle liegt bei x = " << (y[i-1]+y[i+1])/2;
    									}
    								//y-Achsenabschnitt
    								if (x==0)
    									{
    										cout << "Y-Achsenabschnitt liegt bei y = "<<y[i] <<endl;
    									}
    								x+=0.1;
    
    							}
    

    mfg black Sheep



  • wo liegt den dein problem ?



  • Warum berechnest du die Werte nicht numerisch exakt anstelle deiner Näherungsmessungen (ja, die Lösungsformel für Polynome dritten Grades ist ein wenig komplex, aber sie existiert - und bei den Ableitungen der Funktion wird es sogar noch einfacher).





  • Stelfer schrieb:

    wo liegt den dein problem ?

    Also wenn ich das Programm ausführen lasse,bekomme ich manchmal nur das Minimum , manchmal nur eine Nullstelle und manchmal garnichts ausgespuckt...:-(



  • Wie ich schon sagte, lös die Aufgabe lieber exakt (bei Polynomen dritten Grades ist das noch möglich).

    PS: Und dir ist klar, daß ein Polynom dritten Grades maximal 3 Nullstellen und zwei Extrema haben kann?


Anmelden zum Antworten