# formel umsetzen



## mariusbopp (25. Okt 2010)

hallo 
ich habe ein problem bei der umsetzung einer formel in java....
die formel is vollgende:
\int_{}^{}f(x)dx\approx h*(\frac{1}{2}f(a)+\frac{1}{2}f(b)+\sum f(a+i.h)

kann da jemand helfen?


----------



## SlaterB (25. Okt 2010)

fange doch einfache an, schreibe zunächst ein Programm welches das Quadrat einer Zahl ausrechnet
und dann Schritt für Schritt komplizierter

deine Schreibweise ist auch etwas gewöhnungsbedürftig, hast du noch eine andere Darstellung?


----------



## mariusbopp (25. Okt 2010)

fühge das doch mal in den formel crator ein, da wird dir die formel angezeigt(also hier im forum wenn du runter scrollst)... aber ich kann leider damit nix anfangen hab keine ahnung von mathe^^


----------



## briceAlvin (25. Okt 2010)

kannst du bitte deine Formel anders aufschreiben??? Kann da nicht blicken...


----------



## XHelp (25. Okt 2010)

So auf anhieb sieht die Formel nicht völlständig aus.


----------



## SlaterB (25. Okt 2010)

gibts hier irgendwo im Forum einen Formel-Formatierer, von dem ich noch nichts weiß?


----------



## mariusbopp (25. Okt 2010)

SlaterB hat gesagt.:


> gibts hier irgendwo im Forum einen Formel-Formatierer, von dem ich noch nichts weiß?



ja scroll ma n stück runter!! Latex Maths & Physics Editor ...  so seist das ding :toll:


----------



## SlaterB (25. Okt 2010)

gefunden 

f(a+i.h)
verstehe ich auch nicht, was ist das für eine Formel?


----------



## Marco13 (25. Okt 2010)

Sieht auch nach http://www.java-forum.org/allgemeine-java-themen/107449-integral-berechnen.html aus


----------



## andiv (25. Okt 2010)

Bei der Formel handelt es sich um die Trapezregel ? Wikipedia


----------



## mariusbopp (25. Okt 2010)

andiv hat gesagt.:


> Bei der Formel handelt es sich um die Trapezregel ? Wikipedia



ja das ist richtig

meine freundin muss das für die fh auch machen

ich bin schon seit 1ner woche dabei aber irgendwie komm ich auf keine lösung bzw es kommt totaler mist raus

mir fehlt erstens das mathematische verständniss und 2 weiß ich nicht wie ich es mit java lösen kann hab auch schon etliche dinge gelesen aber weiter bin ich nicht


----------



## SlaterB (25. Okt 2010)

@mariusbopp
ich habe jetzt das Thema dir zugeordnet, obwohl deine Postings bisher nach separaten Kommentar klangen,
und jetzt nach diesem Posting und der Änderung noch mal lesen läßt mich das Wort 'auch' erneut zweifeln,

falls falsch zugeordnet dann sorry, aber du hast eh schon mehr Posting in diesem Thema als der anonyme zu Beginn 
und mindestens auch Interesse an der Formel?

edit:
und inhaltlich: sind die Erklärungen im Wiki nicht verständlich?
das Integral wird in verschiedene Abschnitte unterteilt, diese einzelnen Dreiecke oder Trapeze oder was auch immer berechnet und zusammengehält, h ist die Intervall-Breite usw.,
auf Papier aufmalen


----------



## mariusbopp (25. Okt 2010)

ja da meine freundin das auch machen muss interessiere ich mich dafür jetzt natürlich auch!
das problem is einfach das ganze in java zu schreiben also die formel -.-

das grundprinzip wie es gerechnet wird is klar:rtfm:
problem is die umsetzung


----------



## SlaterB (25. Okt 2010)

arbeiten arbeiten arbeiten,
das einfachste ist doch wirklich, nur genau ein Trapez anzunehmen, 
bei Wikipedia das Q(f) in der dritten Formelzeile, (f(a) + f(b)) * Breite /2

das ist nun wirklich als Programm direkt hinzuprogrammieren, falls man denn f() an sich in Java reinbekommt,
soviel Vorarbeit bitte selber leisten, dann kann man hier über Verbesserungen nachdenken

oder noch ein Vorschritt: die Formel f() als Methode einbauen und einfach nur f(2) ausgeben

wenn es dazu konkrete Fragen gibt nur zu, dass hat dann schon erstmal gar nix mit der Trapezformel zu tun, 
und das ist schon ein Fortschritt


----------



## mariusbopp (25. Okt 2010)

ja wir haben schon 10000 ansätze versucht bin aber grade auf der arbeit und beschäftige mich mit xml^^

werde heute abend oder spätestens morgen früh mal das posten was wir bis jetzt haben habs nur leider grade nicht hier liegen sonst würd ichs posten...

wir haben die formel schon stückweit zerlegt aber hmmm... irgendwie wird es schon klappen es soll als ergebnis übrigens die zahl pi rauskommen :bahnhof:


----------



## andiv (25. Okt 2010)

Hier mal ein Ansatz, die Umsetzung der Formel hab ich absichtlich noch rausgelassen:


```
public class Trapezregel {

	public interface Function {
		// Berechnet f(x)
		public double eval(double x);
	}

	public static class F1 implements Function {
		@Override
		public double eval(double x) {
// z.B. f1(x) = x^2, hier musst du deine Funktion einbauen
			return x * x;
		}
	}
	
	// Anzahl gleichgroßer Teilintervalle
	public static final int N = 100;
	
	public static void main(String[] args) {
		Function f1 = new F1();
		System.out.println(integral(f1, 0, 1));
	}
	
	// Berechnet das Integral von f auf dem Intervall [a, b] mit der 
	// zusammengesetzten Sehnentrapezformel
	public static double integral(Function f, double a, double b) {
// Hier musst du die Formel für die Trapezregel einbauen
// Dazu berechnest du zuerst das h und dann mit einer Schleife die Summe, der Rest sollte dann auch klappen
		return 0;
	}
}
```


----------



## mariusbopp (26. Okt 2010)

okay meine freundin hat mir ihren ansatz geschickt!
:rtfm:

```
package integral;

import java.util.Random;

public class blabla {
	
	public static double f(double x){
		double y=((x-1)*(x-1))-1;
		return y;
	}

	public static void main(String[] args) {
		
		int n=10000000; 
		double a= 3; 
		double b=5;
		double h=(b-a)/n; 
		double sum = 0;
		double x; 
		double y; 
		
	
		for(int i=1; i<n;i++)
		{
			sum+=f(a+i*h);
		}
		
		System.out.println("sum " + sum); 
		double st=h*(0.5*f(a)+0.5*f(b)+sum);
		System.out.println("blub: " +st);
		
		//Monte Carlo
		
		int treffer=0; 
		
		for(int i=1; i<=n; i++ )
		{
			  x = Math.random();
		      y = Math.random();
		      if (y<f(x))
		    	  treffer++; 
		      
		}
		System.out.println(treffer);
	}
		}
```

ich hasse mathe :toll:
komm damit einfach nicht klar

guckt ma drüber
thx schonmal


----------



## mariusbopp (26. Okt 2010)

andiv hat gesagt.:


> Hier mal ein Ansatz, die Umsetzung der Formel hab ich absichtlich noch rausgelassen:



dank dir schonmal soweit aber das hauptsächliche problem is wirklich die umsetzung der formel;(


----------



## Andi_CH (26. Okt 2010)

Sorry - vertippt ...


----------



## SlaterB (26. Okt 2010)

die Formel ist duch Wikipedia gegeben, ansonsten eh nicht zu verstehen,
das Programm von 10:33 scheint doch zielstrebig das ganze umzusetzen, besteht dazu eine Frage?
oder gar nicht genauer geprüft ob richtig oder falsch da selber nicht zu beurteilen?


----------



## XHelp (26. Okt 2010)

Es wurde ja bereits geklärt, dass sich weiter runter ein Latex-Editor befindet


----------



## mariusbopp (26. Okt 2010)

SlaterB hat gesagt.:


> die Formel ist duch Wikipedia gegeben, ansonsten eh nicht zu verstehen,
> das Programm von 10:33 scheint doch zielstrebig das ganze umzusetzen, besteht dazu eine Frage?
> oder gar nicht genauer geprüft ob richtig oder falsch da selber nicht zu beurteilen?



es muss 3,14.... als ergebniss raus kommen und das tut es nicht!!!!
ich habe keine ahnung mehr wie und was ich da rechnen muss -.- ;( 
aber einfach aufgeben is nicht da das ganze abgegeben werden muss -.-


----------



## SlaterB (26. Okt 2010)

hast du die Funktion mal als Bild aufgemalt? ganz elementarer Arbeitsschritt,
sieht ungefähr wie x^2 aus, steigt also mächtig an mit höheren x,

f(3) = 3, f(5) = 15, das Integral von 3 bis 5 ist die Fläche unter der Kurve und wie man an einer Kästchen-Darstellung erkennen oder überschlagsmäßig berechnen kann ist das ungefähr 18, 
in die Richtung geht auch das Programm

wieso 3,14?


----------



## mariusbopp (26. Okt 2010)

meine freundin meinte die lösung seie pi ???:L bzw soll das eine lösung gewesen sein die der prof. gezeigt hat...???:L


----------



## XHelp (26. Okt 2010)

Mit Pi-Berechnen bist du glaube ich etwas bei der falschen Formel... Die Trapetzregel ist ja nur dazu da, um die Intergrale ungefähr auszurechnen.


----------



## mariusbopp (26. Okt 2010)

hmm okay dann waren wir doch ganicht so auf dem falschen weg?!:applaus:
verstehen tue ich die formel immernochnicht aber es kommt ja ungefähr das raus naja im mom kommt 16.666666 raus^^


----------



## XHelp (26. Okt 2010)

Was kommt bei 
	
	
	
	





```
f(x)=2*x
```
 raus?
Die Antwort lautet: es kommt auf das x an...


----------



## mariusbopp (26. Okt 2010)

XHelp hat gesagt.:


> Was kommt bei
> 
> 
> 
> ...



das ganze ist für die funktion 
f(x)=(x-1)²-1 im intervall [3,5]

also ist das ergebniss bei dieser aufgabe nicht variabel:rtfm:

schon erschreckend das ich bei sowas nicht weiter komme :lol:


----------



## XHelp (26. Okt 2010)

Das setzt du nun im Intervall von 3..5 ein. Und es kommt 
	

	
	
		
		

		
		
	


	




 raus. Scheinst also gar nicht so verkehrt zu liegen.


----------



## mariusbopp (26. Okt 2010)

dann würde ich gerne mal wissen was das war was der prof gezeigt hat???:L
jetzt muss das ganze noch mit der montecarlo methode berechnet werden...
dh. es werden random punkte erzeugt und geguckt ob diese im trapez liegen...

wir haben dazu etwas gefunden was mittels dieser methode pi berechnet und es funktioniert super
(wenigstens etwas:lol

```
package pi;
import java.io.*;

class Main  {
  public static void main(String[] args)
          throws IOException
  {
    
    int g;
    int v = 0;

    BufferedReader bin = new BufferedReader(
                          new InputStreamReader(System.in));

     System.out.println("Bitte geben sie die Anzahl versuche ein: ");

        String g1 = bin.readLine();
        g=Integer.parseInt(g1); //umwandeln str in int

    double x,y;
    System.out.println("Annäherung der zahl Pi");
    
    for (int i = 1; i <= g; i++)
    {
      x = Math.random();
      y = Math.random();
      if (Math.hypot(x,y) <= 1)
      v = v + 1;
    }//for (int i = 1; i <= g; i++)
    double pi = 4*(double)v / g;
    System.out.println(g+" Versuche" );
    System.out.println("davon "+v+" Treffer im Viertelkreis, Pi etwa"+pi);
  } //public static void main(String[] args)throws IOException
} //class Main
```

edit: das ganze ist doch dann zu realisieren wenn man anstelle des 1/4 kreises [JAVA=30]double pi = 4*(double)v / g;[/code]
die trapez berechnungsformel einsetzt oder ist es damit nicht getan?


----------



## SlaterB (26. Okt 2010)

die Formel (x-1)*(x-1)-1 hat nunmal nichts mit dem Kreis zu tun der da für MonteCarlo verwendet wird, besonders nicht im Intervall 3-5

wenn du als Formal x^2 + y^2 = 1
bzw.

```
public static double f(double x)
    {
        double y = Math.sqrt(1 - x * x);
        return y;
    }
```
einsetzt und Intervall-Grenzen 0-1, dann kommt nach Trapez wie nach MonteCarlo 1/4 pi raus

aber da du von all dem nichts versteht ist das auch wenig sinnvoll weiter zu verfolgen


----------



## mariusbopp (26. Okt 2010)

nee der code oben hat erstmal nix mit der formel zu tuen... das hast du richtig erkannt
und wieso nix verstanden? ichbin die ganze zeit davon ausgegangen das als lösung pi raus kommt bei der trapez methode und deswegen dachte ich die lösung sei falsch^^

oder was meintest du mit 





> aber da du von all dem nichts versteht ist das auch wenig sinnvoll weiter zu verfolgen


----------



## SlaterB (26. Okt 2010)

weitermachen


----------



## mariusbopp (26. Okt 2010)

ich bin grade verwirrt

ja klar mache ich weiter  

aber das mit dem trapetz kann ich soweit dann lassen seh ich das richtig?


----------



## SlaterB (26. Okt 2010)

was genau mit dem Trapez willst du lassen? die 18er-Version, meine neue Formel, noch was anderes?


----------

