Newton-Raphson-Methode in MATLAB

Ammar Ali 15 Februar 2024
Newton-Raphson-Methode in MATLAB

In diesem Tutorial wird das Finden der Nullstellen einer Funktion mit der Newton-Raphson-Methode in MATLAB erläutert.

Newton-Raphson-Methode in MATLAB

Wir verwenden die Newton-Raphson-Methode, um die Wurzeln einer Funktion zu finden. Das Verfahren verwendet eine Formel, um eine kontinuierliche Funktion mit einer Tangentenlinie anzunähern, um eine Annäherung für die Wurzeln einer gegebenen Funktion zu finden.

Die Formel, die verwendet wird, um die Wurzeln mit der Newton-Raphson-Methode zu finden, ist unten.

Newton-Methode

Die Formel verwendet den vorherigen Wert, die Funktion und ihre Ableitung, um die nächste Wurzel für die gegebene Funktion zu finden. Um die Ableitung einer Funktion zu finden, können wir die Funktion diff() von MATLAB verwenden.

Wir müssen eine Schleife verwenden, um die Wurzel mit der obigen Formel zu erhalten. Wenn wir beispielsweise vier Wurzeln finden müssen, wiederholen wir die Schleife viermal.

Wir speichern die angegebene Funktion in einer Variablen, nehmen ihre Ableitung mit der Funktion diff() und speichern sie in einer Variablen. Wir müssen auch alle Root-Werte in einem Array speichern, um einfach auf den vorherigen Root-Wert zugreifen zu können.

Danach müssen wir eine Schleife verwenden, um die Wurzeln zu finden, und wir werden die Werte mithilfe des Arrays von Wurzeln aktualisieren. Wir können die Funktion subs() verwenden, um die Werte in der Schleife zu aktualisieren und den Root-Wert im Root-Array zu speichern.

Lassen Sie uns beispielsweise eine Funktion definieren und eine Zufallsfunktion verwenden und ihre ersten fünf Wurzeln mithilfe der obigen Formel in MATLAB finden. Siehe Code unten.

clc
clear
fun = @(x) sin(x);
roots = mynewton(fun, 2, 5)

function output = mynewton(fun,a,n)
syms x;
z = fun(x);
derZ = diff(z);
out = zeros(1,n+1);
out(1) = a;

for idx = 1 : n
    numeratorZ = subs(z,x,out(idx));
    denominatorZ = subs(derZ,x,out(idx));
    out(idx+1) = out(idx) - double(numeratorZ)/double(denominatorZ);
end
output = out;
end

Ausgang:

roots =

    2.0000    4.1850    2.4679    3.2662    3.1409    3.1416

Beachten Sie, dass, wenn der obige Code einen Fehler anzeigt, die Funktion mynewton() in einer separaten .m-Datei mit demselben Namen wie der Funktionsname wie mynewton.m speichern und dann eine weitere .m-Datei erstellen und Schreiben Sie die obersten vier Codezeilen zum Aufrufen und die Funktion hinein oder rufen Sie sie aus dem Befehlsfenster von MATLAB auf. Die Testdatei und mynewton.m sollten sich im selben Verzeichnis befinden.

Im obigen Code haben wir die Funktion mynewton() definiert, in der wir die gegebene Funktion übergeben müssen, deren Wurzeln wir finden wollen, die Anfangsschätzung für die Wurzel und die Anzahl der Wurzeln, die wir finden wollen.

Wir haben die Funktion zeros() verwendet, um das Root-Array mit Nullen zu initialisieren, damit wir die Werte eingeben können, nachdem wir sie mit der Formel ausgewertet haben.

Wir haben die Funktion subs() verwendet, um den Wert von Zähler und Nenner in der obigen Formel der Newton-Raphson-Methode zu aktualisieren. Das erste Argument der Funktion subs() ist die gegebene Funktion, deren Wurzeln wir finden wollen.

Das zweite Argument ist der alte Wert, den wir ändern möchten, und das dritte ist der neue Wert, den wir anstelle des alten Werts in der angegebenen Funktion einsetzen möchten.

Nach der Funktion subs() hat die Ausgabe die Form einer Funktion wie cos(number), also haben wir die Funktion double() verwendet, um die Werte in numerische Werte umzuwandeln und dann die Newton-Raphson-Formel darauf anzuwenden diese Werte, um den Wert der Wurzel zu finden.

Die Ausgabe zeigt, dass die Wurzeln und die anfängliche Schätzung im Ausgabearray gespeichert wurden. Der obige Code ist die grundlegende Darstellung der Newton-Raphson-Methode, aber wir können andere Dinge wie Toleranz oder eine Methode hinzufügen, um zu prüfen, ob der Algorithmus konvergiert.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook