Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wielomiany Laguerre'a

Ostatnio zmodyfikowano 2014-11-24 12:14
Autor Wiadomość
Saphira
Temat założony przez niniejszego użytkownika
[C++] Wielomiany Laguerre'a
» 2014-11-17 01:48:50
Witam. Mam dosyć trudne zadanie do wykonania i kompletnie nie wiem, jak się za to zabrać.
Mam policzyć pierwiastki pierwszych pięciu wielomianów Laguerre'a. Mam to zrobić na dwa sposoby - "sztywno" podać te wielomiany i policzyć metodą Newtona ich pierwiastki, oraz zrobić to samo, tylko że rekurencyjnie.
Wzór, z którego korzystam tutaj to Ln+2(x) = (2n + 3 - x)Ln+1(x) - (n+1)^2 * Ln(x) dla n >= 0.
Nie mam niestety nawet części kodu, ponieważ to zadanie mnie, delikatnie mówiąc, przerosło.
Proszę o pomoc.
P-120855
darko202
» 2014-11-21 13:17:26
ale z czym masz problem ?
z zrozumieniem zadania,  rekurencją czy napisanym algorytmem

nie zajmowałem się tym nigdy, z materiałów znalezionych na
https://www.google.pl/?gws_rd=ssl#q=wielomiany+laguerre'a

wywnioskowałem, że
1.
masz w zadaniu algorytm
Ln+2(x) = (2n + 3 - x)Ln+1(x) - (n+1)^2 * Ln(x) dla n >= 0.

co daje nam :
L0(x) = 1 //z definicji
L1(x) = 5-x
L2(x) = (7-x)(5-x) - 9
itd. liczymy z definicji

pierwiastki to miejsca zerowe wielomianu (w rozwiązanie może być liczba zespoloną)

2.
rekurencja jest masowo opisywana

3.
co do algorytmu spojrzyj na
http://www.algorytm.org/procedury-numeryczne/metoda-laguerre-a.html


P-121092
Saphira
Temat założony przez niniejszego użytkownika
» 2014-11-22 13:15:08
Tylko, że właśnie mam za zadanie policzyć pierwiastki wielomianów Laguerre'a, a nie metodą Laguerre'a... Problem sprawia mi przepisanie wszystko na C++
P-121144
darko202
» 2014-11-24 12:14:12
problem sprowadza się do znalezienia pierwiastków wielomianu
np. dla
W(X)=2x5+3x4−2x−3

pierwiastkami są: 1, -1 , 1.5, i, -i

pierwsze podejście to
http://www.matma.net.pl/wielomiany.php


w C++
chcielibyśmy uzyskać coś takiego

C/C++
main
{
    int wspolczynniki[ 6 ] = { - 3, - 2, 0, 0, 3, 2 };
    Wielomian w;
    w.Dane( 5, wspolczynniki );
    w.Print();
    cout << " W(1) == " << w.Pierwiastek( 1 ) << "\n";
    ...
}

do tego potrzebowalibyśmy np. klasy

C/C++
const int MAX_STOPIEN = 6;
class Wielomian
{
public:
    Wielomian( void );
    void Dane( int stopien, int wyrazy[] );
    void Print();
    bool Pierwiastek( double liczba );
    ~Wielomian( void );
private:
    int stopien;
    int wyrazy[ MAX_STOPIEN ];
};

C/C++
#include "StdAfx.h"
#include<iostream>
#include "Wielomian.h"
#include <cstdlib>
using namespace std;

Wielomian::Wielomian( void )
{
}

void Wielomian::Dane( int stop, int w[] )
{
    stopien = stop + 1;
    for( int i = 0; i < stopien; i++ )
    {
        wyrazy[ i ] = w[ i ];
    }
}

bool Wielomian::Pierwiastek( double liczba )
{
    double x = 5, z = 1;
    for( int i = 0; i < stopien; i++ )
    {
        z = 1;
        for( int j = 0; j < stopien; j++ )
        {
            z = z * liczba;
        }
       
        x += wyrazy[ i ] * z;
    }
   
    if( x == 0 )
         return true;
    else
         return false;
   
}

void Wielomian::Print()
{
    for( int i = stopien - 1; i > 0; i-- )
    {
        cout << wyrazy[ i ] << "x^" << i << " + ";
    }
}

Wielomian::~Wielomian( void )
{
}

widać ze metodę Pierwiastek należy poprawić dla przypadków zespolonych  
gdzie i^2 = -1;
np.
Pierwiastek(double rzeczywista, double urojona);

oraz popracować nad algorytmem typowania możliwych pierwiastków
zgodnie z zasadami rozwiązywania układów równań.

Ponieważ twój problem dotyczy ustalonych pierwiastków wielomianów Laguerre'a
masz podaną definicję
sprawdź czy są tam przypadki urojone
P-121262
« 1 »
  Strona 1 z 1