Ю 3.30

Фесенко Катерина Володимирівна
Фесенко Катерина Володимирівна

Latest posts by Фесенко Катерина Володимирівна (see all)

Задача 

 Численно убедится в справедливости равенства для заданного значения аргумента [latex]x[/latex] на заданное значение погрешности [latex]\varepsilon[/latex]. Вывести число итераций.

[latex]sinx=[/latex][latex] x-\frac{x^3}{3!}+[/latex][latex]\frac{x^5}{5!}[/latex][latex]-\dots+[/latex][latex](-1)^{n-1}[/latex][latex]\frac{x^{2n-1}}{(2n-1)!}[/latex]

Тест

[latex]x[/latex] Delta Результат(wolframalpha)
0 0 0.001 0
3.14 [latex]\pi[/latex] 0.0001 0.00161324
1.57 [latex]\pi/2[/latex] 0.00001 1
1.05 [latex]\pi/3[/latex] 0.0001 0.86602
2.06 [latex]2\pi/3[/latex] 0.0001 0.869296
Ссылка на программу: http://ideone.com/ykdWnD

Решение

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

 

Ю3.36

Задача

Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]\varepsilon[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex] (слагаемых или сомножителей), необходимых для достижения заданной точности.

[latex]\frac { { e }^{ x }+{ e }^{ -x } }{ 2 } =1+\frac { { x }^{ 2 } }{ 2! } +\frac { { x }^{ 4 } }{ 4! } +\cdots+\frac { { x }^{ 2n } }{ (2n)! } +\cdots[/latex]

Тесты

   x [latex]\varepsilon[/latex] Левая часть Правая часть    n Разность Комментарий
3 0.00005 10.0676619958  10.0676598764 8 0.0000021194 Пройден
 11.33  0.0000314 41641.5114284855 41641.5114045419 19 0.0000239436 Пройден
 6 0 Погрешность равна 0, тогда правая часть стремится к левой 201.7156361225 (n=бесконечность)​  Не пройден

Код программы на C++:

В данной задаче необходимо было доказать равенство при заданном [latex]x[/latex] и [latex]\varepsilon [/latex].

Для этого вначале высчитывалось значение левой части [latex]\frac { { e }^{ x }+{ e }^{ -x } }{ 2 } [/latex] при заданном [latex]x[/latex], а далее, в цикле, высчитывалось значение правой части [latex]\frac { { x }^{ 2 } }{ 2! } +\frac { { x }^{ 4 } }{ 4! } +…+\frac { { x }^{ 2n } }{ (2n)! } +…[/latex]. В цикле программа находила последующий элемент последовательности, стоящей в правой части равенства, каждый раз умножая предыдущий элемент на [latex]\frac { { x }^{ 2 } }{ (2n-1)*(2n) } [/latex] до тех пор пока разность между левой и правой частью равенства [latex]dife=left-right[/latex]  не стала меньше заданной погрешности, заданной по модулю [latex]dife < \left|\varepsilon \right|[/latex]. После завершения цикла программа запоминает последнее значение [latex]n[/latex] и после этого выводит его на экран.

Код программы на Java

 

Ю3.13

Куленюк Денис Віталійович
Куленюк Денис Віталійович

Latest posts by Куленюк Денис Віталійович (see all)

Задача. Проверить численно первый замечательный предел [latex]\lim _{ x\xrightarrow [ ]{ } 0 }{ \frac { \sin { x } }{ x } } =1[/latex], задавая [latex]x[/latex] значения [latex]1[/latex]; [latex]\frac {1} {2}[/latex]; [latex]\frac {1} {4}[/latex]; [latex]\frac {1} {8}[/latex];… до тех пор, пока левая часть равенства не будет отличаться от правой менее чем на заданную погрешность [latex]\varepsilon[/latex].

[latex]\varepsilon[/latex] Ответ
0.5 Проверка пройдена при x ==1
0.09 Проверка пройдена при x ==1/2
0.009 Проверка пройдена при x ==1/8
0.000 9 Проверка пройдена при x ==1/16
0.000 09 Проверка пройдена при x ==1/64
0.000 009 Проверка пройдена при x ==1/256
0.000 000 9 Проверка пройдена при x ==1/512
0.000 000 09 Проверка пройдена при x ==1/2048
0.000 000 009 Проверка пройдена при x ==1/8192
0.000 000 0009 Проверка пройдена при x ==1/16384

Из условия задачи можно сразу определить что здесь придется воспользоваться циклом который будет изменять [latex]x[/latex] и подставлять в функцию:
[latex]y=\frac { \sin { x } }{ x }[/latex]

Главная задача которая стоит перед программистом в таких случаях — это сохранение максимально возможной точности вычислений. Из условия видно что [latex]0<x<=1[/latex], при этом он будет постоянно делиться на двойку, так что если обозначить знаменатель [latex]x[/latex] как [latex]a[/latex] (числитель всегда будет единицей), то справедливо что:
[latex]y=\frac { \sin { x } }{ x }=\frac{ \sin{ \frac {1}{a} } }{\frac {1}{a}}=a*\sin{ \frac {1}{a} } [/latex]

