MLoop 9

Александр Димитриев
Александр Димитриев

Latest posts by Александр Димитриев (see all)

Условие

Вычислите с точностью [latex]\varepsilon[/latex] значение функции [latex]f\left( x \right) = \text{sh}x[/latex]. При вычислениях допустимо использовать только арифметические операции.

Входные данные

В одной строке задано два числа [latex]x[/latex] и [latex]E[/latex].

Выходные данные

В одной строке вывести значение функции [latex]f\left( x \right) = \text{sh}x[/latex] и [latex]\text{sinh}x[/latex] (для проверки).
[latex]\text{sh} \left( x \right) = x — \frac {x^{3}}{3!}+\frac{x^{5}}{5!} — \cdots = \displaystyle\sum_{n=0}^{\infty}\frac{1}{(2n+1)!}x^{ 2n+1 },x\in{C}[/latex]

Тесты

Входные данные Выходные данные

(мои и стандартной функции)

1.57 1e-10000 2.2993 2.2993
3.14 1e-100000 11.5303 11.5303
0 0.1 0 0
1.05 1e-1000 1.25386 1.25386
0.785 0 0.868144 0.868144
0.52 0.01 0.543435 0.543754

Код

Решение

Для того чтобы найти с точностью значение функции, в данном варианте это [latex]f\left( x \right) = \text{sh}x[/latex] — гиперболический синус, надо воспользоваться рядом Тейлора. Находим следующий член ряда Тейлора и прибавляем к функции и так пока не дойдем до члена, который будет меньше, либо равен точности. Чтобы проверить на правильность наших вычислений можно воспользоваться уже готовой функцией нахождения гиперболического синуса [latex]\text{sinh}x[/latex].
Код программы

MLoop7

Алина Гончарова
Алина Гончарова

Latest posts by Алина Гончарова (see all)

Задача

Вычислите с точностью \epsilon значение функции f\left( x \right) = \tan x. При вычислениях допустимо использовать только арифметические операции.

Решение

Функцию [latex]f(x)=\tan x [/latex] можно представить в виде: [latex]f(x)=\frac{\sin x}{\cos x}[/latex] (по свойствам тангенса). Поэтому будем раскладывать в ряд две функции: [latex]\sin x[/latex] и [latex]\cos x[/latex].

Для решения задачи необходимо воспользоваться формулой Тейлора  с опорной точкой x_{0}=0 (ряд Маклорена). Для функции [latex]f(x)=\sin x[/latex]  она имеет следующий вид:

[latex]f(x)=x-\frac{x^{3}}{3!}+\frac{x^{5}}{5!}-\cdots=\sum_{n=0}^{\infty}(-1)^{n}\frac{x^{2n+1}}{(2n+1)!}[/latex]

А для [latex]f(x)=\cos x[/latex]:

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

Далее нам нужно найти рекуррентные формулы для членов данных рядов.

[latex]\frac{a_n}{a_n-_1}=\frac{-x^{2}}{(2n+2)(2n+3)}[/latex];

[latex]\frac{b_n}{b_n-_1}=\frac{-x^{2}}{(2n+1)(2n+2)}[/latex]

При помощи функции fmod удалим период, так как тангенс [latex]\pi[/latex] периодичная функция.

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

Код

 

Тесты

Входные данные Выходные данные
0.42 0.001 0.446569
1.52 0.001 19.9377
3.1415 0.0001 -0.000113798

Задача взята отсюда.

Код программы на Ideone.com.

MLoop14

Станислав Коциевский
Станислав Коциевский

Latest posts by Станислав Коциевский (see all)

Задача

 

Вычислите с точностью \varepsilon значение функции f\left( x \right) = \text{cotan}x. При вычислениях допустимо использовать только арифметические операции.

Тесты

Аргумент функции Точность Результат программы Результат сайта wolframalpha
1,6 0,000001 -0,029212 -0.0292120
0,5 0,001 1,83 1,83049
2 0,00001 -0,45766 -0,45765155….
-0,4 0,0001 -2,3652 -2,36522
-1 0,0001 -0,6421 -0,64209261…

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

 

Решение

Наиболее простым решением данной задачи оказалось рассмотреть котангенс, как отношение косинуса к синусу и работать не с рядом Тейлора для котангенса, а с рядами Маклорена для синуса и косинуса. Причем, удобно работать с ними в одном цикле. Оказывается, слагаемые этих рядов можно получить друг из друга.

Ряд Маклорена для синуса: [latex]\sin{x}= [/latex] [latex] x — \frac{x^{3}}{3!} + \frac{x^{5}}{5!} — [/latex] …

Ряд Маклорена для косинуса: [latex]\cos{x}= [/latex] [latex]1 — \frac{x^{2}}{2!} + \frac{x^{4}}{4!} — [/latex] …

Отсюда видно, что [latex]n[/latex]-е слагаемое ряда для синуса равно [latex] n[/latex]-ому слагаемому ряда для косинуса, умноженному на [latex] \frac{x}{2 \cdot n+1} [/latex]. Запускаем цикл, работающий, пока модуль разности между предыдущим и следующим значением котангенса больше заданной точности, в котором каждый раз прибавляем к рядам их следующие слагаемые.

В функции int main() считаем количество знаков числа, которое нам нужно вывести, через цикл, а затем пользуемся функцией precision и выводим результат.

Примечание: Поскольку в условии разрешается пользоваться только арифметическими операциями, а модуль не совсем является таковой, я не стал пользоваться стандартной функцией Abs(), а вписал в программу ее замену. 

ссылка на код на ideone

MLoop 17

Задача

Вычислите с точностью [latex]\varepsilon[/latex] значение функции [latex]f\left( x \right) = \ln \left( 1-x^2 \right)[/latex] . При вычислениях допустимо использовать только арифметические операции.

Входные данные

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

Выходные данные

Значение функции в точке [latex]x[/latex] .

Тесты

[latex]\varepsilon[/latex] [latex]x[/latex]  [latex]ln(1-x^2)[/latex] Результат
0.001 0.5 [latex]ln(0.75)[/latex] -0.287435
0.0001 0.5 [latex]ln(0.75)[/latex] -0.287671
0.01 0.1 [latex]ln(0.99)[/latex] -0.01005
0.001 -0.1 [latex]ln(0.99)[/latex] -0.01005
0.1 0 [latex]ln(1.00)[/latex] 0
0.01 0 [latex]ln(1.00)[/latex] 0

 

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

ideone.com

 

Решение

Функцию [latex]f\left( x \right) = \ln \left( 1-x^2 \right)[/latex] можно представить в виде:
[latex]ln\left ( 1-x^2 \right )= ln\left ( 1-x \right )\left ( 1+x \right ) = ln\left ( 1-x \right )+ln\left ( 1+x \right )[/latex] (по свойствам логарифма).

Для решения задачи необходимо воспользоваться формулой Тейлора  для натурального логарифма с опорной точкой [latex]x_{0}=0[/latex] (ряд Маклорена). Для функции [latex]ln\left (1+x\right )[/latex] она имеет следующий вид:

[latex]ln\left (1+x\right )=x-\frac{x^{2}}{2}+\frac{x^{3}}{3}-\cdots+\frac{\left ( -1 \right )^{n-1}}{n}x^{n}=\sum_{n=1}^{\infty}\frac{\left (-1\right )^{n-1}}{n}x^{n}[/latex]

Подставив в формулу [latex]-x[/latex] вместо [latex]x[/latex] , получим:

[latex]ln\left (1-x\right )=-x-\frac{x^{2}}{2}-\frac{x^{3}}{3}-\cdots -\frac{x^{n}}{n}=-\sum_{n=1}^{\infty}\frac{x^{n}}{n}[/latex]

Тогда,

