Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_po_ChM-8.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
413.18 Кб
Скачать

4. Построить таблицу обратной к функции , решая уравнение следующим итерационным методом: решение уравнения находиться по формуле

где В качестве начального приближения к точке взять

Получим таблицу:

0

0

0

1

0,1

0,088438

2

0,2

0,178287

3

0,3

0,271124

4

0,4

0,368906

5

0,5

0,474337

6

0,6

0,591579

7

0,7

0,727922

8

0,8

0,898706

9

0,9

1,148891

10

1

2

где - значение переменной, при котором исходная функция принимает значение ,

т.е. erf(zi)=Fi.

. (1)

Теорема 2. Пусть функция непрерывна на отрезке и функция определена формулой (1). Тогда имеет производную в любой точке интервала , производную справа в точке x=a и производную слева в точке x=b, причём эти производные совпадают со значением функции в соответствующей точке:

при  и 

Теорема о существовании и непрерывности обратной функции:

1) Если функция f монотонна на множестве X и принимает значения на множестве Y ( ), то на множестве Y определена обратная функция, принимающая значения в множестве X и обладающая тем же характером монотонности, что и сама функция f.

2) Если X=[a,b] и f монотонна и непрерывна на этом множестве, то множество значений функции f есть [f(a),f(b)] и обратная функция непрерывна на нем.

Функция erf(x) удовлетворяет условиям теоремы о существовании и непрерывности обратной функции, отсюда следует, что обратная функция существует и непрерывна.

Рассмотрим нашу функцию

По теореме 2 получаем

.

Соответственно

Листинг программы:

#include <fstream.h>

#include <math.h>

#include <iostream.h>

int fact(int x)

{int k=1;

for(int i=0;i<x;i++)k*=i;

return k;

}

double poly(double X,double x[11], int i, int n)

{double pol=1;

for(int j=0;j<=n;j++)

if(j-i) {pol*=(X-x[j])/(x[i]-x[j]);}

return pol;

}

double func(double x, double h)

{double sum=0;

double e=2.71828183;

double pi=3.14159265;

for(double x1=0;x1<=x;x1+=h) sum+=pow(e,-x1*x1)*h;

sum*=2/sqrt(pi);

return sum;

}

double erf(double x, double e)

{ const double pi=3.1415926535897932384626433832795;

double sum=0;

int n=0;

bool p=1;

double el=2*x/sqrt(pi);

while(p)

{

if (el<e) p=0;

if(n%2) sum-=el; else sum+=el;

n++;

el*=(x*x*(2*n-1))/(n*(2*n+1));

//cout<<el<<'\n';

}

return sum;

}

double sum_Gauss(double c, double d, int N)

{double hn=(d-c)/N;

double sum=0;

for(int i=0;i<N;i++)

{

double z=c+(i-1)*hn;

sum+=(hn/2)*(func(z+(hn/2)*(1-1/sqrt(3)),0.001)+func(z+(hn/2)*(1+1/sqrt(3)),0.001));

}

return sum;

}

double sum_Simpson(double c, double d, int N)

{double hn=(d-c)/N;

double sum=0;

for(int i=0;i<N;i++)

{

double z=c+(i-1)*hn;

sum+=(hn/6)*(func(z,0.001)+4*func((hn)/2,0.001)+func(z+hn,0.001));

}

return sum;

}

double sum_Trap(double c, double d, int N)

{double hn=(d-c)/N;

double sum=0;

for(int i=0;i<N;i++)

{

double z=c+(i-1)*hn;

sum+=(hn/2)*(func(z,0.001)+func(z+hn,0.001));

}

return sum;

}

double sum_Squares(double c, double d, int N)

{double hn=(d-c)/N;

double sum=0;

for(int i=0;i<N;i++)

{

double z=c+(i-1)*hn;

sum+=hn*func(z+z+hn,0.001);

}

return sum;

}

double funcG( double eps,double fi)

