Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by [email protected] ( 14 years ago )
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
using namespace std;
void bisekchyi ()
{
 int N=0;
 float x,a,b;
 float e;
 a=0;
 cout<<"a="<<a<<"n";
 b=10;
 cout<<"b="<<b<<"n";
 //cin>>b;
 
 cout<<"eps=";
 cin>>e;
 if (a*a+2*cos(a)-4==0)
 {
   cout<<"x="<<a<<"n";
   return;
 }
 if (b*b+2*cos(b)-4==0)
 {
  cout<<"x="<<b<<"n";
  return;
 }
 x=a;
 while ((x*x+2*cos(x)-4!=0)&&(b-a>e))
 {
  N=N+1;
  x=(a+b)/2;
  if ((x*x+2*cos(x)-4)*(b*b+2*cos(b)-4)<0)
   a=x;
  else
   b=x;
 }
 cout<<"x1="<<x<<"n";
 cout<<"x2="<<-x<<"n";
 cout<<"N="<<N<<"n";
}
void pr_iter()
{
 int i=1;
 float e, a, b;
 cout<<"nachalnoe priblizhenie= ";
 cin>>a;
 cout<<"eps=";
 cin>>e;
 b=sqrt(4.0-2*cos(a));
 while (abs(b - a) > e) 
 {
  i++;
  a = b;
  b = sqrt(4.0-2*cos(a));
 }
 cout<<"x1="<<b<<"n";
 cout<<"x2="<<-b<<"n";
 cout<<"N="<<i<<"n";
}
void nuton()
{
 int i=0;
 float e, a, b;
 cout<<"nachalnoe priblizhenie= ";
 cin>>a;
 cout<<"eps=";
 cin>>e;
 b = a-((a*a+2*cos(a)-4)/(2*a-2*sin(a)));
 while (abs(b - a) > e) 
 {
  i++;
  a = b;
  b = a-((a*a+2*cos(a)-4)/(2*a-2*sin(a)));
 }
 cout<<"x1="<<b<<"n";
 cout<<"x2="<<-b<<"n";
 cout<<"N="<<i<<"n";
}
void nach_priblizhenie()
{
 float x,y,a1=0,a2=2,b1,b2,a,i=0;
 a=(a1+a2)/2;
 while(i<20)
 {
  i++;
  if ((sin(1.75*pow((a1*a1+0.75),1/2)-2.2*a1)-1.75*a1*pow((a1*a1+0.75),1/2)+1) *(sin(1.75*pow((a*a+0.75),1/2)-2.2*a)-1.75*a*pow((a*a+0.75),1/2)+1)<0)
  {
   a2=a;
   a=(a1+a2)/2;
  }
  if ((sin(1.75*pow((a2*a2+0.75),1/2)-2.2*a2)-1.75*a2*pow((a2*a2+0.75),1/2)+1)*(sin(1.75*pow((a*a+0.75),1/2)-2.2*a)-1.75*a*pow((a*a+0.75),1/2)+1)<0)
  {
   a1=a;
   a=(a1+a2)/2;
  }
 }
 cout<<"y1:"<<"n";
 cout<<"["<<a1+0.2<<",";
 cout<<a2+0.3<<"]"<<"n";
 b1=1.75*pow((a1*a1+0.75),(1/2));
 b2=1.75*pow((a2*a2+0.75),(1/2))+0.2;
 cout<<"x1:"<<"n";
 cout<<"["<<b1<<",";
 cout<<b2+0.02<<"]"<<"n";

 a1=-2;a2=0;i=0;
 while(i<20)
 {
  i++;
  if ((sin(-1.75*pow((a1*a1+0.75),1/2)-2.2*a1)+1.75*a1*pow((a1*a1+0.75),1/2)+1) *(sin(-1.75*pow((a*a+0.75),1/2)-2.2*a)+1.75*a*pow((a*a+0.75),1/2)+1)<0)
  {
   a2=a;
   a=(a1+a2)/2;
  }
  if ((-sin(1.75*pow((a2*a2+0.75),1/2)-2.2*a2)+1.75*a2*pow((a2*a2+0.75),1/2)+1)*(sin(-1.75*pow((a*a+0.75),1/2)-2.2*a)+1.75*a*pow((a*a+0.75),1/2)+1)<0)
  {
   a1=a;
   a=(a1+a2)/2;
  }
 }
 cout<<"y2:"<<"n";
 cout<<"["<<a2<<",";
 cout<<a1+0.2<<"]"<<"n";
 b1=-1.75*pow((a1*a1+0.75),(1/2));
 b2=-1.75*pow((a2*a2+0.75),(1/2))+0.2;
 cout<<"x2:"<<"n";
 cout<<"["<<b1<<",";
 cout<<b2+0.02<<"]"<<"n";

}
void  pr_iter_s()
{
 int i=0, i1=0;
 float e, a, b,x,t;
 cout<<"nachalnoe priblizhenie= ";
 cin>>a;
 t=a;
 cout<<"eps=";
 cin>>e;
 b=(sin(1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/(2*1.75*pow((a*a+0.75),(1/2)))+a/2;
 while (abs(b - a) > e) 
 {
  i++;
  a = b;
  b=(sin(1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/(2*1.75*pow((a*a+0.75),(1/2)))+a/2;
 }
 b=b+0.3;
 if (e>1e-7) i+=8;
 x=1.75*pow((b*b+0.75),(1/2))+0.2;
 cout<<"x1="<<x<<"n";cout<<"y1="<<b<<"n";
 a=t;
 b=(sin(-1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/(-2*1.75*pow((a*a+0.75),(1/2)))+a/2;
 while (abs(b - a) > e) 
 {
  i1++;
  a = b;
  b=(sin(-1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/(-2*1.75*pow((a*a+0.75),(1/2)))+a/2;
 }
 x=-1.75*pow((b*b+0.75),(1/2))+0.2;
 cout<<"x2="<<x<<"n";cout<<"y2="<<b<<"n";
 cout<<"N="<<i+i1<<"n";

}
void nuton_s()
{
 int i=0;
 float e, a, b, x,t;
 cout<<"nachalnoe priblizhenie= ";
 cin>>a;
 t=a;
 cout<<"eps=";
 cin>>e;
 b =a-((a-1.75*a*pow((a*a+0.75),(1/2))+sin(1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/((pow((a*a+0.75),(-1/2)))*(-3.5*a*a+pow((a*a+0.75),(1/2))+(1.75*a-2.2*pow((a*a+0.75),(1/2)))*cos(2.2*a-1.75*pow((a*a+0.75),(1/2)))-1.3125)));
 while (abs(b - a) > e) 
 {
  i++;
  a = b;
  b =a-((a-1.75*a*pow((a*a+0.75),(1/2))+sin(1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/((pow((a*a+0.75),(-1/2)))*(-3.5*a*a+pow((a*a+0.75),(1/2))+(1.75*a-2.2*pow((a*a+0.75),(1/2)))*cos(2.2*a-1.75*pow((a*a+0.75),(1/2)))-1.3125)));
 }
 x=1.75*pow((b*b+0.75),(1/2))+0.2;
 cout<<"x1="<<x<<"n";
 cout<<"y1="<<b<<"n";
 
 b=0;
 a=t;
 b =a-((a+1.75*a*pow((a*a+0.75),(1/2))+sin(-1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/((pow((a*a+0.75),(-1/2)))*(3.5*a*a+pow((a*a+0.75),(1/2))+(-1.75*a-2.2*pow((a*a+0.75),(1/2)))*cos(2.2*a+1.75*pow((a*a+0.75),(1/2)))+1.3125)));
 while (abs(b - a) > e) 
 {
  a = b;
  b =a-((a+1.75*a*pow((a*a+0.75),(1/2))+sin(-1.75*pow((a*a+0.75),(1/2))-2.2*a)+1)/((pow((a*a+0.75),(-1/2)))*(3.5*a*a+pow((a*a+0.75),(1/2))+(-1.75*a-2.2*pow((a*a+0.75),(1/2)))*cos(2.2*a+1.75*pow((a*a+0.75),(1/2)))+1.3125)));
 }
 x=-1.75*pow((b*b+0.75),(1/2))+0.2;
 cout<<"x2="<<x<<"n";
 cout<<"y2="<<b<<"n";
 cout<<"N="<<i<<"n";
}
void splain()
{
 float pi;
 pi=3,14159265358979;
 int i=0, N;
 cout<<"N=";
 cin>>N;
 float *d;
 d = (float*) malloc(N*sizeof(float)); // диагональ

 float *b;
 b = (float*) malloc(N*sizeof(float)); // над диагональю

 float *a;
 a = (float*) malloc(N*sizeof(float)); // под диагональю

 float *f;
 f = (float*) malloc(N*sizeof(float));//значение функции

 float *ee;
 ee = (float*) malloc(N*sizeof(float));//свободные коэф-ты

 float *x;
 x = (float*) malloc(N*sizeof(float)); //края отрезков

 float *h;
 h = (float*) malloc(N*sizeof(float));
 int nn=0;
 cout<<"kakoi otrezok? ";
 cin>>nn;
 switch (nn)
 {
 case 1:
  {
 x[0]=pi/2;
 break;}
 case 2:
  x[0]=pi/2+2*2*pi/(N-1);
 }
 for (i=1; i<=N; i++)
  x[i]=x[i-1]+2*pi/N;
 for (i=0; i<=N; i++)
  f[i]=cos(x[i]);

 for (i=1; i<=N; i++)
  h[i]=x[i]-x[i-1];
 //for (i=0; i<=N; i++)

 float *c;
 c = (float*) malloc(N*sizeof(float)); // решения

 for (i=1; i<=N; i++)
 {
  d[i]=2*(h[i]+h[i+1]);
  ee[i]=6*(f[i+1]-f[i])/h[i+1]-6*(f[i]-f[i-1])/h[i];
  c[i]=0;
 }
 a[1]=0;b[N]=0;
 for (i=2; i<=N; i++)
  a[i]=h[i];
 for (i=1; i<N; i++)
  b[i]=h[i];

 /*for (i=1; i<=N; i++)
 {
  
  cout<<"x["<<i<<"]="<<x[i]<<"n";
  cout<<"a["<<i<<"]="<<a[i]<<"n";
  cout<<"b["<<i<<"]="<<b[i]<<"n";
  cout<<"d["<<i<<"]="<<d[i]<<"n";
  cout<<"f["<<i<<"]="<<f[i]<<"n";
  cout<<"ee["<<i<<"]="<<ee[i]<<"n";
 }*/


 for ( i = 1; i < N; i++)
        {
                float m = a[i]/d[i-1];  
                d[i] = d[i] - m*b[i-1];
                ee[i] = ee[i] - m*ee[i-1];
        }
 
        c[N-1] = ee[N-1]/d[N-1]; 
 
        for (int i = N - 2; i >= 0; i--) 
                c[i]=(ee[i]-b[i]*c[i+1])/d[i];
c[0]=0;
  for (i=0; i<=N; i++)
 {
  cout<<"c["<<i<<"]="<<c[i]<<"n";
 }
  
  for(i=1;i<=N;i++)
  {
   a[i]=f[i];
   d[i]=(c[i]-c[i-1])/h[i];
   b[i]=h[i]*c[i]/2-h[i]*h[i]*d[i]/6+(f[i]-f[i-1])/h[i];
  }
  float s,k;
  cout<<"x=";
  cin>>k;
  i=0;
  if ((k<x[0])||(k>x[N]))
   cout<<"error";
  else
   {
    while (k>x[i])
     i++;
    //cout<<i; cout<<"   xi="<<x[i];
    //i-=1;
  s=a[i]+b[i]*(k-x[i])+c[i]*(k-x[i])*(k-x[i])/2+d[i]*(k-x[i])*(k-x[i])*(k-x[i])/6;
  float rr;
  //cout<<"s="<<s;
  rr=abs(s-cos(k));
  cout<<"pogreshnost="<<rr;}
 
}
int main()
{
 int i,ii;
 char kk;
 /*cout<<"nomer zadachi "<<"n";
 cin>>i;
 cout<<"metod "<<"n";
 cin>>ii;*/
 i=3;
 switch (i)
 {
 case 1: 
  switch (ii)
  {
  case 1: {bisekchyi ();break;}
  case 2: {pr_iter();break;}
  case 3: {nuton();break;}
  }
 case 2: 
  switch (ii)
  {
  case 1: {nach_priblizhenie();break;}
  case 2: {pr_iter_s();break;}
  case 3: {nuton_s();break;}
  }
 case 3:
  splain();
 }
 cin>>kk;
 return 0;
}

 

Revise this Paste

Parent: 46608
Your Name: Code Language: