C#

Нужна помощь с задачей C#

Вычислить и вывести на экран в виде таблицы значения функции, заданной с
использованием ряда Тейлора, на интервале от х нач до х кон с шагом дх с точностью е. Таблицу снабдить
заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение
функции и количество просуммированных членов ряда.


Само задание я понимаю, но вот как записать этот пример я не знаю, язык С#

Математический пример приложил ниже.

static void Main(string[] args)
{
Console.WriteLine("Enter xn: ");
double xn = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter xk: ");
double xk = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Enter h: ");
double h = Convert.ToDouble(Console.ReadLine());

double e = 0.0000000001;
double c = 0,y=0;
for (double i = xn; i < xk; i += h)
{
/// тут должен быть мат пример и то условие с
///|x|<1
Console.WriteLine($"Сумма ряда === ");
}
}



Этот ряд действительно вычисляет арксинус х∈(-1;1), вот как это можно проверить:
using System;
namespace New_Project
{ class Program
{ public static double q;
public static double asin(double x)
{ double xx=x*x, s=1, p=1, ε=1e303;
q = 0; while (ε > 1e-17)
{ q += 2.0; p *= xx*(1.0-1.0/q);
ε=p/(q+1.0); s += ε; } return s * x; }
public static void Main()
{ double x, xbeg, xend, dx, arcs; int i, n;
Console.Write("xbeg xend dx: ");
var line = Console.ReadLine().Split(" ");
xbeg = double.Parse(line[0]);
xend = double.Parse(line[1]);
dx = double.Parse(line[2]);
n = (int)((xend - xbeg) / dx);
for (i = 0; i <= n; i++)
{ x = xbeg + i * dx; arcs = asin(x);
Console.WriteLine
("{0,15:f12}{1,20:f15}{2,15:e5}{3,12:f0}",
x, arcs, Math.Asin(x)-arcs, q / 2); } } } }Только с точностями e тут возиться нет никакого смысла, потому что в итоге фактическая точность всё равно не совпадает с вводимой, особенно при |x|→1. Вот пример:Прекрасно видно, что сходимость ряда в этом случае далека от машинной точности для восьмибайтных чисел типа double, которая у меня в функции сделана как 1e-17. Это потому что при х→±1 разложение в ряд вычисляет арксинус очень медленно (в нижней таблице в правой колонке указаны миллиарды слагаемых !), да и не точно. И использование вещественного типа decimal эту картину ничуть не улучшит...
Олег Шабанов
Олег Шабанов
66 572
Лучший ответ
Виктор Боганец Можете пожалуйста написать этот ряд кодом
Виктор Боганец Бесконечно заедает на этом цикле
while (ε > 1e-17)
{
q += 2.0; p *= xx * (1.0 - 1.0 / q);
ε = p / (q + 1.0); s += ε;
}
Виктор Боганец Проблему с бесконечным циклом исправил, только вопрос это решение этого задания, или просто проверка?
Виктор Боганец Также там не |x|--->1, а |x|<1
Виктор Боганец А главный вопрос, это вообще тот пример, ибо я тут немного запутался
Олег Шабанов И смотрим, что получается:Видно же, что фактическая точность местами хуже чем требуемая. Контроль точности тут вообще трудно осуществить, если только в функцию вычисления арксинуса не загнать его "истинное" значение, получаемое при помощи модуля Math, что само по себе довольно странно...