Interpolacja Funkcji



Program interpoluje funkcję tan(x^2) metod± Lagrange'a w punktach z zakresu (-10;10) punkty mog± być dobrane optymalnie z wielomianów Czybyszewa czy jak im tam, albo podane ręcznie. Inerpoluje się wielomianem 6go i 3go rzedu. Dla przykładu oblicza wartosc w punkcie (PI/4)^0.5


#include<math.h>
#include<stdio.h>
#include<iostream.h>

void inter(int n,int opt);
double fun (double X);
double lagrange(int N,double XX);
double x[7],y[7],b,a,aa;

void main(void)
{
aa = M_PI;
a=-1;
b=1;
inter(6,1);
inter(3,1);
}

void inter(int n,int opt)
{
if (opt == 1)
  {
  //optymalny dobor
  for (int ia=0;ia<=n;ia++)
    {
    x[ia]=(b-a)/2;
    x[ia]*=cos((2*ia+1)/(2*double(n)+2)*aa);
    x[ia]-=(b+a)/2;
    y[ia]=fun(x[ia]);
    printf("x = %lf y = %lf\n",x[ia],y[ia]);
    }
  }
else
  {
  for (int ii=0;ii<=n;ii++)
    {
    cout << "Podaj x[" << ii << "] = ";
    cin >> x[ii];
    y[ii]=fun(x[ii]);
    }
  }

double temp = sqrt(aa/4);
double temp2 = lagrange(n,temp);
printf("\n Yint(%lf) = %lf org %lf\n\n",temp,temp2,fun(sqrt(aa/4)));
}

double lagrange(int N,double XX)
{
double wyn[7],wynk=0;
for (int ib=0;ib<=N;ib++)
  {
  wyn[ib]=1.0;
  for (int ic=0;ic<=N;ic++)
    if (ic != ib)
      wyn[ib] *= (XX-x[ic]);
  for (int id=0;id<=N;id++)
    if (id != ib)
      wyn[ib] /= (x[ib]-x[id]);
  wynk+=wyn[ib]*y[ib];
  }
return wynk;
}

double fun (double X)
{
return tan(X*X);
}


Powrot do Programów
Powrót na stronę główn±