matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

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
StartseiteMatheForenMatlabIterationsverfahren
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
Forum "Matlab" - Iterationsverfahren
Iterationsverfahren < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 10:08 Fr 16.05.2014
Autor: David90

Aufgabe
Gegeben ist das Iterationsverfahren: [mm] x_{k+1}=\bruch{1}{2}*(x_k+\bruch{a}{x_k})-\bruch{(x_{k}^2-a)}{8*x_{k}^3}. [/mm]
a) Wie viele Iterationen braucht man um mit diesem Verfahren die Zahl [mm] \wurzel{5} [/mm] auf 15 Dezimalstellen genau zu bestimmen, wenn man mit dem Wert [mm] x_0=5 [/mm] startet?
b) Wie viele Iterationen benötgt man für dieselbe Aufgabe, wenn man das Newton-Verfahren benutzt? Zur Erinnerung: Das Newton-Verfahren ist: [mm] x_{k+1}=\bruch{1}{2}*(x_k+\bruch{a}{x_k}). [/mm]

Hallo Leute.

ich wüsste gerne wie man die Aufgabe mit Matlab löst.
Also man muss das doch mit einer Schleife machen:

for k=1:iterationsschritte
...
end

Aber iterationsschritte ist doch genau die Variable die wir suchen. Ist es vielleicht besser mit einer while-Schleife zu arbeiten, in der man vorher immer überprüft, ob x_(k+1) [mm] =\wurzel{5} [/mm] ist?

Danke schon mal im Voraus.
Viele Grüße

        
Bezug
Iterationsverfahren: Info
Status: (Antwort) fertig Status 
Datum: 10:37 Fr 16.05.2014
Autor: Haloelite

hallo, so, wie du das dachtest mit der "while-schleife", funktioniert das nicht.
Wenn du angibst x_(k+x) = [mm] \wurzel{5} [/mm] läuft die Schleife ewig durch.

Wenn überhaupt müsstest du dir noch einen Rekursionsanker einbauen, der nach 15 Durchläufen einsetzt.

Gruß

Bezug
                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:05 Fr 16.05.2014
Autor: David90

Ok also eher mit einer for-Schleife. Ich habe folgendes programmiert.

   max=100;
    x=5;
    for k=1:max
        [mm] x_k=0.5*(x+a/x)-((x^2-a)^2)/(8*x^3); [/mm]
        if [mm] x_k==sqrt(5) [/mm]
            disp(['Für die Berechnung der Wurzel aus 5 benötigt man' num2str(k) 'Iterationsschritte']);
            break
        end
        [mm] x_k=x; [/mm]
    end

Kann man das so machen? Das Problem ist, dass ich nicht weiß, was ich für a deklarieren soll. Es ist nur vorgegeben a>0. Außerdem fehlt mir noch bei der if-Anweisung, dass sqrt(5) auf 15 Dezimalstellen bestimmt werden soll.

Bezug
                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 20:02 Fr 16.05.2014
Autor: weduwe

[mm]f(x)= x^2-a\to f(x)=x^2-5[/mm]
wie groß ist also a?

dein "programm" würde ich noch einmal überdenken, insbesondere auch den index "k"

ich hätt´s auch mit einer while - schleife gemacht

möglicherweise kommt so etwas heraus:

[Dateianhang nicht öffentlich]

Dateianhänge:
Anhang Nr. 1 (Typ: JPG) [nicht öffentlich]
Bezug
                                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 23:08 Fr 16.05.2014
Autor: David90

MMhhh du hast Recht, wenn ich a=5 deklariere und die Schleife durchlaufen lasse, ändert sich xk nixht. Was stimmt denn mit dem Indey k nicht?

Viele Grüße


Bezug
                                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 23:22 Fr 16.05.2014
Autor: weduwe

es ist in diesem zusammenhang ganz egal, welchen wert du a zuweist.
du änderst ja den wert von x NIE, also auch den von [mm] x_k [/mm] nicht.

richtig wäre x = ...... (mit a = 5)

Bezug
                                                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 01:04 Sa 17.05.2014
Autor: David90

