c# ряд тейлора, лабораторная
не могу изменить часть кода под свое задание, так как не понимаю что от меня требуется. Помогите изменить выделенную часть под задание.
Само задание -
Вычислить значение функции, заданной с помощью ряда Тейлора с точность eps (задается пользователем). По итогам вычисления вывести на экран:
- значение аргумента, для которого выполнялось вычисление;
- значение функции;
- точность (eps);
- количество просуммированных членов ряда.
Используя условие лабораторной задачи № 2 реализовать измененный алгоритм со следующими особенностями:
- Дополнительно у пользователя спрашивается xнач и xкон и шаг dx (шаг изменения);
- В тексте программы происходит вычисление для всех указанных значений x и результаты вычислений выводится в формате таблицы.
Мой код:
using System;
namespace TaylorSequence
{
class Program
{
static void Main(string[] args)
{
try
{
// Ввод данных пользователя
double x_start, x_end, eps, dx;
Console.Write("Введите начальное значение x, при x > 1: ");
x_start = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите конечное значение x, при x > 1: ");
x_end = Convert.ToDouble(Console.ReadLine());
if (x_start > 1 && x_end > 1)
{
Console.Write("Введите точность: ");
eps = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите шаг: ");
dx = Convert.ToDouble(Console.ReadLine());
// Вывод введённых данных пользователю
Console.WriteLine("\nНачальное значение х: {0}\n" +
"Конечное значение х: {1}\n" +
"Точность (eps): {2}\n" +
"Шаг (dx): {3}\n" +
"\nВыходные данные: \n" +
"_________________________", x_start, x_end, eps, dx);
// Основной алгоритм. Вычисление приблизительного значения и значения функции.
//ОТСЮДА
//НУЖНО
//ИЗМЕНИТЬ
while (x_start < x_end)
{
double function = 0, n = 1;
int count = 0;
while (Math.Abs((Math.Pow(-1, n) * Math.Pow(x_start, n))) > eps)
{
function += (Math.Pow(-1, n) * Math.Pow(x_start, n)) / n;
n++;
count++;
}
//И
//ДО
//СЮДА
// Вывод выходных данных
Console.WriteLine("\nx: {0}\n" +
"f(x): {1}\n" +
"Количество членов ряда: {2}\n" +
"_________________________", x_start, function, count);
x_start += dx;
}
}
else Console.WriteLine("Аргумент x должен быть в интервале x > 1");
}
// Проверка на ввод
catch (FormatException)
{
Console.WriteLine("Вы ничего не ввели или ввели не число!");
}
}
}
}
Ответы (1 шт):
Как я понял, вам нужно получать значение ряда Тейлора с точность до eps в точке x_start изменяя его на dx.
То есть в самом цикле while(x_start <= x_end) нужно выводить 4 пункта, которые у вас в начале вопроса написаны.
Для этого лучше вынести вычисление значения в точке x_start в отдельную функцию, а через ссылку передавать кол-во членов ряда.
Например так:
static double getValueTaylor(double x, double eps, ref int count)
{
double function = Math.PI / 2, n = 1, slag = 0;
count = 0;
do
{
count++;
slag = Math.Pow(-1, count % 2) / (Math.Pow(x, n) * n);
function += slag;
n += 2;
} while (Math.Abs(slag) > eps) ;
return function;
}
Немного переделал вычисление значения т.к. у вас было много в чем ошибки, надеюсь код понятен.
В самой функции main:
int count = 0;
double function = 0;
while (x_start <= x_end)
{
function = getValueTaylor(x_start, eps, ref count);
// Вывод выходных данных
Console.WriteLine("\nx: {0}\n" +
"f(x): {1}\n" +
"eps: {2}\n" +
"Количество членов ряда: {3}\n" +
"_________________________",
x_start, function, eps, count);
x_start += dx;
}
