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

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

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. Miller85

    Miller85 Гость

    Дано задание

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

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

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

    Код (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.339
    Симпатии:
    0
    То ли лыжи не едут... То ли я что-то недопонимаю... Хотя бы откуда ты взял -9.0 ? Почему ты прибавляешь везде единицу я пока вообще спрашивать не хочу...
     
  3. Miller85

    Miller85 Гость

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

    lazybiz Well-Known Member
    C\C++ Team

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

    Miller85 Гость

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

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

    lazybiz Well-Known Member
    C\C++ Team

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

    Miller85 Гость

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

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

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

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

    код
    Код (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 Гость

    Не могу понять, как вычислить формулу... От куда такое значение Вк?
    Задача: Итерационные циклы, вычисление знач. функции(ряд) с зад. точно

    Задача: Итерационные циклы, вычисление знач. функции(ряд) с зад. точно
     
  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
      Размер файла:
      38,1 КБ
      Просмотров:
      9
  14. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

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

    Miller85 Гость

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

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    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. School_Information

    Решите Задача

    Ответов:
    2
    Просмотров:
    147
  2. KhNarg
    Ответов:
    2
    Просмотров:
    211
  3. Янчик
    Ответов:
    0
    Просмотров:
    630
  4. TrishaRay
    Ответов:
    1
    Просмотров:
    887
  5. elzim
    Ответов:
    0
    Просмотров:
    1.026
Статус темы:
Закрыта.

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