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

Тема в разделе "C/C++/C#", создана пользователем Miller85, 2 дек 2010.

Статус темы:
Закрыта.
  1. Miller85

    Miller85 Гость

    Дано задание

    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();
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    То ли лыжи не едут... То ли я что-то недопонимаю... Хотя бы откуда ты взял -9.0 ? Почему ты прибавляешь везде единицу я пока вообще спрашивать не хочу...
     
  3. Miller85

    Miller85 Гость

    А разве не надо? Просто из записей в тетради (сделанных на лекциях), Я так понял что надо...
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Кстати, а почему у тебя eps вводится с клавиатуры несколько раз? Так должно быть?
     
  5. Miller85

    Miller85 Гость

    Я просто не понял как бету найти

    Добавлено: Ну что бы ошибку разную задовать каждый раз
    так должно быть
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Я даже не понял что такое бета...
     
  7. Miller85

    Miller85 Гость

    бета это beta=(-9.0*(x*x))/(2*k+1)/(k+1)... Вот её я и не могу найти

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

    её нужно найти из формулы как и а1
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Удивительно!

    Ты же ее только что мне показал.

    Добавлено: Учись задавать вопросы правильно!
     
  9. BashOrgRu

    BashOrgRu Well-Known Member

    Регистрация:
    15 мар 2009
    Сообщения:
    78
    Симпатии:
    0
    Типа так надо вычислять твою бета-функцию:

    Код (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;
    }
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    l1pton17
    Что-то ты переколдовал с функцией step ...
    Вот так разве не проще:
    Код (C++):
    double step(double x,int s){
    double pow=1;
    while ( s-- ) pow*=x;
    return pow;
    }
     
  11. Miller85

    Miller85 Гость

    Не...Не то... Дано задание...

    из формулы
    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();
    }
     
  12. Miller85

    Miller85 Гость

    Не могу понять, как вычислить формулу... От куда такое значение Вк?
    000.jpg

    999.jpg
     
  13. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Никакого Бета тут не надо считать ;-)) Все однозначно
    Код (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
      Размер файла:
      38,1 КБ
      Просмотров:
      9
  14. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Это просто функция B от k.
     
  15. Miller85

    Miller85 Гость

    Примерно понял... Но в универе мы почему-то в тетради вычисляли а потом вставляли... Просто я на 1-ом курсе и мне навряд ли поверят что это я сделал... Да и на примере код в принципе простой...
    Просто не понял как эту б вычислить в ручную... Спасибо большое... Буду думать дальше

    Добавлено:
    Её же вычислили из примера в ручную? Правильно?
     
  16. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    А чего ты не понял? Все очень просто:
    Код (C++):
    double func_a( double x )
    {
    // уже Кнайт объяснил как считать...
    }

    double func_b( double k )
    {
    return (func_a( k + 1 )) / func_a( k );
    }
     
  17. Miller85

    Miller85 Гость

    Просто сравнивая код Кнайта и код примера :) разница на лицо! не поверят... Для 1-ого курса слишком круто будет
     
  18. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Miller85 , для первого курса как раз само то ;-)) Это уже для 3-5ого круто ;-) Там народ математику уже забывать начинает просто ;-)
     
  19. Miller85

    Miller85 Гость

    Извини за глупый вопрос... Почему такая разница между кодами? :what?:
     
  20. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Между какими именно ? ;-)) Тут их в теме как никогда очень много ;-)))
     
Загрузка...
Похожие Темы - Задача Итерационные циклы
  1. Янчик
    Ответов:
    0
    Просмотров:
    490
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    783
  3. elzim
    Ответов:
    0
    Просмотров:
    932
  4. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.128
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
Статус темы:
Закрыта.

Поделиться этой страницей