Написать программу, которая вычисляет сумму ряда с помощью FPU. Программа должна состоять из трех связанных частей: ввод аргументов x, n и ε (на языке высокого уровня); обработка аргументов, получение результата и передача его в главную программу (полностью на ассемблере); вывод результата суммирования и соответствующего значения исходной функции (на языке высокого уровня). Внимание! Алгоритм решения задачи должен быть максимально рациональным! Теоретические сведения Действительная функция f(x) называется аналитической в точке , если в некоторой окрестности x-< R этой точки функция разлагается в степенной ряд (ряд Тейлора): f ( ) f ( n ) ( ) f ( x ) f ( ) f ( )( x ) ( x ) 2 ... ( x ) n ... (1) 2! n! При =0 получаем ряд Маклорена: f (0) f ( n ) (0) f ( x ) f (0) f (0)( x ) ( x ) 2 ... ( x ) n ... (2) 2! n! Разность n f ( k ) ( ) (3) Rn ( x) f ( x) (x )k k ! k 0 называется остаточным членом и представляет собой ошибку при замене функции f(x) полиномом Тейлора. Для ряда Маклорена f ( n 1) ( x ) n 1 Rn ( x ) x где 0<<1. (4) (n 1)! Таким образом, вычисление значения функции можно свести к вычислению суммы числового ряда а1+а2+ . . . +an+ . . . . (5) Известно, что числовой ряд называется сходящимся, если существует предел последовательности его частных сумм: lim S n , (6) S n где Sn = а1+а2+ . . . +an+ . . . . Число S называется суммой ряда. Из формулы (3) получаем S = Sn + Rn , где Rn – остаток ряда, причём R0 при n. Для нахождения суммы S сходящегося ряда (5) с заданной точностью нужно выбрать число слагаемых n столь большим, чтобы имело место неравенство Rn< . Тогда частная сумма Sn приближённо может быть принята за точную сумму S ряда (5). Приближённо n выбрать так, чтобы имело место неравенство Sn+1 – Sn < или an < . Задача сводится к замене функции степенным рядом и нахождению суммы некоторого количества слагаемых S an ( x, n) при различных параметрах суммирования. Каждое слагаемое суммы зависит от параметра х и номера n, определяющего место этого слагаемого в сумме. Обычно формула общего члена суммы принадлежит одному из следующих трёх типов: xn x 2 n 1 x 2n n а) ; ; ; ( 1) n! (2n 1)! (2n)! cos( nx ) sin( 2n 1) x ; ; n 2n 1 б) cos( 2nx ) ; 4n 2 1 n2 1 x n x 4 n 1 cos(nx ) ( ) . ; ( 1) n ; n2 n! 2 4n 1 В случае а) для вычисления члена суммы аn целесообразно использовать рекуррентные соотношения, т. е. выражать последующий член суммы через предыдущий: an+1 = an × (x, n). Это позволит существенно сократить объем вычислительной работы. Кроме того, вычисление члена суммы по общей формуле в ряде случаев невозможно (например, из-за наличия n!). В случае б) применение рекуррентных соотношений нецелесообразно. Вычисления будут наиболее эффективными, если каждый член суммы вычислять по общей формуле an = (x, n). В случае в) член суммы целесообразно представить в виде двух сомножителей, один из которых вычисляется по рекуррентному соотношению, а другой непосредственно an = (x, n) × сn(x, n), где сn(x, n) = cn–1(x, n) × (x, n). в) Постановка задачи: Для заданного значения х (вводится с клавиатуры), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях: а) для заданного n (n вводится с клавиатуры); б) для заданной точности (вводится с клавиатуры). Для сравнения найти точное значение функции с помощью программы на языке C. Варианты функций № 1 2 Функция y 3X S 1 y ln 2 sin x 2 3 y sin X 4 y XarctgX y ex 6 ye x cos 4 7 y cos x S cos 2 x cos nx ..... 2 n x3 x 2 n1 ....( 1) n 3! (2n 1)! x2 x4 x 2n ...( 1) n1 2 12 2n(2n 1) S 1 cos( x sin 4 ) ln 3 ln 2 3 2 ln n 3 n x x .... x 1! 2! n! S cos x S x ln 1 x 2 5 Разложение в ряд S 1 S 1 x x2 xn ..... 1! 2! n! cos 1! 4 x .... cos n 4 n! x2 x 2n ....( 1) n 2! (2n)! xn № Функция x sin 4 8 y 9 y 1 2 x cos 4 x 2 1 1 x ln 4 1 x Разложение в ряд S x sin S x 1 arctgX 2 10 y e cos x cos(sin x) 11 y (1 2 x 2 )e x 12 1 y ln(1 2 2 x cos 2 3 1 ln x 2 y 14 1 2 2 y (x ) 4 3 16 y y 2 8 S S 1 x2 x arctgX 2 2 4 x 4 x 2 sin 2 4 x cos 3 1 x 2 cos 2 2 S cos x 1 sin x 2 4 S 19 y e2x 20 x x2 x y ( 1)e 2 4 2 23 cos 2 x cos 4 x cos 2nx .... 2 3 15 4n 1 S 1 x2 ) cos x 2 2x (2 x ) n ..... 1! n! x n2 1 x n S 1 2 .... ( ) 2 n! 2 S x x3 x 2 n 1 ....( 1) n 3 2n 1 S 1 3 2 2n 2 1 2 n x .....( 1) n x 2 (2n)! x sin x 2 y 2(cos2 x 1) 3 n cos 3x cos(2n 1) x ... 2 3 (2n 1) 2 y y (1 .... x3 x5 x 2 n 1 .....( 1) n 1 2 3 15 4n 1 18 22 3 x n cos n cos 2 x cos nx .... ( 1) n 2 2 n2 x2 x 2n S 1 .... 2! (2n)! y arctgX 4 x 1 1 x 1 3 1 x 1 2 n 1 ( ) ..... ( ) x 1 3 x 1 2n 1 x 1 ex ex 2 21 2n 1 2 n x n! y 17 .... x n sin n cos x cos nx .... 1! n! S cos x S x5 x 4 n 1 ..... 5 4n 1 S 1 3x 2 ..... x2 ) 13 15 S 1 S (2 x ) 2 (2 x ) 4 (2 x ) 2 n ....( 1) n 2 24 (2n)! № 24 25 26 Функция y ln( y 1 ) 2 2x x2 e x e x 2 ye x cos 4 y cos x 28 y 29 y S x S 1 S 1 x sin 4 1 2 x cos 4 x 2 1 1 x ln 4 1 x 1 arctgX 2 30 S (1 x) 2 cos( x sin 4 ) 27 Разложение в ряд y e cos x cos(sin x) (1 x) 4 (1 x) 2 n ....( 1) n 2 n x3 x 2 n1 .... 3! (2n 1)! cos 1! 4 x .... cos n 4 n! xn x2 x 2n ....( 1) n 2! (2n)! S x sin 4 x 2 sin 2 4 .... x n sin n 4 x5 x 4 n 1 S x ..... 5 4n 1 S 1 cos x cos nx .... 1! n! Полное стандартное решение задачи (оба случая – а и б!), включая проверку выведенных результатов (путем сравнения с исходной функцией), оценивается в 10 баллов. Без защиты очной защиты, т.е. только загрузка работы в LMS, максимальная оценка 6 баллов. Решение только для случая а (заданное число циклов) – 5 балла. В LMS загружаются текст программы и пояснительная записка, составленная в свободной форме и содержащая снимки экрана работающей программы и пояснения к реализации. Можно получить дополнительные баллы за следующие улучшения программы: за рациональное использование стековой памяти (формальный признак – обращение к регистрам ST с «большими» номерами); в ходе вычислений нужно использовать только две переменные: значение x, введённое пользователем, и результат вычисления – значение S; все используемые константы, результаты промежуточных вычислений нужно размещать в стеке FPU; за корректную обработку ошибок вычислений – попытка взять логарифм или извлечь корень из отрицательного числа, в крайнем случае, деления на ноль; продемонстрировать работу защиты – лучше путем ввода некорректных значений данных, но допустимо для создания «аварийной ситуации» внесение небольших изменений в программу. Дополнительные баллы назначаются по усмотрению преподавателя.