Metoda Lobacevski

1. Tema

Determinarea rădăcinilor unui polinom prin metoda Lobacevski. Presupunem că rădăcinile ecuației metoda lobacevski1sunt distincte în modul și le notăm cu |x1|>|x2|>…>|xn|.

2. Metoda

metoda lobacevski2

3. Exemplu

Să se aproximeze rădăcinile ecuației de mai jos, utilizând metoda Lobacevski cu o dispersare (p=1).

metoda lobacevski3

Rezolvare

metoda lobacevski4

metoda lobacevski5

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

metoda lobacevski6

5. Implementare

Visual_C++_Icon
Cod Sursa C++
#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

metoda lobacevski rezultat

Leave a comment