где [latex]a={2}^{i}[/latex], [latex]i>=0[/latex] (то есть переменная [latex]i[/latex] пробегает все значения от нуля и до плюс бесконечности).
Иными словами переменная [latex]a[/latex] инициализируется единицей и с каждой итерацией умножается на двойку.
Нам осталось только сделать цикл который будет подставлять нужный [latex]x[/latex] в формулу пока модуль разности значения правой половины равенства и левой не будет меньше (либо равен) заданному [latex]\varepsilon[/latex]

Сам код программы: http://ideone.com/N9p5sQ.

Ю3.39

Задача: Численно убедиться в справедливости равенства [latex]\frac{1}{4}\ln{\frac{1+x}{1-x}}+\frac{1}{2}\arctan{x}=\quad x+\frac{{x}^{5}}{5}+\dots+\frac{{x}^{4n+1}}{4n+1}+\dots[/latex], для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]e[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex] слагаемых, необходимых, для достижения заданной точности. Интервал для этой задачи: [latex]-1<x<1[/latex].

Ввод Вывод
[latex]x[/latex] Погрешность Output Комментарий
-0.99 1e-4 148 Пройден
0.99 1e-4 148 Пройден
0.99 1e-14 685 Пройден
0.7 1e-10 14 Пройден
-0.3 1e-13 6 Пройден
0.001 1e-13 1 Пройден
Идея решения: Используем цикл for, в условие которого ставим проверку на превышение погрешности суммы. Левую часть выражения вычисляем и записываем в переменную [latex]curr[/latex]. Сумму (то что стоит в правой части выражения) объявим как [latex]sum[/latex], и инициализируем значением [latex]x[/latex] (Это делается для того, чтобы во время работы цикла не вычислялось одно лишнее слагаемое).

Каждую итерацию цикла инкрементируем счетчик [latex]count[/latex]. Переменную [latex]y[/latex], которая соответствует i-тому слагаемому суммы, увеличивают до значения следующего слагаемого и прибавляют к сумме. Далее проверяем разность частичной суммы и заданного значения [latex]curr[/latex]. Если эта разность будет удовлетворять нашей точности, то число [latex]count[/latex] и будет количеством слагаемых в правой части.

Замечание: После цикла значение [latex]count[/latex] вновь инкрементируется, это сделано по следующей причине: сумма изначально содержала в себе первое слагаемое. Если сумма бы изначально содержала в себе 0, то нам пришлось бы вычислять лишнее слагаемое.

Ideone

Ю3.17

Задача: Сколько сомножителей надо взять в произведении: [latex]\prod_{k=1}^{\infty}{(1+\frac{{(-1)}^{k}}{2k+1})}=\frac{\sqrt{2}}{2}[/latex], чтобы равенство выполнялось до шестой значащей цифры, то есть с погрешностью не более [latex]{10}^{-6}[/latex]

Идея решения: Используем цикл for, в качестве [latex]k[/latex] в формуле используем переменную [latex]count[/latex] в программе. Переменную, которая будет соответствовать произведению, назовем [latex]mul[/latex] (сокращенно от multiplication) и присвоим ей значение 1 как нейтральный элемент для операции умножения. Каждую итерацию цикла проверяем разность [latex]mul-curr[/latex], где [latex]curr=\frac{\sqrt{2}}{2}[/latex], на превышение погрешности [latex]{10}^{-6}[/latex].

Если разность больше точности, умножаем [latex]mul[/latex] на выражение под знаком произведения и увеличиваем [latex]count[/latex] на единицу.

Если разность меньше точности, число [latex]count[/latex] и будет количеством сомножителей в произведении.

Число сомножителей оказалось достаточно большим — 88390. Ideone

Ю3.36

Оніщенко Олександр
Оніщенко Олександр

Latest posts by Оніщенко Олександр (see all)

Задача:

Задана функция и ее разложение в ряд. Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]\varepsilon[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex].

[latex]\frac{e^x+e^{-x}}{2}=1+\frac{x^2}{2!}+\frac{x^4}{4!}+ … +\frac{x^{2n}}{2n!}+…[/latex]

Тесты:

[latex]x[/latex] [latex]\varepsilon[/latex] [latex]a[/latex] [latex]b[/latex] [latex]n[/latex] Комментарий
1 0.0001 1.54308 1.54306 3 Пройден
1.5 0.001 2.35241 2.35176 3 Пройден
3 0.02 10.0677 10.0502 0 a=b,Пройден
10 0.3  11013.2  11012.9  12  Пройден

 

Код:

В задаче дана функция и ее разложение.   В главной функции задаем аргумент и погрешность. Находим значение функции(левая часть). Дальше нам нужно найти  значение разложения(правая часть). Для этого создаем цикл который будет работать пока, разница левой и правой части не станет меньше погрешности. Для этого к правой части прибавляем [latex]\frac{x^{2n}}{2n!}[/latex] до тех пор, пока разница между функцией и разложением не будет меньше погрешности.

Ссылка Ideone

Код Java

Ссылка на Ideone