Interpolacja Hermite’a.pdf

(67 KB) Pobierz
Interpolacja Hermite’a
980509233.027.png
Interpolacja wielomianowa m>0:
bazowe wielomiany Hermite’a
1
'
1
'
2
C
:
W
=
H
F
+
H
F
+
H
F
+
H
F
1
1
2
3
2
4
0.8
H
( )
0
=
1
H
'
( )
0
=
H
( )
1
=
H
'
( )
1
=
0
1
1
1
1
H
'
( )
0
=
1
H
( )
0
=
H
( )
1
=
H
'
( )
1
=
0
2
2
2
2
2
2
2
2
Funkcje Hermite'a
H 1
H 2
H 3
H 4
H
( )
1
=
1
H
( )
0
=
H
'
( )
0
=
H
'
( )
1
=
0
3
3
3
3
H
'
( )
1
=
1
H
( )
0
=
H
'
( )
0
=
H
( )
1
=
0
4
4
4
4
0.4
3
2
H
( )
h
=
(
2
h
3
h
+
1
)
1
3
2
H
h
=
h
2
h
+
h
( )
(
)
2
2
3
H
( )
h
=
(
3
h
2
h
)
0
3
3
2
H
( )
h
=
(
h
h
)
0
0.5
1
4
980509233.028.png 980509233.029.png 980509233.030.png 980509233.001.png 980509233.002.png 980509233.003.png 980509233.004.png 980509233.005.png 980509233.006.png 980509233.007.png 980509233.008.png 980509233.009.png 980509233.010.png 980509233.011.png 980509233.012.png 980509233.013.png 980509233.014.png 980509233.015.png 980509233.016.png 980509233.017.png 980509233.018.png 980509233.019.png 980509233.020.png 980509233.021.png 980509233.022.png 980509233.023.png
 
#include <iostream>
#include <stdlib.h>
using namespace std;
double Hermit(double x, double a,double b);
double TransX_to_Eta(double x, double a,
double b);
double Funkcja(double x);
double Pochodna(double x);
double H1(double eta);
double H2(double eta);
double H3(double eta);
double H4(double eta);
980509233.024.png
int main(int argc, char *argv[])
{double a=-10.0,b=10.0,x,h,hc,er=0.0;
int n=10 ,m=2;
FILE *fp;
fp = fopen("Hermit.txt", "w+");
x=a;
h=(b-a)/m;
b=a+h;
hc=h/n;
for (int j=0;j<m;j++){
if (j==m-1) n++;
for (int i=0;i<n;i++){
fprintf(fp,"%6.10f %6.10f\n",x,Hermit(x,a,b));
fprintf(fp,"%6.10f %6.10f\n",x,Hermit(x,a,b));
er=er+hc*(Hermit(x,a,b)-Funkcja(x))*(Hermit(x,a,b)-Funkcja(x));
if (j==m-1) {hc=(b-a)/(n-1);x=x+hc;} else
{hc=(b-a)/n;x=x+hc;}
}
a=b;b=b+h;x=a;
}
fclose(fp);
er=sqrt(er);
printf("Error=%f\n",er);
system("PAUSE");
return 0;
980509233.025.png
//************************************************************
double TransX_to_Eta(double x, double a, double b)
{return (x-a)/(b-a);}
//************************************************************
double Funkcja(double x)
{return 1.0/(1.0+x*x);}
//************************************************************
double Pochodna(double x)
{return -2.0*x/((1.0+x*x)*(1.0+x*x));}
//************************************************************
double Hermit(double x, double a,double b)
{double H,eta;
{double H,eta;
eta=TransX_to_Eta(x,a,b);
H=Funkcja(a)*H1(eta);
H=H+Pochodna(a)*H2(eta);
H=H+Funkcja(b)*H3(eta);
H=H+Pochodna(b)*H4(eta);
return H;
}
//************************************************************
980509233.026.png
Zgłoś jeśli naruszono regulamin