www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Mathematica" - Funktion mit While-Schleife
Funktion mit While-Schleife < Mathematica < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Mathematica"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Funktion mit While-Schleife: Tipp
Status: (Frage) beantwortet Status 
Datum: 12:47 Fr 27.02.2009
Autor: PaRu

Ich habe eine Funktion, die eine Summe beinhaltet. Leider kenne ich das Ende der Summenlaufvariable nicht, da es von dem Funktionswert abhängt, der an die Abbruchbedingung geknüpft ist. Das ganze soll dann so aussehen:
[mm] f(x)=\sum_{y=1} y + x [/mm] solange [mm]10 > \sum_{y=1} y + x[/mm]

Anbei auch mein bisheriger Quellcode, der aber nicht funktioniert.

Dateianhänge:
Anhang Nr. 1 (Typ: nb) [nicht öffentlich]
        
Bezug
Funktion mit While-Schleife: Antwort
Status: (Antwort) fertig Status 
Datum: 18:13 Fr 27.02.2009
Autor: abakus


> Ich habe eine Funktion, die eine Summe beinhaltet. Leider
> kenne ich das Ende der Summenlaufvariable nicht, da es von
> dem Funktionswert abhängt, der an die Abbruchbedingung
> geknüpft ist. Das ganze soll dann so aussehen:
>  [mm]f(x)=\sum_{y=1} y + x[/mm] solange [mm]10 > \sum_{y=1} y + x[/mm]
>  
> Anbei auch mein bisheriger Quellcode, der aber nicht
> funktioniert.

Hättest du den Anhang als Textdatei genommen, könnten es viele lesen (ich kann es nicht).

Vom Prinzip (kenne Mathematica nicht) müsste es so ablaufen:

...
y=1
S=0
Do
  S=S+x+y
  y=y+1
WHILE S+x+y<10

Gruß Abakus


Bezug
        
Bezug
Funktion mit While-Schleife: Antwort
Status: (Antwort) fertig Status 
Datum: 18:28 Fr 27.02.2009
Autor: halirutan

Moin,

ich hoffe, dass du in deinem Profil mit "Naturwiss.-Student im Hauptstudium" gelogen hast. Mir ist naemlich nicht klar, fuer was du bei diesem Problem eine Funktion brauchst. Vielleicht habe ich aber auch einfach deine Frage nicht verstanden.

Wenn x eine reelle Zahl ist, dann sollte man in der Lage sein die Summe

[mm] \summe_{y=1}^{n} [/mm] y+x

auszurechnen. Das ergibt

[mm] \bruch{1}{2}(n+n^2+2nx) [/mm]

Du moechtest jetzt, dass dieser Ausdruck kleiner 10 ist und willst dafuer das n wissen. Also nimmt man die Ungleichung und stellt sie um.

10 > [mm] \bruch{1}{2}(n+n^2+2nx) [/mm]

Nun sind wir aber einmal im Mathematica Forum:

1: eq = 10 > Sum[x + y, {y, 1, n}]; 
2: sol = Reduce[eq && n > 0, n, Reals]


0 < n < [mm] \bruch{1}{2} \wurzel{4 x^2 + 4 x + 81} [/mm] + [mm] \bruch{1}{2} [/mm] (-2 x - 1)

Setzt man jetzt fuer x zb 0.23 ein, dann erhaelt man n<3.801, also 3. Und tatsaechlich ergibt die Summe bis n=3 s=6.69, wohingegen s=10.92 wenn bis n=4 summiert wird.

Cheers
Patrick


Bezug
                
Bezug
Funktion mit While-Schleife: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:15 So 01.03.2009
Autor: PaRu

@ abakus
wie man sowas prinzipiel programiert, weiß ich. in matlab wäre das alles kein problem. die frage zielt speziell auf eigenheiten von mathematica ab. daher auch das notebook-file.

@ halirutan
das mit dem "Naturwiss.-Student im Hauptstudium" ist nicht gelogen. aber evtl. ist das eigentliche problem wesentlich komplexer, bei dem sich die summe nicht so einfach lösen lässt und ich hab nur ein sehr einfaches beispiel gewählt?
das ganze muss unbedingt eine funktion sein, da das ergebnis in abhänigkeit von x für diverse berechnungen herhalten muss. desweiteren ist die abbruchbedingung etwas anders. im quelltext hab ich es richtig gemacht, aber im thread falsch beschrieben: wenn der summand des aktuellen laufwerts größer als 10 ist, sollen keine weiteren summanden auf die summe addiert werden und die summe soll bis zu dem entsprechendem laufindex als funktionswert zurück gegeben werden.

Bezug
                        
Bezug
Funktion mit While-Schleife: Tipp
Status: (Antwort) fertig Status 
Datum: 03:51 Di 03.03.2009
Autor: halirutan

Moin,

ohne Genaueres ueber das dahinterliegende Problem zu wissen ist es schwierig eine gute Loesung vorzuschlagen. Die absolut dumme Variante ist

1: summe[x_, n_] := Sum[k + x, {k, 1, n}]; 
2: f[x_] := summe[x, NestWhile[#1 + 1 & , 1, 
3:        summe[x, #1] < 10 & ]]


das summiert einfach erst bis 1, dann bis 2, dann bis 3 etc. und schaut immer, ob die Summer groesser 10 ist. Falls nicht macht es weiter, falls doch, dann gibt es die *aktuelle* Summe zurueck.

Das ist natuerlich eine sehr schlechte Variante, wenn es sich bei deiner Summe wirklich um etwas Komplexeres handelt.

Cheers
Patrick

Bezug
                                
Bezug
Funktion mit While-Schleife: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:21 Di 03.03.2009
Autor: PaRu

@ halirutan
danke erst einmal. das ist was ich brauchte und die lösung ist auch recht optimal, da in zeile 3 nicht "summe[x, #1] < 10" sondern "x + #1 < 10" stehen muss und somit die summe nur einmal ausgeführt wird.
und um es ganz korrekt zu machen, muss da "NestWhile[ ... ] - 1" stehen.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Mathematica"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]