Znajdowanie wielomianów i funkcji w postaci ogólnej

0

Witam,
Mam pewien problem, otóż potrzebuję znaleźć kolejne wielomiany Czebyszewa.
Wielomian Czebyszewa Tk(x) k-tego stopnia określony jest wzorem:

Tk(x) = cos ( k arccos x)

Można posłużyć się też następującymi związkami rekurencyjnymi:

T0(x) = 1
T1(x) = x
Tk+1(x)= 2x Tk(x) - Tk-1(x), k > 0

Kolejne obliczone wielomiany Czebyszewa:

            T0(x) = 1

	T1(x) = X 
	
	T2(X) = 2x<sup>2</sup> - 1                     

	T3(x) = 4x<sup>3</sup> - 3x 

	T4(x) = 8x<sup>4</sup> - 8x<sup>2</sup> + 1

Mój problem polega na tym, że potrzebuję otrzymać wielomiany w takiej postaci jak te wyliczone powyżej.

Napisałem program, który wyznacza kolejne wielomiany rekurencyjnie, z tym, że dla konkretnych wartości, co mnie nie satysfakcjonuję.

Moglibyście podpowiedzieć mi jak to zrobić?

Niżej wklejam mój kod wyliczający rekurencyjnie kolejne wielomiany Czebyszewa dla konkretnego argumentu x.

double Funkcja::rekWielomianCzebyszewa(double x, int stopien)
{
    if(stopien == 0)
        return 1;
    else if(stopien == 1)
        return x;
    else if( stopien > 1)
    {
         return 2.0*x*rekWielomianCzebyszewa(stopien-1,x) - rekWielomianCzebyszewa(stopien-2,x);

    }
    else
        cout << "Stopien wielomianu nie moze byc ujemny\n";
}
0

Ale co znaczy

w takiej postaci jak te wyliczone powyżej
? Chcesz otrzymać napis(string) z indeksami górnymi, czy tablicę zawierającą współczynniki wielomianu?

0

Chętnie poznam dwie możliwości. String mi się przyda, bo muszę później narysować wykres tej funkcji, a współczynniki do dalszych obliczeń.

1

ale to jest bardzo proste:

vector<vector<double> > wilomianyCzeb;
vector<double> Tk1(1,1); // T_{k-1}(x)
vector<double> Tk0(2); // T_{k}(x)
Tk0[1]=1.0;
wilomianyCzeb.push_back(Tk1);
wilomianyCzeb.push_back(Tk0);
for (int i=3; i<=maxStopien; ++i) {
    vector<double> b(i+1);

    for(int j=0; j<i-1; j++)
         b[j] = -Tk1[j];
    for(int j=1; j<=i; j++)
         b[j] += 2*Tk0[j-1];
    Tk1 = Tk0;
    Tk0 = b;
    wilomianyCzeb.push_back(b);
}
0

Jeśli chodzi o uzyskanie ostatecznego wzoru funkcji to najłatwiej będzie Ci to napisać w Matlabie, który pozwala na obliczenia symboliczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1