Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <cmath>
- #include <iostream>
- #include <fstream>
- const double M_PI = 3.14159265358979323846;
- using namespace std;
- //-------------------------------------------------------------------------
- int n;
- int np;
- double a;
- double b;
- int iloscN;
- int iloscNP;
- double *x;
- double *fx;
- double *xp;
- double *fxp;
- double *ai;
- double *Lnxp;
- //-------------------------------------------------------------------------
- //WPROWADZENIE DANYCH
- void funkcjaWprowadzajacaDane(){
- cout << "Prosze wprowadzic wartosc n: " << endl;
- //cin >> n;
- n = 3;
- iloscN = n+1;
- cout << "Prosze wprowadzic wartosc np: " << endl;
- //cin >> np;
- np=50;
- iloscNP = np+1;
- cout << "Prosze wprowadzic lewa granice przedzialu: " << endl;
- //cin >> a;
- a = -1;
- cout << "Prosze wprowadzic prawa granice przedzialu: " << endl;
- //cin >> b;
- b =1;
- x = new double[iloscN];
- fx = new double[iloscN];
- xp = new double[iloscNP];
- fxp = new double[iloscNP];
- ai= new double[iloscN];
- Lnxp = new double[iloscNP];
- }
- //TABLICOWANIE WEZLOW I WARTOSCI FUNKCJI DLA WEZLOW ROWNOODLEGLYCH
- void funkcjaTablicujacaWezlyRownoodlegleIWartosciFunkcjiInterpolowanej() {
- for (int i = 0; i < iloscN; i++){
- x[i] = a +i * ((b-a)/n);
- fx[i] = abs(x[i]*x[i]*x[i])/(1+(x[i]*x[i]));
- }
- }
- //TABLICOWANIE WEZLOW I WARTOSCI FUNKCJI DLA WEZLOW DOBRANYCH OPTYMALNIE
- void funkcjaTablicujacaWezlyOptymalneIWartosciFunkcjiInterpolowanej() {
- for (int i = 0; i < iloscN; i++){
- x[i] = ((a+b)/2)-((b-a)/2)*cos((((2*i)+1)*M_PI)/((2*n)+2));
- fx[i] = abs(x[i]*x[i]*x[i])/(1+(x[i]*x[i]));
- }
- }
- //WYZNACZENIE WSPOLCZYNNIKA WIELOMIANU NEWTONA (ILORAZY ROZNICOWE)
- void funkcjaWyznaczajacaWspolczynikiWielomianuNewtona(){
- double tmp[iloscN][iloscN] = { 0 };
- for (int i = 0; i < iloscN; i++){
- tmp[i][0] = fx[i];
- }
- for (int i = 1; i < iloscN; i++){
- for (int j = 0+i; j < iloscN; j++){
- tmp[j][i] = ((tmp[j][i - 1] - tmp[j-1][i - 1]) / (x[j] - x[j-i]));
- }
- }
- for (int i = 0; i < iloscN; i++){
- ai[i] = tmp[i][i];
- }
- }
- //WYZNACZENIE WARTOSCI WIELOMIANU NEWTONA W DOWOLNYM PUNKCIE
- double funkcjaWyznaczajacaWartosciWielomianuNewtonaWDowolnymPunkcie(const double &xi){
- double tmp = 1.0, wynik = ai[0];
- for (int j = 1; j < iloscN; j++){
- for (int i = 0; i < j; i++){
- tmp *= (xi - x[i]);
- }
- wynik += tmp * ai[j];
- tmp = 1.0;
- }
- return wynik;
- }
- //WYPISANIE WYNIKÓW
- void funkcjaWyznaczajacaTablice(){
- for (int i = 0; i < iloscNP; i++){
- xp[i] = a + i * ((b-a)/np);
- fxp[i] = abs(xp[i]*xp[i]*xp[i])/(1+(xp[i]*xp[i]));
- //UZYCIE FUNKCJI WYZNACZAJACEJ WARTOSC WIELOMIANU NEWTONA W DOWOLNYM PUNKCIE
- Lnxp[i] = funkcjaWyznaczajacaWartosciWielomianuNewtonaWDowolnymPunkcie(xp[i]);
- }
- ofstream file;
- file.open("raport.txt");
- file << "wartosc wezlow x:" << endl;
- for(int i=0; i<iloscN; i++){
- file << x[i] << endl;
- }
- file << endl;
- file << endl;
- file << "wartosc funkcji f(x):" << endl;
- for(int i=0; i<iloscN; i++){
- file << fx[i] << endl;
- }
- file << endl;
- file << endl;
- file << "wezly xp:" << endl;
- for(int i=0; i<iloscNP; i++){
- file << xp[i] << endl;
- }
- file << endl;
- file << endl;
- file << "wartosc funkcji f(xp):" << endl;
- for(int i=0; i<iloscNP; i++){
- file << fxp[i] << endl;
- }
- file << endl;
- file << endl;
- file << "wartosc wielomianu Ln(xp):" << "\n";
- for(int i=0; i<iloscNP; i++){
- file << Lnxp[i] << endl;
- }
- file << endl;
- file << endl;
- file << "blad interpolacji:" << "\n";
- for(int i=0; i<iloscNP; i++){
- file << abs(fxp[i] - Lnxp[i]) << endl;
- }
- file << endl;
- file << endl;
- file << "funkcja interpolujaca: " << "\n";
- for(int i=0; i<iloscN; i++){
- file << ai[i] <<" +" ;
- }
- file.close();
- }
- //-------------------------------------------------------------------------
- int main(){
- //WPROWADZENIE DANYCH
- funkcjaWprowadzajacaDane();
- //WYBOR TYPU WEZLOW
- char odp = 0;
- cout << "Tablicowanie wezlow rownoodleglych - kliknij \"o\"" << endl;
- cout << "Tablicowanie wezlow optymalnie dobranych - kliknij \"r\"" << endl;
- cin >> odp;
- if (odp == 'r'){
- funkcjaTablicujacaWezlyRownoodlegleIWartosciFunkcjiInterpolowanej()
- }
- else if (odp == 'o'){
- funkcjaTabli cujacaWezlyOptymalneIWartosciFunkcjiInterpolowanej();
- }
- //WYZNACZENIE WSPOLCZYNNIKA WIELOMIANU NEWTONA
- funkcjaWyznaczajacaWspolczynikiWielomianuNewtona();
- //WYZNACZENIE TABLIC PUNKTOW, WARTOSCI FUNKCJI INTERPOLOWANEJ I WARTOSCI WIELOMIANU NEWTONA
- funkcjaWyznaczajacaTablice();
- delete [] x;
- delete [] fx;
- delete [] xp;
- delete [] fxp;
- delete [] ai;
- delete [] Lnxp;
- return 0;
- }
- //-------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement