ВОПРОС · Q&A

Задача: Итерационные циклы, вычисление знач. функции(ряд) с зад. точно

23 ответов 13,2 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор вопроса
Дано задание

1.jpg

Вот такая формула
3.jpg

Не могу понять где ошибка...
Думаю не правильно вычислил бета функцию...(Нигде не могу найти формулу по её точному вычислению)

C++:
#include<iostream.h>
#include<math.h>
#include<stdio.h>
void main()
{
double x,y,eps,a,beta;
int k,n;
cout<<"VVedite x=";
cin>>x;
y=pow(cos(x),3);
cout<<endl<<"Pri x="<<x<<"tochnoe znachenie y="<<y<<endl<<endl;
cout<<"Vvedite eps (conec - 0):";
cin>>eps;
while(eps!=0)
{
for (y=0, n=0, k=1, a=3*(x*x); fabs(a)>=eps&&n<1000;
y+a, n++, beta=(-9.0*(x*x))/(2*k+1)/(k+1), a*=beta, k++);
cout<<"Pri eps="<<eps<<"priblogonnoe znachenie y="<<1-y<<endl
<<"prisumirovanno"<<n<<"chlenov ryada"<<endl<<endl;
cout<<"Vvedite eps (konec - 0):";
cin>>eps;
}
cout<<"Konec programmi. Nagmite Enter.";
getchar();
}
 
То ли лыжи не едут... То ли я что-то недопонимаю... Хотя бы откуда ты взял -9.0 ? Почему ты прибавляешь везде единицу я пока вообще спрашивать не хочу...
 
А разве не надо? Просто из записей в тетради (сделанных на лекциях), Я так понял что надо...
 
Кстати, а почему у тебя eps вводится с клавиатуры несколько раз? Так должно быть?
 
Я просто не понял как бету найти

Добавлено: Ну что бы ошибку разную задовать каждый раз
так должно быть
 
бета это beta=(-9.0*(x*x))/(2*k+1)/(k+1)... Вот её я и не могу найти

точнее не понял как найти

её нужно найти из формулы как и а1
 
Я даже не понял что такое бета...
бета это beta=(-9.0*(x*x))/(2*k+1)/(k+1)...
Удивительно!

Вот её я и не могу найти
Ты же ее только что мне показал.

Добавлено: Учись задавать вопросы правильно!
 
Типа так надо вычислять твою бета-функцию:

C++:
double step(double x,int s){
unsigned long i;
double pow=1;
for (i=s;i>0;i--) pow*=x;
return pow;
}

unsigned long long factorial(int k){
unsigned long long fac=1,i;
for (i=1;i<=k;i++) fac*=i;
return fac;
}

double GetTeylor(int k,double x){
double a;

a=(k%2==0 ? 1.0 : -1.0); //Знак + или -
a*=(step(3,2*k)+3.0); // (3^2k+3)
a*=step(x,2*k); //x^2k
a=a/factorial(2*k)*1.0; // делим на (2k)!
return a;
}
 
l1pton17
Что-то ты переколдовал с функцией step ...
Вот так разве не проще:
C++:
double step(double x,int s){
double pow=1;
while ( s-- ) pow*=x;
return pow;
}
 
Не...Не то... Дано задание...

из формулы
3.jpg

Нужно вручную вычислить а1 и Вк, а потом её уже вставлять в код

вот пример
33.jpg

код
C++:
#include<iostream.h>
#include<math.h>
#include<stdio.h>
void main()
{double x,y,eps,a,beta;
int k,n;
cout<<"Введите x=";
cin>>x;
y=pow(cos(x),2);
cout<<endl<<"При x="<<x<<" точное значение y="<<y<<endl<<endl;
cout<<"Введите eps (конец - 0):";
cin>>eps;
while(eps!=0)
{ for(y=0, n=0, k=1, a=x*x; fabs(a)>=eps&&n<1000; y+=a, n++,
beta =-2*x*x/(2*k+1)/(k+1), a*= beta, k++);
cout<<"При eps="<<eps<<" приближенное значение y="<<1-y<<endl
<<" просуммировано "<<n<<" членов ряда"<<endl<<endl;
cout<<"Введите eps (конец - 0):";
cin>>eps;}
cout<<"Конец программы.Нажмите Enter.";
getchar();
}
 
Не могу понять, как вычислить формулу... От куда такое значение Вк?
000.jpg

999.jpg
 
Никакого Бета тут не надо считать ;-)) Все однозначно
C++:
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <iomanip>

using namespace std;

//Функция вычисления факториала (для справки тип long long = __int64)
long long fuct(long long Val)
{
long long Result = 1;
for (long long i = Val; i>0; i--)
Result*= i;
return Result;
}
void main(void)
{
setlocale(LC_ALL,".1251");
double esp;
double x;
cout << "Введите аргумент функции х = ";
cin >> x;
cout<<"Введите точность (ошибку исчислений) : ";
cin >> esp;
double Funct = 0.0;
double Riad = 10.0;
unsigned long k = 0;
while (abs(Riad) > esp) //Пока модуль текущего члена > точности
{
//Вариант с высокой точностью (переполнение наступает значительно позже)
//Принцип не вычислять факториал, а находить частное его членов
double k1 = pow(-1.0,(double)k) * (pow(3.0,(double)2*k)+3); 
for (unsigned long i = 2*k; i>0; i--) //Вот в этом месте
k1 /= (double)i;
Riad = k1 * pow(x,(double)2*k); //Текущий член ряда
//Это я закомментировал... Вариант нахождение с первонач. вычисление факториала, высокая вероятность переполнения
//Riad = pow(-1.0,(double)k) * ((pow(3.0, (double)2*k)+3)/fuct(2*k)) * pow(x,(double)2*k);
Funct+= 1.0/4.0 * Riad; //Наше значение функции
k++;
}
cout<< endl;
cout<< "Значение стандартной функции cos(x)^3 = " << setprecision(12) << pow(cos(x),3.0) << endl;
cout<< "Значение вычисляемого значение Funct = " << setprecision(12)<< Funct << endl;
}
 

Вложения

  • cos_3_.jpg
    cos_3_.jpg
    21,7 КБ · Просмотры: 1 110
Примерно понял... Но в универе мы почему-то в тетради вычисляли а потом вставляли... Просто я на 1-ом курсе и мне навряд ли поверят что это я сделал... Да и на примере код в принципе простой...
Просто не понял как эту б вычислить в ручную... Спасибо большое... Буду думать дальше

Добавлено:
Это просто функция B от k.

Её же вычислили из примера в ручную? Правильно?
 
А чего ты не понял? Все очень просто:
C++:
double func_a( double x )
{
// уже Кнайт объяснил как считать...
}

double func_b( double k )
{
return (func_a( k + 1 )) / func_a( k );
}
 
Просто сравнивая код Кнайта и код примера :) разница на лицо! не поверят... Для 1-ого курса слишком круто будет
 
Miller85 , для первого курса как раз само то ;-)) Это уже для 3-5ого круто ;-) Там народ математику уже забывать начинает просто ;-)
 
Извини за глупый вопрос... Почему такая разница между кодами? :what?:
 
Между какими именно ? ;-)) Тут их в теме как никогда очень много ;-)))
 
Статус
Закрыто для дальнейших ответов.