Ah na klar, das sieht schon gut aus. Jetzt fehlt nur noch bei der if-Bedingung, dass die Wurzel auf 15 Dezimalstellen genau berechnet werden soll. Hat jemand da den Befehl zur Hand?

Viele Grüße

Bezug
                                                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 02:33 Sa 17.05.2014
Autor: weduwe

mach halt irgendsoetwas:

[mm] w=\sqrt{15} [/mm] oder du definierst halt ein x_alt
[mm] \epsilon=10^{-15} [/mm]
if  [mm] |w-x|<\epsilon [/mm] .... if [mm] ||x|-|x_{alt}||<\epsilon [/mm] ...

Bezug
                                                                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:13 So 18.05.2014
Autor: David90

Ok also der fertige Code sieht jetzt so aus:

close all
clear all
clc

    max=100;
    x=5;
    a=5;
    
%vorgegebenes Verfahren
    for k=1:max
        [mm] x=0.5*(x+a/x)-((x^2-a)^2)/(8*x^3); [/mm]
        if x==abs(10^(-15)-sqrt(5))
            disp(['Für die Berechnung der Wurzel aus 5 benötigt man mit dem vorgegebenen Verfahren' num2str(k) ' Iterationsschritte']);
            break
        end
    end

Allerdings scheint der disp-Befehl nicht zu funktionieren, da nicht angezeigt wird, wie viele Iterationen benötigt wurde.

Und ich habe eine weitere Frage: Wenn man die Iterationen jetzt mit dem Newton-Verfahren berechnen möchte, muss man sich doch vorher eine Funktion f deklarieren, weil das Newton-Verfahren ja so definiert ist:
[mm] x_{k+1}=x_k-\bruch{f(x_k)}{f'(x_k)} [/mm]

Wenn ich jetzt sage [mm] f=x^2 [/mm] -a, wie definiere ich denn x? Das ist ja eigentlich das was ich rausbekommen möchte. Kommt die Funktion in die Schleife?

Viele Grüße

Bezug
                                                                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 14:24 So 18.05.2014
Autor: weduwe

zu dem "disp"- befehl kann ich nix sagen.
ansonsten statt vieler worte den VBA-Code
(Newton hast du doch eh oben definiert)


Dateianhänge:
Anhang Nr. 1 (Typ: JPG) [nicht öffentlich]
Bezug
                                                                                
Bezug
Iterationsverfahren: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 14:30 So 18.05.2014
Autor: David90

Sorry ich versteh deine Antwort nicht xD

Viele Grüße

Bezug
                                                                                        
Bezug
Iterationsverfahren: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:53 So 18.05.2014
Autor: weduwe

WAS verstehst du denn da nicht?
im anhang ist eine mögliche Umsetzung in Excel-VBA


Bezug
                                                                                                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 15:19 So 18.05.2014
Autor: David90

Achso hatte nicht gesehen, dass du was angehängt hast. Aber aus dem Code werd ich nicht schlau. Ich hätte das jetzt so gemacht, aber da kommt Matalb nich auf [mm] \wurzel{5}. [/mm]

%Newton-Verfahren
    for k=1:max
        [mm] x=x+(x^2-a)/2*x [/mm]
        if x==abs(10^(-15)-sqrt(5))
            disp(['Für die Berechnung der Wurzel aus 5 benötigt man mit dem Newton-Verfahren' num2str(k) ' Iterationsschritte']);
            break
        end
    end

Viele Grüße

Bezug
                                                                                                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 09:06 Mo 19.05.2014
Autor: weduwe

wie sollte da auch das richtige herauskommen, das ist doch Unsinn!

setz statt des PLUS ein MINUS, dann stimmt´s und stimmt vor allem mit der Formel im 1. Beitrag überein (und mit meinem Code) , von der du dir vielleicht klar machen solltest, warum sie stimmt, also
[mm]x=x-\frac{x^2-a}{2x}=\frac{1}{2}(x+\frac{a}{x})[/mm]

Bezug
                                                                                                                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:50 Mo 19.05.2014
Autor: David90

Oh na klar, war einfach ein Tippfehler. Ok die Verfahren stimmen jetzt.
Weißt du was mit dem disp-Befehl nicht stimmen könnte? Das macht man doch mit num2str(k) oder? Dachte vielleicht dass die if-Anweisung einfach nicht erreicht wird, aber an kommt auf jeden Fall auf [mm] \wurzel{5} [/mm] sonst würde das Verfahren ja ewig weiterlaufen.

Viele Grüße


Bezug
                                                                                                                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 14:18 Mo 19.05.2014
Autor: sijuherm

Der disp-Befehl passt schon. Wenn er dir nicht angezeigt wird, dann wird die Bedingung nicht erfüllt. Du berechnest ja trotzdem deine Wurzel mit Hilfe des Newton-Verfahrens, wahrscheinlich läuft das komplett bis zum letzten Iterationsschritt durch.

Der Fehler ist, dass du auf Gleichheit prüfst. Du willst aber wissen, wann die Abweichung KLEINER als [mm]10^{-15}[/mm] ist. Wenn du das anpasst, hast du die gewünschte Lösung.

Allerdings sieht das Newton-Verfahren bei deiner letzten Antwort anders aus, als im Urspungspost. Da solltest du nochmal ein auge drauf werfen.

Bezug
                                                                                                                                
Bezug
Iterationsverfahren: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:23 Mo 19.05.2014
Autor: weduwe

>
> Allerdings sieht das Newton-Verfahren bei deiner letzten
> Antwort anders aus, als im Urspungspost. Da solltest du
> nochmal ein auge drauf werfen.

ausmultiplizieren öffnet unter Berücksichtigung meiner letzten Mitteilung die augen :-)



