Перейти к основному содержимому

Задание №3

Описание

Составьте программу вычисления значения суммы ряда S(x)S(x) и функции Y(x)Y(x), где 0x10 \leq x \leq 1, с шагом h=0.2h=0.2. Вычисление суммы ряда Тейлора производится с погрешностью, не превышающей delta=0.000001delta=0.000001.

Результат представить в виде таблицы (без рамок), которая содержит четыре столбца со значениями x, Y(x), S(x) и N, где N - номер последнего слагаемого ряда.

Ширина столбца: 15 символов.

предупреждение

Последний столбец пробелами не заполняется!

Требуемая точность: 6 знаков после запятой

Варианты

S(x)S(x)Y(x)Y(x)
02(x+x33+...+x2n+12n+1)2(x + \cfrac{x^3}{3} + ... +\cfrac{x^{2n+1}}{2n+1})ln1+x1x\ln{\cfrac{1+x}{1-x}}, где x<1x < 1
1xx33!+...+(1)nx2n+1(2n+1)!x - \cfrac{x^3}{3!} + ... + (-1)^n\cfrac{x^{2n+1}}{(2n+1)!}sin(x)\sin(x)
21+x22!+...+x2n(2n)!1 + \cfrac{x^2}{2!} + ... + \cfrac{x^{2n}}{(2n)!}ex+ex2\cfrac{e^x+e^{-x}}{2}
31(14x)22+...+(1)n(14x)2n(2n)!1 - \cfrac{(1-4x)^2}{2} + ... + (-1)^{n}\cfrac{(1-4x)^{2n}}{(2n)!}cos(14x)\cos(1-4x)
41x22!+...+(1)nx2n(2n)!1 - \cfrac{x^2}{2!} + ... + (-1)^n\cfrac{x^{2n}}{(2n)!}cos(x)\cos(x)
51+3x2+...+2n+1n!x2n1 + 3x^2 + ... + \cfrac{2n+1}{n!}x^{2n}(1+2x2)ex2(1 + 2x^2)e^{x^2}, где x<1x < 1
61x2+x42!...+(1)nn!x2n1 - x^2 + \cfrac{x^4}{2!} - ... + \cfrac{(-1)^n}{n!}x^{2n}ex2e^{-x^{2}}
7x3x53+...+(1)nx2n+32n+1x^3 - \cfrac{x^5}{3} + ... + (-1)^n\cfrac{x^{2n+3}}{2n+1}x2arctan(x)x^2\arctan(x)
81+2x1!+...+(2x)nn!1 + \cfrac{2x}{1!} + ... + \cfrac{(2x)^n}{n!}e2xe^{2x}
91+2x2+...+n2+1n!(x2)n1 + 2 \cfrac{x}{2} + ... +\cfrac{n^2 + 1 }{n!}(\cfrac{x}{2})^n(x24+x2+1)ex2(\cfrac{x^2}{4}+\cfrac{x}{2}+1)e^{\cfrac{x}{2}}
10xx33+...+(1)nx2n+12n+1x - \cfrac{x^3}{3} + ... + (-1)^n\cfrac{x^{2n+1}}{2n+1}arctan(x)\arctan(x)
11132x2+...+(1)n2n2+1(2n)!x2n1 - \cfrac{3}{2}x^2 + ... + (-1)^n\cfrac{2n^2+1}{(2n)!}x^{2n}(1x22)cos(x)x2sin(x)(1 - \cfrac{x^2}{2})\cos(x) - \cfrac{x}{2}\sin(x)
121(2x1)22+...+(1)n(2x1)2n(2n)!1 - \cfrac{(2x-1)^2}{2} + ... + (-1)^n\cfrac{(2x-1)^{2n}}{(2n)!}cos(2x1)\cos(2x-1)

Пример вывода в консоли

x              Y(x)           S(x)           N
0.000000 1.000000 1.000000 1
0.200000 0.980067 0.980067 3
0.400000 0.921061 0.921061 4
0.600000 0.825336 0.825335 4
0.800000 0.696707 0.696707 5
1.000000 0.540302 0.540303 5
предупреждение

В первой строке выводятся названия колонок.

Указания по выполнению задания

При вычислении значения очередного члена ряда используйте значение предыдущего члена, для чего следует вручную получить соотношение вида

k(x,n)=Ai(x,n)/Ai1(x,n)k(x,n) = A_{i}(x,n) / A_{i-1}(x,n)

Вычислении членов ряда, начиная со второго (а может и с третьего) следует выполнять по формуле:

Ai=Ai1kA_{i} = A_{i-1} * k

Это упростит вычисления, повысит их точность и позволит избежать возможного переполнения разрядной сетки сумматора ПК при вычислении факториалов и степеней.

Заданная точность обеспечивается суммированием членов ряда вплоть до слагаемого, абсолютное значение которого меньше заданной погрешности.

Для представления результата в виде таблицы используйте:

  • для C использовать форматирование вывода (см. ниже);
  • для C++ манипулятор setw.

Близость значений S(x)S(x) и Y(x)Y(x) (отличие должно быть меньше или равно заданной точности) во всем диапазоне значений xx указывает на правильность их вычисления.

Представление в виде таблицы в C

Основано на ответе.

Если вам нужно ровно 40 пробелов перед строкой, вам просто нужно сделать:

printf("                                        %s\n", myStr);

Если это слишком грязно, вы можете сделать (но это будет медленнее, чем вводить 40 пробелов вручную):

printf("%40s%s", "", myStr);

Если вы хотите, чтобы строка была выровнена в столбце 40 (то есть, в ней должно быть до 39 пробелов, так что самый правый символ находится в столбце 40), то сделайте это:

printf("%40s", myStr);

Вы также можете поместить "до" 40 пробелов после строки, выполнив:

printf("%-40s", myStr);

Проверка задания

Подготовленная программа для решения задания проверяется вручную преподавателем (визуальный контроль).