1. Tema
Determinarea rădăcinilor unui polinom prin metoda Lobacevski. Presupunem că rădăcinile ecuației sunt distincte în modul și le notăm cu |x1|>|x2|>…>|xn|.
2. Metoda
3. Exemplu
Să se aproximeze rădăcinile ecuației de mai jos, utilizând metoda Lobacevski cu o dispersare (p=1).
Rezolvare
4. Algoritmul
Algoritmul asociat metodei Lobacevski este:
Intrări:
- n = gradul polinomului
- a = vectorul coeficienților polinomului
Ieșiri:
- x = vectorul soluție cu componentele nenegative
- y = vectorul soluție cu componentele negative
5. Implementare
#include "stdafx.h" #include using namespace std; #define max 10 void main(void) { float suma, px, py; float a[max + 1], b[max + 1], x[max + 1], y[max + 1]; int n, i, k; cout << "dati n " << endl; cin >> n; for (i = 0; i <= n; i++) { cout << "a[" << i << "]="; cin >> a[i]; } cout << endl; b[0] = a[0] * a[0]; for (k = 1; k <= n; k++) { b[k] = a[k] * a[k]; suma = 0; for (i = 1; i <= k; i++) if ((k - i >= 0) && (k + i <= n)) if (i % 2 == 0) suma = suma + a[k - i] * a[k + i]; suma = suma - a[k - i] * a[k + i]; b[k] = b[k] + 2 * suma; } for (k = 1; k <= n; k++) { x[k] = sqrt(b[k] / b[k - 1]); y[k] = -x[k]; } for (k = 1; k <= n; k++) { px = a[0]; for (i = 1; i <= n; i++) px = px*x[k] + a[i]; px = abs(px); py = a[0]; for (i = 1; i <= n; i++) py = py*y[k] + a[i]; py = abs(py); if (px<py) cout << x[k] << endl; else cout << y[k] << endl; } system("pause"); }
Rezultat