Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:лабы / 2
.cpp
#include <fstream>
#include <iostream>
#define _USE_MATH_DEFINES
#include <iomanip>
#include <math.h>
#include <conio.h>
using namespace std;
const int n = 10;
double L[n+1], K[n+1], a[n+1], b[n+1], c[n+1], d[n+1],r[n+1], y[n+1], x[n+1];
double A = 0.0, B = 2*M_PI;
double h = (B-A)/n,Hd=(B-A)/(6*n), xdop= A;
double f(double x)
{
return (2*sin((M_PI*x)/3)+x);
}
/*double sp(double X)//proverka na vixod znachenii splaina
{
int k = 0;//k-kol-vo h ykladivaetsj v splain
k = int(X/h) + 1;//X-znachenie tochki//numeracij s pervogo
if (k>n || k<0)
k=0;
/* double xl = A + (l-1)*h;
double xl1 = A + (l)*h;
if (!(xl <= X && X <= xl1))
throw 1;
if (!(1 <= l))
throw 2;
if (l > n+1)
l = n+1;*/
// return a[k] + b[k]*(X-x[k-1]) + c[k] * pow(X-x[k-1], 2.0)+ d[k]*pow(X-x[k-1],3.0); }
double s (double x, int j)
{
return (a[j]+b[j]*(x-(A+(j-1)*h))+c[j]*pow((x-(A+(j-1)*h)),2.0)+d[j]*pow((x-(A+(j-1)*h)),3.0)) ;
}
int main()
{double k;
int i;
c[1] = 0;
L[1] = 0;
K[1] = 0;
for (i=0; i<n+1; i++)
{
x[i] = A+i*h;
y[i] = f(x[i]);
}
//for(i=1;i<n;i++){r[i]=(y[i+1]-y[i])/h-(y[i]-y[i-1])/h; }
for (i=2; i<n+1; i++)
{
L[i] = -h/(2*h + L[i-1]*h);
K[i] = (y[i-1]-K[i-1]*h)/(2*h + L[i-1]*h);
}
c[n] = K[n];
for (i=n-1; i>1; i--)
{
c[i] = L[i]*c[i+1] + K[i];
}
for (i=1; i<n+1; i++)
a[i] = y[i-1];
d[n] = - c[n]/(3*h);
b[n] = (y[n]-y[n-1])/h - 2*h*c[n]/3;
for (i=1; i<n; i++)
{
d[i] = (c[i+1]-c[i])/(3*h);
b[i] = (y[i]-y[i-1])/h - h*(c[i+1]+2*c[i])/3;
}
ofstream fout ("output.csv");
cout <<setw(10)<< "X"<< setw(10)<<"Func(x)"<< setw(10)<<" Sp(x) "<<setw(10)<< " modul' "<<endl;
//setw(10)<<"prf "<<setw(10)<<"prsp "<<setw(10)<<"modul'2 \n ";
fout <<setw(10)<< "X"<<";"<< setw(10)<<"Func(x)"<<";"<< setw(10)<<"Sp(x)"<<setw(10)<<";"<< " a "<<";"<<setw(10)<<" b "<<";"<<setw(10)<<"c "<<";"<<setw(10)<<" d "<<endl;
fout << setw(10) << A<<";" << setw(10) << f(A)<<";" << setw(10) <<s(A,1)<<";"<< setw(10) << a[0] <<";"<< setw(10)<<b[0] <<";"<< setw(10)<<c[0]<<";"<< setw(10)<<d[0]<<endl;
for(i=1;i<n+1;i++)
{
for(int j=0;j<6;j++)
{ xdop+=Hd;
fout << setw(10) << xdop<<";" << setw(10) << f(xdop)<<";" << setw(10) <<s(xdop,i)<<";"<< setw(10) << a[i] <<";"<< setw(10)<<b[i] <<";"<< setw(10)<<c[i]<<";"<< setw(10)<<d[i]<<endl;
}
cout << setw(10) << xdop << setw(10) << f(xdop) << setw(10) << s(xdop,i)<< setw(15) << fabs(s(xdop,i ) - f(xdop)) << endl;
//setw(10)<<pr(xdop)<< setw(10)<<pr1(xdop,i)<< setw(10)<<fabs( pr(xdop)-pr1(xdop,i))<<endl;
}/*
k=0; i=0;
while(i<n)
{ if(k==B)
{ cout << setw(10) << k << setw(10) << f(k) << setw(10) << (a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) )<< setw(10) << fabs((a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) ) - f(k)) <<endl;
//setw(10)<<pr(k)<< setw(10)<<pr1(k)<< setw(10)<<fabs( pr(k)-pr1(k))<<endl;
fout << setw(10) << k<<";" << setw(10) << f(k)<<";" << setw(10) << (a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) )<<";"<< setw(10) << a[n] <<";"<< setw(10)<<b[n] <<";"<< setw(10)<<c[n]<<";"<< setw(10)<<d[n]<<endl;
}
else
{
cout << setw(10) << k << setw(10) << f(k) << setw(10) << sp(k) << setw(10) << fabs(sp(k) - f(k)) <<endl;
//setw(10)<<pr(k)<< setw(10)<<pr1(k)<< setw(10)<<fabs( pr(k)-pr1(k))<<endl;
cout << setw(10) << k+h/2 << setw(10) << f((k+h/2)) << setw(10) << sp((k+h/2)) << setw(10) << fabs(sp((k+h/2)) - f((k+h/2))) << endl;
//setw(10)<<pr(k+h/2)<< setw(10)<<pr1(k+h/2)<< setw(10)<<fabs( pr1(k+h/2)-pr(k+h/2) )<<endl;
fout << setw(10) << k <<";"<< setw(10) << f(k)<<";" << setw(10) << sp(k)<<";" << setw(10) << a[i+1]<<";"<< setw(10)<<b[i+1]<<";"<< setw(10)<<c[i+1]<<";"<< setw(10)<<d[i+1]<<";"<<endl;
fout << setw(10) << k+h/2 <<";"<< setw(10) << f((k+h/2))<<";" << setw(10) << sp((k+h/2))<<";"<<endl;
//<< setw(10) << fabs(sp((k+h/2)) - f((k+h/2))) << setw(10)<<pr(k+h/2)<< setw(10)<<pr1(k+h/2)<< setw(10)<<fabs( pr1(k+h/2)-pr(k+h/2) )<<endl;
}
i++;
k=x[i];
}*/
fout.close();
_getch();
return 0;
}
/*
#include <fstream>
#include <iostream>
#define _USE_MATH_DEFINES
#include <iomanip>
#include <math.h>
#include <conio.h>
using namespace std;
const int n = 10;
double L[n+1], K[n+1], a[n+1], b[n+1], c[n+1], d[n+1], y[n+1], x[n+1];
double A = 0.0, B = 2*M_PI;
double h = (B-A)/n;
double f(double x)
{
return //(sin(x*M_PI*0.25))
(2*sin((M_PI*x)/3)+x);
}
double pr (double x1)
{ double d=0.000000001;
return (f(x1+d)-f(x1))/d;
}
double sp(double X)//proverka na vixod znachenii splaina
{
int k = 0;//k-kol-vo h ykladivaetsj v splain
k = int(X/h) + 1;//X-znachenie tochki//numeracij s pervogo
if (k>n || k<0)
k=0;
/* double xl = A + (l-1)*h;
double xl1 = A + (l)*h;
if (!(xl <= X && X <= xl1))
throw 1;
if (!(1 <= l))
throw 2;
if (l > n+1)
l = n+1;*/
/* return a[k] + b[k]*(X-x[k-1]) + c[k] * pow(X-x[k-1], 2.0)+ d[k]*pow(X-x[k-1],3.0);
}
double pr1 (double x2)
{ double delt1=0.000000001;
return (sp(x2+delt1)-sp(x2))/delt1;
}
void main()
{double k;
int i;
c[1] = 0;
L[1] = 0;
K[1] = 0;
for (i=0; i<n+1; i++)//zapolnili x[n+1]
{
x[i] = A+i*h;
y[i] = f(x[i]);
}
for (i=2; i<n+1; i++) //prjmoi xod
{
L[i] = -h/(2*h + L[i-1]*h);
K[i] = (y[i]-K[i-1]*h)/(2*h + L[i-1]*h);
}
c[n] = K[n];
for (i=n-1; i>1; i--) //obratnii xod
{
c[i] = L[i]*c[i+1] + K[i];
}
for (i=1; i<n+1; i++)
a[i] = y[i-1];
d[n] = - c[n]/(3*h);
b[n] = (y[n]-y[n-1])/h - 2*h*c[n]/3;
for (i=1; i<n; i++)
{
d[i] = (c[i+1]-c[i])/(3*h);
b[i] = (y[i]-y[i-1])/h - h*(c[i+1]+2*c[i])/3;
}
ofstream fout ("output.csv");
cout <<setw(10)<< "X"<< setw(10)<<"Func(x)"<< setw(10)<<" Sp(x) "<<setw(10)<< " modul' "<<setw(10)<<"prf "<<setw(10)<<"prsp "<<setw(10)<<"modul'2 \n ";
fout <<setw(10)<< "X"<<";"<< setw(10)<<"Func(x)"<<";"<< setw(10)<<" Sp(x) "<<";"<<setw(10)<<endl;
k=A; i=0;
while(i<n)
{ if(k==B) {cout << setw(10) << k << setw(10) << f(k) << setw(10) << (a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) )<< setw(10) << fabs((a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) ) - f(k)) << setw(10)<<pr(k)<< setw(10)<<pr1(k)<< setw(10)<<fabs( pr(k)-pr1(k))<<endl;
fout << setw(10) << k<< ";" << setw(10) << f(k)<<";" << setw(10) << (a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) )<<";"<< setw(10) << fabs((a[n] + b[n]*h + c[n] * pow(h, 2.0) + d[n] * pow(h, 3.0) ) - f(k))<<";" << setw(10)<<pr(k)<<";"<< setw(10)<<pr1(k)<<";"<< setw(10)<<fabs( pr(k)-pr1(k))<<";"<<endl;}
else
{
cout << setw(10) << k << setw(10) << f(k) << setw(10) << sp(k) << setw(10) << fabs(sp(k) - f(k)) << setw(10)<<pr(k)<< setw(10)<<pr1(k)<< setw(10)<<fabs( pr(k)-pr1(k))<<endl;
cout << setw(10) << k+h/2 << setw(10) << f((k+h/2)) << setw(10) << sp((k+h/2)) << setw(10) << fabs(sp((k+h/2)) - f((k+h/2))) << setw(10)<<pr(k+h/2)<< setw(10)<<pr1(k+h/2)<< setw(10)<<fabs( pr1(k+h/2)-pr(k+h/2) )<<endl;
fout << setw(10) << k << ";" << setw(10) << f(k)<< ";" << setw(10) << sp(k) << ";"<< setw(10) << fabs(sp(k) - f(k)) << ";"<< setw(10)<<pr(k)<< ";"<< setw(10)<<pr1(k)<< ";"<< setw(10)<<fabs( pr(k)-pr1(k))<< ";"<<endl;
fout << setw(10) << k+h/6<< ";" << setw(10) << f((k+h/6)) << ";" << setw(10)<<setprecision(5) << sp((k+h/6)) << ";" << setw(10) << fabs(sp((k+h/6)) - f((k+h/6))) << ";" << setw(10)<<pr(k+h/6)<< ";" << setw(10)<<pr1(k+h/6)<< ";" << setw(10)<<fabs( pr1(k+h/6)-pr(k+h/6) )<<endl;
fout << setw(10) << k+h/3 << ";" << setw(10) << f((k+h/3)) << ";" << setw(10)<<setprecision(5) << sp((k+h/3)) << ";" << setw(10) << fabs(sp((k+h/3)) - f((k+h/3))) << ";" << setw(10)<<pr(k+h/3)<< ";" << setw(10)<<pr1((k+h/3))<< ";" << setw(10)<<fabs( pr((k+h/3))-pr1((k+h/3)))<<endl;
fout << setw(10) << k+h/2 << ";" << setw(10) << f((k+h/2)) << ";" << setw(10) <<setprecision(5)<< sp((k+h/2)) << ";" << setw(10) << fabs(sp((k+h/2)) - f((k+h/2))) << ";" << setw(10)<<pr(k+h/2)<< ";" << setw(10)<<pr1(k+h/2)<< ";" << setw(10)<<fabs( pr1(k+h/2)-pr(k+h/2))<<endl;
fout << setw(10) << k+4*h/6 << ";" << setw(10) << f((k+4*h/6)) << ";" << setw(10)<<setprecision(5) << sp(k+4*h/6) << ";" << setw(10) << fabs(sp(k+4*h/6) - f(k+4*h/6))<< ";" << setw(10)<<pr(k+4*h/6)<< ";" << setw(10)<<pr1(k+4*h/6)<< ";" << setw(10)<<fabs( pr(k+4*h/6)-pr1(k+4*h/6))<<endl;
fout << setw(10) << k+5*h/6 << ";" << setw(10) << f((k+5*h/6)) << ";" << setw(10)<<setprecision(5) << sp((k+5*h/6)) << ";" << setw(10) << fabs(sp((k+5*h/6)) - f((k+5*h/6)))<< ";" << setw(10)<<pr(k+5*h/6)<< ";" << setw(10)<<pr1(k+5*h/6)<< ";" << setw(10)<<fabs( pr1(k+5*h/6)-pr(k+5*h/6) )<<endl;
}
i++;
k=x[i];
}
fout<<setw(10)<<"a " << ";"<<setw(10)<<"b" << ";"<<setw(10)<<"c" << ";"<<setw(10)<<"d"<<endl;
for(i=1; i<=n; i++)
{ fout<<setw(10) <<a[i] << ";"<<setw(10) <<b[i] << ";"<<setw(10)<<c[i] << ";"<<setw(10)<<d[i]<<endl;
}
_getch();
}
*/