[latex]ln\left (1+x\right )+ln\left (1-x\right )=\sum_{n=1}^{\infty}\frac{\left (-1\right )^{n-1}}{n}x^{n}-\sum_{n=1}^{\infty}\frac{x^{n}}{n}=[/latex] [latex]=\sum_{n=1}^{\infty }\left[\frac{\left (-1\right )^{n-1}}{n}x^{n}-\frac{x^{n}}{n}\right]=\sum_{n=1}^{\infty }\frac{x^{n}\left (\left (-1\right )^{n-1}-1\right )}{n}=[/latex][latex]=-x^{2}+0-\frac{x^{4}}{2}+0-\frac{x^{6}}{3}+0-\cdots[/latex]

Так как при нечетном [latex]n[/latex] члены данного ряда обращаются в ноль, его можно записать в виде:

[latex]-\sum_{0}^{\infty}\frac{x^{2n+2}}{n+1}=-x^{2}-\frac{x^{4}}{2}-\frac{x^{6}}{3}-\cdots-\frac{x^{2n+2}}{n+1}[/latex]

Далее необходимо найти рекуррентную формулу для членов данного ряда.

[latex]\frac{a_{n}}{a_{n-1}}=\frac{x^{2n+2}}{n+1}\cdot\frac{n-1+1}{x^{2\left ( n-1 \right )+2}}=\frac{x^{2}\cdot n }{n+1}[/latex]

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

MLoop 10

Вычислите с точностью [latex]\varepsilon[/latex] значение функции f\left( x \right) = \text{ch}x. При вычислениях допустимо использовать только арифметические операции.

Решение задачи:

Для нахождения значения функции  f\left( x \right) = \text{ch}x (гиперболический косинус) с точностью [latex]\varepsilon[/latex]  воспользуемся формулой Тейлора (разложение функции в бесконечную сумму степенных функций):[latex]chx=1+\frac{x^2}{2}+\frac{x^4}{4}+[/latex]…[latex]=\sum_{n=0}^{\infty}\frac{1}{(2n+1)!}\times x^{2n}[/latex]. [latex]x_n=\frac{1}{(2n+1)!}\times x^{2n}[/latex], тогда [latex]x_{n-1}=\frac{1}{(2(n-1)+1)!}\times x^{2(n-1)}[/latex]. Рекуррентное соотношение [latex]x_n[/latex] и [latex]x_{n-1}=[/latex][latex]\frac{x_n}{x_{n-1}}=\frac{x^2}{2n\times(2n-1)}[/latex].

Код программы:

Тесты:

Входные данные Выходные данные
x e ch(x)
9 0.01 4051.54
16 0.0001 4.44306e+06
0.85 0.00001 1.38353
0.11 0.001 1.00606

Здесь можно посмотреть решение задачи на ideone.com

MLoop 11

Павел Загинайло
Павел Загинайло

Latest posts by Павел Загинайло (see all)

Условие задачи

Вычислите с точностью \epsilon значение функции f\left( x \right) = \arccos x. При вычислениях допустимо использовать только арифметические операции.

Код программы.

 

Тесты

Входные данные Выходные данные Арккосинус
e x arccos = ([latex]\pi[/latex]/2 — f) Арккосинус
0.000001 0.866 0.523651 0.5236495809
0.01 0.5 1.04727 1.0471975512
0.00000000000001 0.35 1.21323 1.2132252231
0.00001 0.99 0.141873 0.1415394733

 

Решение

Для того, чтобы представить функцию f\left( x \right) = \arccos x необходимо воспользоваться формулой Тейлора, а именно рядом Маклорена для арккосинуса. Она имеет следующий вид:

[latex]\arccos x=\frac{\pi}{2}-\sum_{n=1}^\infty\frac{(2n)!}{4^{n}(n!)^{2}(2n+1)}x^{2n+1}[/latex]

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

В функции [latex]f[/latex] переменная [latex]p[/latex] — слагаемые нашей суммы, а изначально — первый элемент. Также, в начале мы присвоили переменной суммы значение первого элемента. Затем в цикле мы домножаем наше слагаемое на полученный ранее коэффициент и складываем его с суммой до тех пор, пока значение [latex]p[/latex] превышает значение заданной точности [latex]e[/latex]. В основной части программы мы лишь выводим разность [latex]\pi/2[/latex] и нашей суммы. Это и будет значение арккосинуса.

 

Код на ideone.com