{double h1,h2,arg1,arg2,sqr,si,hn,z[160],sum=0,Sum=0,a=0.0; int i=0,f=0,m;

for(m=2;!f;m+=2)

{sum=0;

double pi=3.14159265;

double e=2.71828183;

for(i=1;i<=m;i++)

{hn=(fi-a)/m;

z[i-1]=a+(i-1)*hn;

sqr=1/sqrt(3);

arg1=z[i-1]+(hn/2)*(1-sqr);

arg2=z[i-1]+(hn/2)*(1+sqr);

h1=(2/sqrt(pi))*pow(e,-arg1*arg1);

h2=(2/sqrt(pi))*pow(e,-arg2*arg2);

si=(hn/2)*(h1+h2);

sum+=si;

}

if(fabs(sum-Sum)<=eps) {f=1;break;}

Sum=sum;

}

return Sum;

}

double func1( double eps,double h)

{double erf=0;

const double pi=3.1415926535897932384626433832795;

erf=(2/sqrt(pi))*exp(-h*h);

return erf;

}

double func2( double eps,double h)

{double erf=0;

const double pi=3.1415926535897932384626433832795;

erf=-2*h*(2/sqrt(pi))*exp(-h*h);

return erf;

}

void first_a()

{ofstream fout("table.txt");

const double pi=3.1415926535897932384626433832795;

double x;

int a=0;

int b=2;

double h=0.2;

double e=0.000001;

for(x=a;x<=b;x+=h)

{fout<<x<<" ";

if(int(x)==x) fout<<" ";

fout<<erf(x,e)<<'\n';

}

fout.close();

}

void first_b()

{ofstream fout("table1.txt");

const double pi=3.1415926535897932384626433832795;

double x;

int a=0;

x=a;

int b=2;

double h=0.1;

double e=0.000001;

int i;

for(i=0;i<=10;i++)

{x=(a+b)/2+((b-a)/2)*cos(((2*i-1)*pi)/(2*10));

fout<<x<<" ";

if(int(x)==x) fout<<" ";

fout<<erf(a+h*i,e)<<'\n';

}

fout.close();

}

void second_a()

{ofstream fout("mistake.txt");

ofstream sout("fun.txt");

int a=0;

int b=2;

double h=0.2;

double x[11];

x[0]=a;

double e=0;

int i,n;

int N=10;

for(i=1;i<=10;i++)x[i]=x[i-1]+h;

double L[11];

for(n=0;n<=10;n++)

{

if(n) {L[n]=0; for(i=0;i<=N;i++) L[n]+=erf(x[n],0.000001)*poly(x[n],x,i,N);}

else L[0]=erf(x[0],0.000001)*poly(x[0],x,0,0);

}

for(int j=0;j<=10;j++)

{double fun=erf(x[j],0.000001);

fout<<fabs(erf(x[j],0.000001)-L[j])<<'\n';

if(e<fabs(erf(x[j],0.000001)-L[j])) e=fabs(erf(x[j],0.000001)-L[j]);

sout<<fun<<'\n';

}

cout<<'$'<<e<<'\n';

fout.close();

}

void second_b()

{ofstream ferf("L1.txt");

ofstream fout("mistake1.txt");

ofstream sout("fun1.txt");

ofstream fx("x1.txt");

const double pi=3.1415926535897932384626433832795;

double e=0;

int a=0;

int b=2;

double h=0.2;

int i,n;

double x[21], X[21];

int N=10;

for(i=1;i<=N;i+=1)

{X[i-1]=(a+b)/2+((b-a)/2)*cos(((2*i-1)*pi)/(2*N));

fx<<X[i-1]<<'\n';

};

x[0]=a;

for(i=1;i<=10;i++)

{x[i]=x[i-1]+h;cout<<'#'<<x[i]<<'\n';}

double L[21];

for(n=0;n<=10;n++)

if(n) {L[n]=0; for(i=0;i<=N;i++) L[n]+=erf(a+h*n,0.000001)*poly(x[n],X,i,N);}

else L[0]=erf(a+h*n,0.000001);

for(int j=0;j<=10;j++)

{double fun=erf(x[j],0.000001);

cout<<fun<<'\n';

fout<<fabs(fun-L[j])<<'\n';

if(e<fabs(fun-L[j])) e=fabs(fun-L[j]);

sout<<fun<<'\n';

ferf<<L[j]<<'\n';

}

cout<<'$'<<e<<'\n';

fout.close();

ferf.close();

}

