Interpolacja Lagrange'a wielomianami 4 stopnia

0

Witam, mam problem z napisaniem programu, gdyż nie wiem jak zrobić żeby program korzystał tylko i wyłącznie z wielomianów 4 stopnia (takie mam zadanie), czy ktoś wie jak się za to zabrać?

0

Pokaż co już zrobiłeś.

0

W sumie niewiele, mam zadanie "Na ile podprzedziałów należy podzielić dany przedział aby błąd interpolacji był mniejszy od zadanego, i robić to dla przedziałów rosnących wykładniczo 2,4,8 itd". funkcja to e^-x w przedziale <0,1>, napisałem pętlę do obliczania wartości tej funkcji i inkrementacji liczby przedziałów, problem w tym że we wszystkich kodach i notatkach jakie przeglądałem stopień wielomianu interpolacyjnego rośnie wraz z liczbą węzłów.

0

No i nie dziwota bo tak musi być. Rozumiesz w ogóle co to jest interpolacja? To jest poprowadzenie pewnej funkcji o analitycznym wzorze przez zadane węzły w nadziei że taka funkcja będzie w miarę dobrze aproksymować krzywą z której wzięliśmy punkty. O ile nie jesteś jasnowidzem to niestety nie poprowadzisz wielomianu niskiego stopnia przez wiele węzłów.

W tej twojej treści nie widzę nic na temat stopnia wielomianu... Ale zakładając że takie polecenie masz, to ja bym zrozumiał że chodzi o interpolacje wielomianem 4 stopnia dla każdego podprzedziału po prostu. Taka prawie funkcja sklejana ;]

0

W takim razie jaki jest sens tego zadania? :)

edit:
Mam rozwiązanie przy użyciu funkcji 2 stopnia, tylko nijak nie wiem jak to przerobić na 4 stopień :/

#include <iostream>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
 
int n=1,a=1,b=100;
double x,x1,x2,x3,Odl,Error,Eps=0.0001;
 
do{
    n=2*n;
    x1=a;
    Error=0;
    for (int i=1;i<=n;i++)
        {
        x3=((a+b+n-2)/2)*i-(i-1);
        x2=(x1+x3)/2;
        for (int j=1;j<=10;j++)
        {
        x=j*(x1+x3)/10;
        Odl=(((x-x2)*(x-x3))/((x1-x2)*(x1-x3)))*log(x1)+(((x-x1)*(x-x3))/((x2-x1)*(x2-x3)))*log(x2)+(((x-x1)*(x-x2))/((x3-x1)*(x3-x2)))*log(x3)-log(x);
        if (Error<fabs(Odl)) Error=fabs(Odl);
        }
        }
}while(Error>=Eps);
 
cout<<"Funkcje ln(x) trzeba podzielic na "<<n<<"podprzedzialow aby blad byl mniejszy od zadanego";
system("Pause");
 
 
}

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