WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Approximation von Pi rekursiv

 

latingirl
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2012, 13:42     Titel: Approximation von Pi rekursiv
  Antworten mit Zitat      
Hallo zusammen!

Ich sitze vor folgender Aufgabe:
Approximieren Sie die Zahl Pi (über Umfang von n-Eck im Einheitskreis), indem Sie ein entsprechendes Programm mit Matlab verfassen, welches die Rekursionsformel
s_2n = s_n/sqrt{2+sqrt{4-s_n ^2}} verwendet.

Puuh, ok, also ich hab mir mal mehrere Dinge überlegt:
a) Startwert könnte z.B. s_6 = 1 sein.
b) Der Umfang ns_n geht ja für immer größer werdende n gegen 2Pi.
D.h. Pi = 0.5*n*s_n.
c) Ich denke, dass es sinnvoll wäre eine Funktion zu verfassen in matlab, etwa function [pi] = approximation(n).
Und da tut sich ein großes Problem auf:
Die Rekursionsformel ist ja immer für s_2n definiert. Man könnte jetzt natürlich 2n durch n und n durch 0.5*n ersetzen, aber das scheint mir zu umständlich und dann müsste n ja stets gerade sein.
d) Rekursiv mit matlab zu rechnen, bedeutet ja, dass ich dann iwann mal etwas aufrufe wie approximation(n-1). Aber mit approximation soll ja schon pi approximiert werden und nicht erst die Seitenlängen ausgerechnet werden.

Habt ihr einen Tipp zu a) bis d)?
Würde mir sicher eine große Hilfe sein, ich grübel auch noch weiter und weiter und weiter.

Danke soweit!
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.10.2012, 22:19     Titel:
  Antworten mit Zitat      
Hallo latingirl,
die Rekursionsformel ist besonders einfach, da sie gar nicht von n abhängt.
Damit ist es auch egal ob n=1,2,3,4,5,... läuft oder n=6,12,24,48,...
Entscheidend ist, dass die Rekursion eine gewisse Anzahl mal aufgerufen wird.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
latingirl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 07:24     Titel:
  Antworten mit Zitat      
Hallo Sirius!

Da freue ich mich aber sehr, dass sich jemand gefunden hat, der mir antwortet Smile
Ich verstehe leider nicht ganz, warum die Rekursion nicht von n abhängt; wahrscheinlich meinst du, dass nur das Endergebnis zur Näherung für Pi wichtig ist, oder?
Habe echt noch massiv Probleme mit dem Verfassen eines entsprechenden Programms in Matlab.
Wie gebe ich es ein, dass Matlab ne Rekursion mit 2n und n akzeptiert.
Meine Funktion approximation und dann
approximation(2n) = ... approximation(n) ...
scheint nicht der richtige Weg zu sein Sad

Brauche noch heute nen Tipp, ist echt dringend!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 11:55     Titel:
  Antworten mit Zitat      
Hallo,

im Aufgabentext steht nirgends, wann die Approximation gut genug ist.
Also nehmen wir mal an, Du willst 5 Schritte gehen:
Code:
m   n  s_n
0   6  1
1  12 ...
2  24 ...
3  48 ...
4  92 ...

Wie n aus m zu berechnen ist, ist einfach.
Wenn Du s_n rekursiv berechnen willst, würde ich als Parameter die
Anzahl an noch zu gehenden Schritten übergeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
latingirl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 12:18     Titel:
  Antworten mit Zitat      
Nochmals Hallo!

Also ich denke, dass es ein wenig zu kompliziert ist, die noch verbleibenden Schritte an die Funktion zu übergeben.
Ich denke es wäre besser, die Anzahl n der "Schritte" zu übergeben, die insgesamt gegangen werden sollen, so dass ich Pi dann durch das n-Eck mit der Seitenlänge s_n approximiere.

Leider helfen mir deine Ausführungen nicht sehr viel weiter...
Ich sehe auch nicht, wie ich n aus m berechnen soll und wozu.

Aber trotzdem Danke für deine Bemühung!

Wie gesagt, ich hab vor allem Schwierigkeiten damit, s_2n in die Rekursion einzubauen.

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 13:17     Titel:
  Antworten mit Zitat      
Hallo,

wenn Du n durch n=6*2^m ersetzt, wird aus s_2n -> s_(m+1),
was mehr an eine rekursive Folge erinnert.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
latingirl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 13:43     Titel:
  Antworten mit Zitat      
Ok, das verstehe ich.
Aber wie setze ich das jetzt in matlab um?
Code:

function seite(m)
seite(0)= 6
seite(m+1)=seite(m)/ sqrt(2+sqrt(4-seite( m )^2))
pi=0.5*6*2^m*seite(m)
 

Ich weiß, dass das nicht richtig ist, aber ich weiß leider nicht, wie ich's verbessern könnte Sad
Als Fehlermeldung erscheint beim Aufruf von z.B. seite(5)
??? Undefined function or method 'seite' for input arguments of type 'double'.

Habt ihr nen Tipp?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 14:13     Titel:
  Antworten mit Zitat      
so sieht typischerweise eine rekursive Funktion aus:
Code:
function ergebnis=rekursiv(i)
  if i==0
    ergebnis=1; % der Startwert
  else
    vorheriger_wert=rekursiv(i-1);
    ergebnis=rechne*irgendwas+mit+vorheriger_wert;
  end
Private Nachricht senden Benutzer-Profile anzeigen
 
latingirl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 14:26     Titel:
  Antworten mit Zitat      
Was ist falsch?

Code:

function ergebnis=seite(m)  
if m==0
    ergebnis=1; % der Startwert
  else
    vorheriger_wert=seite(m-1);
    ergebnis=vorheriger_wert/sqrt[2+sqrt[4-vorheriger_wert^2]]
end
 


Pi ergäbe sich ja dann aus 0.5*6*2^m*seite(m), oder?
Das kann ich dann aber nicht mehr in die Funktion-Datei packen, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 15:10     Titel:
  Antworten mit Zitat      
Hallo latingirl,

falsch ist, dass Du zu schnell aufgibst und keine konkreten Fragen stellst.
Die Eckigen Klammern um sqrt sind Dir hoffentlich auch schon aufgefallen...
Die Rekusionsformel liefert nunmal nur die Seitenlänge eines n-Ecks.
Das Umrechnen auf pi erfolgt dann sinnvollerweise in einer zweiten Funktion.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 21.10.2012, 19:23     Titel:
  Antworten mit Zitat      
Hallo,

das lässt sich doch mit einer simplen Iteration bewerkstelligen:

Code:

format long
% Anzahl der Iterationen
n=12;
% Startwert
U=1;
for i=1:n
    U = U/sqrt(2+sqrt(4-U ^2));
end
disp('Näherung für Pi:')
U*6*2^(n-1)
 


Man beachte den Zusammenhang U_n=2*s_n -> 2*Pi für n -> unendlich.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
latingirl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 11.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2012, 08:44     Titel:
  Antworten mit Zitat      
Danke an alle!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.