void third_Gauss()

{int N;

ofstream fout("Gauss.txt");

for(double x=0;x<2;x+=0.2)

{N=4;

while(fabs(sum_Gauss(0,x,N)-sum_Gauss(0,x,2*N))>0.0001) {N*=2;cout<<N<<'\n';}

fout<<sum_Gauss(0,x,N)<<' '<<fabs(sum_Gauss(0,x,N)-sum_Gauss(0,x,2*N))<<' '<<N<<'\n';

}

}

void third_Simpson()

{int N;

ofstream fout("Simpson.txt");

for(double x=0;x<2;x+=0.2)

{N=4;

while(fabs(sum_Simpson(0,x,N)-sum_Simpson(0,x,2*N))>0.0001) {N*=2;cout<<N<<'\n';}

fout<<sum_Simpson(0,x,N)<<' '<<fabs(sum_Simpson(0,x,N)-sum_Simpson(0,x,2*N))<<' '<<N<<'\n';

}

}

void third_Trap()

{int N;

ofstream fout("Trap.txt");

for(double x=0;x<2;x+=0.2)

{N=4;

while(fabs(sum_Trap(0,x,N)-sum_Trap(0,x,2*N))>0.0001) {N*=2;cout<<N<<'\n';}

fout<<sum_Trap(0,x,N)<<' '<<sum_Trap(0,x,N)-sum_Trap(0,x,2*N)<<' '<<N<<'\n';

}

}

void third_Squares()

{int N;

ofstream fout("Squares.txt");

for(double x=0;x<2;x+=0.2)

{N=4;

while(fabs(sum_Squares(0,x,N)-sum_Squares(0,x,2*N))>0.0001) {N*=2;cout<<N<<'\n';}

fout<<sum_Squares(0,x,N)<<' '<< fabs(sum_Squares(0,x,N)-sum_Squares(0,x,2*N))<< ' '<<N<<'\n';

}

}

void forth()

{char l[10];

double eps,h[25],z[25],znF,znF1,znF2,J,F[15],pn=0,ps=1,mod=fabs(pn-ps);

int i=0,j=1,k;

ifstream fin ("xi.txt");

ofstream fout ("fg.txt");

while(!fin.eof()){

fin.getline(l,8,' ');

h[i]=atof(l);i++;

}

eps=0.000001;

for(k=0;k<11;k++){

znF=func1(eps,h[k]);

F[k]=func1(eps,h[0])+k*(func1(eps,h[10])-func1(eps,h[0]))/10;

}

z[0]=0;

for(k=0;k<11;k++){j=k;

ps=h[k];

pn=-1;

mod=fabs(pn-ps);

while(mod>eps){

znF=funcG(eps,ps)-F[k];

znF1=func(eps,ps);

znF2=func2(eps,ps);

J=znF2/(2*znF1);

J=J*znF/znF1;

pn=ps-znF*(1+J)/znF1;

mod=fabs(pn-ps);

ps=pn;

}

z[k]=pn;

}

for(k=0;k<11;k++)

cout<<F[k]<<" "<<z[k]<<endl;

}

void main()

{int a=0;

int b=2;

double h=0.2;

double e=0.000001;

first_a();

first_b();

second_a();

second_b();

//third_Gauss();

//third_Simpson();

//third_Trap();

//third_Squares();

//fourth

}

23

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]