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ć?
Pokaż co już zrobiłeś.
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.
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 ;]
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");
}