Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / 2

.cpp
Скачиваний:
14
Добавлен:
11.06.2015
Размер:
9.67 Кб
Скачать

#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();

	}
*/
Соседние файлы в папке лабы