K
krank
Постановка задачи
Для х, изменяющегося от a до b (интервал [a ; b] целиком лежит внутри интервала, указанного в третьей колонке) с шагом , вычислить функцию y=f(x), используя ее разложение в степенной ряд (вторая колонка) в двух случаях:
а) для заданного количества слагаемых N (величина зависит от свойств степенного ряда, примерное значение N указано в четвёртой колонке);
б) для заданной точности э (близкое к нулю положительное число, например, 0.1, 0.01, 0.001, 0.0001).
я попытался что-то сделать но увы не получилось вот :
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
cout <<setlocale(0, "Russian");
cout<<"66666"<<endl;
cout<<endl;
double a, b, eps, x, h,Z;
int N; //число слагаемых
do
{
cout<<"Введите начальное значение уравнения A: ";
cin>>a;
cout<<"Введите конечное значение уравнения B: ";
cin>>b;
}while(a>=:mellow:;
h=(b-a)/10; //вычисление шага
cout<<"Eps от 0.0001 до 0.1"<<endl;
do
{
cout<<"Введите eps: ";
cin>>eps;
}while(eps>0.10000 || eps<0.00010000); //0.0001 < eps < 0.1
do
{
cout<<"Введите кол-во слагаемых N: ";
cin>>N;
}while(N<1);
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"x";
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"Sn";
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"Se";
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"S"<<endl;
for (x=a; x<=b; x+=h)
{
double Sn=1;
double a=1;
double h=1;
double log3=log(3);
for (int i=1; i<=N; i++)
{
a=a*(Log3*x)/h;
Sn=Sn+a;
h=h+1;
}
double Se=1;
double a=1;
double h=1;
double log3=log(3);
for (int i=1; i<=N; i++)
{
a=a*(Log3*x)/h;
Se=Se+a;
h=h+1;
}
}while (fabs(a)>eps);
Se*=2;
double S= 3*x;
cout<<setw(20)<<setprecision(6)<<setiosflags(ios::fixed)<<x;
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<Sn;
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<Se;
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<S<<endl;
}
system("pause");
return 0;
}
Для х, изменяющегося от a до b (интервал [a ; b] целиком лежит внутри интервала, указанного в третьей колонке) с шагом , вычислить функцию y=f(x), используя ее разложение в степенной ряд (вторая колонка) в двух случаях:
а) для заданного количества слагаемых N (величина зависит от свойств степенного ряда, примерное значение N указано в четвёртой колонке);
б) для заданной точности э (близкое к нулю положительное число, например, 0.1, 0.01, 0.001, 0.0001).
я попытался что-то сделать но увы не получилось вот :
#include <iostream>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
cout <<setlocale(0, "Russian");
cout<<"66666"<<endl;
cout<<endl;
double a, b, eps, x, h,Z;
int N; //число слагаемых
do
{
cout<<"Введите начальное значение уравнения A: ";
cin>>a;
cout<<"Введите конечное значение уравнения B: ";
cin>>b;
}while(a>=:mellow:;
h=(b-a)/10; //вычисление шага
cout<<"Eps от 0.0001 до 0.1"<<endl;
do
{
cout<<"Введите eps: ";
cin>>eps;
}while(eps>0.10000 || eps<0.00010000); //0.0001 < eps < 0.1
do
{
cout<<"Введите кол-во слагаемых N: ";
cin>>N;
}while(N<1);
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"x";
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"Sn";
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"Se";
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<"S"<<endl;
for (x=a; x<=b; x+=h)
{
double Sn=1;
double a=1;
double h=1;
double log3=log(3);
for (int i=1; i<=N; i++)
{
a=a*(Log3*x)/h;
Sn=Sn+a;
h=h+1;
}
double Se=1;
double a=1;
double h=1;
double log3=log(3);
for (int i=1; i<=N; i++)
{
a=a*(Log3*x)/h;
Se=Se+a;
h=h+1;
}
}while (fabs(a)>eps);
Se*=2;
double S= 3*x;
cout<<setw(20)<<setprecision(6)<<setiosflags(ios::fixed)<<x;
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<Sn;
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<Se;
cout<<setw(10)<<setprecision(6)<<setiosflags(ios::fixed)<<S<<endl;
}
system("pause");
return 0;
}