Hallo,
wir sollen für ein Projekt drei Methoden zur Berechnung der Fläche unter der Kurve erstellen(Integral), an die dann die jeweilige Funktion als Parameter übergeben werden soll. Nun ist die Frage, ob ich nicht irgendwie drum herum komm, die Funktion als String zu übergeben und diesen dann umständlich auswerten muss. Bietet Java da irgedwas, was das rechnen von Funktionen erleichtert o.ä?
MfG Robert
du müsstest einen string mit der funktion erhalten und den selber parsen (macht meist nicht viel spass). viel einfacher wäre es doch, wenn du einfach die nötigen parameter bekommst und damit rechnerst. für eine kubische funktion zB.
public double myCurve(float a, float b, float c, float d, float intervalStart, float intervalEnde){
//dein integrator
}
ich muss das ganze für folgende funktionen machen:
1. -0,01x²+0,2x+5
2. (sin(x)*cos(x)) / x
kann man irgendwo genaueres über integrate finden?
weiß nämlich nicht viel mit den parametern der funktion anzufangen (also für was sie jetz genau stehen)
mfg robert
Wenn man eine Websuche nach "integral" macht, findet man bestimmt das eine oder andere. An sich ist da keine Zaberei dabei: f ist die Funtion, x0 der linke und x1 der rechte Rand.
Code:
float result = 0;
for (x = x0; x<x1; x+=irgendeineKleineSchrittweite)
{
float y = function.f(x);
float area = irgendeineKleineSchrittweite * y;
result += area;
}
Jooo.. und das war's dann eigentlich schon. Ggf. solltest du die Frage präzisieren.
ok...ich präzisiere mal
und zwar haben wir drei verfahren vorgegeben. einmal die rechteckformel, die trapezformel und die simpsonsche regel.
diese liegen in mathematischer form vor und sollen nun in jeweils eine methode gepackt werden.
an diese methoden sollen dann die 2 genannten gleichungen übergeben werden.
an sich denke ich das mir das letzte von dir weiterhilft, nur eine frage habe ich noch dazu, statt function(x) könnte ich jetzt einfach auch function(x²+2) nehmen?
Marco13's Vorschlag war ein Interface zu verwenden. Diese defininiert eine Methode f(float x) die Implementierung musst Du dann machen für die Funktion 2x sähe das in etwa so aus:
liefert bei mir immer nur 0,00 woran könnte das liegen?
habs mal mit "1" aufgerufen, müsste eigentlich 0.01744 heruaskommen.
Gibts da unterschiede zwecks Bogenmaß etc, wenn ja wie bügel ich diese aus?
Würde gerne mit DEG rechnen (soheißts zumindest auf meinem taschenrechner *fg)
0 sollte da nicht rauskommen, Poste ggf. mal compilierbaren(!) Code. Ansonsten hilft Math.toRadians dir vielleicht noch. Hoffentlich sieht das Andrey ncht
publicstaticdoublef(double x,int i){double result =0;if(i ==1){
result =(double)(-0.01*x*x+0.2*x+5);}elseif(1==2){
result =(double)((Math.sin(x)*Math.cos(x))/x);}System.out.println(result);return result;}publicstaticvoidmain(String[] args){f(1,2);//rechteckformel(0,100,20,2);}
publicstaticdoublef(double x,int i){double result =0;if(i ==1){
result =(double)(-0.01*x*x+0.2*x+5);}elseif(1==2){
result =(double)((Math.sin(x)*Math.cos(x))/x);}System.out.println(result);return result;}publicstaticvoidmain(String[] args){f(1,2);//rechteckformel(0,100,20,2);}
ui...sollte natürlich ein "i" sein statt der "1". man sollte sowas halt nich so spät machen xD
trotzdem gibt Math.sin die werte im bogenmaß zurück, so dass das ergebniss dennoch nicht mit dem auf dem taschenrechner übereinstimmt (DEG)
wie kann ich das ändern?
Du berechnest da nicht sin(1°), sondern sin(1).
Math.sin() erwartet ein Argument im Bogenmaß, müsstest du also umrechnen, dann kommst du auch zu dem Taschenrechnerergebnis.
Das Ergebnis umrechnen ist natürlich Quatsch, überleg nochmal, von wo nach wo der sin abbildet