Αριθμητικός υπολογισμός ρίζας με τη μέθοδο της εφαπτομένης στη C++
Το βίντεο έχει διάρκεια 24:04. Πιθανά να χρειάζεται λίγος χρόνος για την προβολή του.
C++
πρόγραμμα
αριθμητική μέθοδος
ρίζα
εξίσωση
προσέγγιση
σύγκλιση
μέθοδος εφαπτομένης
secant method
Έστω πως θέλουμε να υπολογίσουμε μια ρίζα του πολυωνύμου:
$$ {x}^{3}-6\,{x}^{2}-x+30 = 0 $$
Η μέθοδος της εφαπτομένης αποτελεί -κατά κάποιο τρόπο-
παραλλαγή της μεθόδου Newton–Raphson και βασίζεται σε μια επαναληπτική διαδικασία.
Στη μέθοδο Newton–Raphson χρησιμοποιείται η παράγωγος
για να εκτιμηθεί μια καλύτερη προσέγγιση της ρίζας:
$$
x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}
$$
Στη μέθοδο της εφαπτομένης, θεωρούμε πως ο λόγος:
$$
\frac{f(x_{n})-f(x_{n-1})} {x_{n}-x_{n-1}}
$$
αποτελεί μια καλή προσέγγιση της παραγώγου.
Έτσι ο αναδρομικός τύπος της ακολουθίας είναι:
$$
x_{n+1} = x_n - \frac{f(x_{n}) (x_{n}-x_{n-1})} {f(x_{n})-f(x_{n-1})} =
x_n - f(x_{n}) \frac{\Delta x} {\Delta y}
$$
Η διαδικασία επαναλαμβάνεται
μέχρι να πάρουμε μια ικανοποιητική προσέγγιση.
Συνήθως σταματάμε όταν:
$$
|x_{n+1} - x_n| < \epsilon
$$
Ακολουθεί ένα παράδειγμα υλοποίησης:
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
#define MAXITER 100
const double eps = 1e-4;
double f (double x)
{
return x*x*x - 6*x*x - x + 30;
}
int main()
{
bool rootFound = false;
double x[MAXITER];
double Dx, Dy;
double d;
int i = 2;
cout << "Εύρεση ρίζας με τη μέθοδο της εφαπτομένης." << endl;
cout << "------------------------------------------" << endl;
cout << "Αρχική τιμή x[0]: ";
cin >> x[0];
cout << "Αρχική τιμή x[1]: ";
cin >> x[1];
printf(" i x f(x) d\n");
printf("--------------------------------------------------\n");
do
{
Dx = x[i] - x[i-1];
Dy = f(x[i]) - f(x[i-1]);
x[i+1] = x[i] - f(x[i]) * Dx / Dy;
d = fabs(Dx);
printf("%5d %14.8f %14.8f %14.8f\n", i, x[i+1], f(x[i+1]), d);
if (d < eps)
{
rootFound = true;
break;
}
i++;
if (i >= MAXITER)
{
rootFound = false;
break;
}
} while (rootFound == false);
if (rootFound == true)
printf("\nΒρέθηκε x=%.14f\n", x[i]);
else
printf("\nΔεν βρέθηκε ρίζα\n");
return 0;
}
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.