formel umsetzen

mariusbopp

Bekanntes Mitglied
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?
 
S

SlaterB

Gast
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

Bekanntes Mitglied
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^^:eek:
 

mariusbopp

Bekanntes Mitglied
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 :(
 
S

SlaterB

Gast
@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
 
Zuletzt bearbeitet von einem Moderator:

mariusbopp

Bekanntes Mitglied
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
 
S

SlaterB

Gast
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

Bekanntes Mitglied
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

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

Java:
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

Bekanntes Mitglied
okay meine freundin hat mir ihren ansatz geschickt!
:rtfm:
Java:
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
 
S

SlaterB

Gast
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

Top Contributor
6c3b026354a42c4ac54ca15887d3d6f2.gif

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

mariusbopp

Bekanntes Mitglied
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 -.-
 
S

SlaterB

Gast
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?
 

XHelp

Top Contributor
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

Bekanntes Mitglied
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^^
 

mariusbopp

Bekanntes Mitglied
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:)
Java:
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?
 
S

SlaterB

Gast
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.
Java:
    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

Bekanntes Mitglied
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
 
S

SlaterB

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

Neue Themen


Oben