Bezug
                                                                                                                                        
Bezug
Iterationsverfahren: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:38 Mo 19.05.2014
Autor: sijuherm

d'accord!

Bezug
                                                                                                                                
Bezug
Iterationsverfahren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:27 Mo 19.05.2014
Autor: David90

Mmmhhh wenn ich jetzt sage x soll kleiner sein, gibt er mir auch nichts aus. Komisch ist das. Er läuft einfach alle 100 Schritte durch und x ist nie kleiner als [mm] \wurzel{5}. [/mm] Hier ist nochmal der Code beider Verfahren:

close all
clear all
clc

    max=100000;
    x=5;
    a=5;
    
%vorgegebenes Verfahren
    for k=1:max
        [mm] x=0.5*(x+a/x)-((x^2-a)^2)/(8*x^3); [/mm]
        if x<abs(10^(-15)-sqrt(5))
            disp(['Für die Berechnung der Wurzel aus 5 benötigt man mit dem vorgegebenen Verfahren' num2str(k) ' Iterationsschritte']);
            break
        end
    end
    
    x=5;
    a=5;
        
%Newton-Verfahren
    for k=1:max
        x=0.5*(x+a/x);
        if x<abs(10^(-15)-sqrt(5))
            disp(['Für die Berechnung der Wurzel aus 5 benötigt man mit dem Newton-Verfahren' num2str(k) ' Iterationsschritte']);
            break
        end
    end

Viele Grüße

Bezug
                                                                                                                                        
Bezug
Iterationsverfahren: Antwort
Status: (Antwort) fertig Status 
Datum: 09:42 Di 20.05.2014
Autor: sijuherm

Manchmal sieht man den Wald vor lauter Bäumen nicht. Aber wenn man es sieht, dann ist es glasklar, warum es nicht funktioniert.Deine Überprüfung/Abbruchbedingung ist falsch. Und sie verändert sich auch nicht über die einzelnen Loops. richtig wäre hier:

1: eps = abs(x-sqrt(a));
2: if eps<1e-15  % 1e-15 ist das gleiche wie 10^(-15)
3:     disp(['Für die Berechnung der Wurzel aus 5 benötigt man mit dem Newton-Verfahren ' num2str(k) ' Iterationsschritte']); 
4:     break
5: end 


Damit sollte jetzt auch der gewünschte Text angezeigt werden. Gibt noch weitere Kleinigkeiten, die das Programm verbessern könnten, z.B. die Berechnung anderer Wurzeln zu ermöglichen, ohne an 6(!) Stellen die Zahl ändern zu müssen. Aber zumindest für die 5 tuts jetzt was es soll.

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


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