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