Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 13.02.2012, 21:48   #1
KingMaks
Знающий
 
Аватар для KingMaks
 
Регистрация: 26.11.2009
Сообщений: 313
Написано 35 полезных сообщений
(для 95 пользователей)
tg(x) в ряд Тейлора

Нужно найти tg(x) с помощью разложения в ряд Тейлора с заданной точностью
Факториал работает правильно, числа Бернули тоже, вот только окончательный результат не сходиться:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lab5
{
    class Program
    {
        static void Main(string[] args)
        {
            double otv1 = 0.0;

                //Ввод числа x
            Console.Write("Введите число x < Pi/2: ");
            double x = System.Convert.ToDouble(Console.ReadLine());
            if (x >= Math.PI / 2) { Console.WriteLine("Вы ввели некорректное число x!"); }

            Console.WriteLine("Расчет  tg(x) с заданным числом повторений: ");

                //Ввод числа n
            Console.Write("Введите число n > 0: ");
            int n = int.Parse(Console.ReadLine());

                //Расчет  tg(x) с заданным числом повторений
            for (int i = 1; i <= n; i++)
            {
                otv1 = otv1 + ((getBern(n))*Math.Pow(4, i) * (Math.Pow(4, i)-1) * (Math.Pow(x,(2*n)-1)))/fact(2*n);
                Console.WriteLine(otv1);
            }

            Console.ReadLine();

        }

            //Числа Бернули
        static double getBern(int n)
        {
            double bern;

            if (n == 0)
            {
                bern = 1.0;
            }
            else
            {
                bern = 0.0;
                for (int k = 1; k <= n;k++ )
                {
                    bern +=(-1)/System.Convert.ToDouble(n+1)*fact(n+1)/(fact(k+1)*fact(n-k))*getBern(n-k);
                }
            }
            return bern;
        }

            //Факториал
        static double fact(int k)
        {
            if (k == 0)
            {
                return 1;
            }
            else
            {
                return k * fact(k - 1);
            }
        }
    }
}
в чем может быть проблема?
__________________
StimuL
Maks
(Offline)
 
Ответить с цитированием
Старый 14.02.2012, 10:45   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: tg(x) в ряд Тейлора

Ты там со знаками напутал похоже... Руководствуясь формулой:

otv1 otv1 + ((getBern(2*n))*Math.Pow(-4i) * (Math.Pow(4i)) * (Math.Pow(x,(2*n)-1)))/fact(2*n); 
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KingMaks (14.02.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:55.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com