Ю3.13

Задача. Проверить численно первый замечательный предел [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.

Related Images:

3 thoughts on “Ю3.13

  1. — Нельзя тестировать получение единицы с погрешностью в единицу. Теряется смысл. Выбирайте погрешности значительно меньше результата.
    — В таблице лучше указать значения погрешностей для 5-10 значений х.
    — Перед скобками необходимо ставить пробел (в тексте)
    — «модуль разницы» — разности
    — Погрешность в задачнике обозначена как «эпсилон». Буквой е принято обозначать число Эйлера. Используйте \varepsilon везде в тексте, пожалуйста.
    — Поставьте точку в конце отчёта.
    — В 15-й строке задана верная формула l = sin(1/a) * a. В 11-й строке эта же формула выписывается ещё раз для частного случая а=1: l=sin(a). Хотя программа работает верно, но таких повторов следует избегать. Я попрошу Вас чуть изменить код с использованием do… while(), чтобы избежать этого повтора. Уверен Вам это не сложно будет сделать.

    P.S. » Итерационная модификация параметра». Отличное название придумали. Я даже проверил — это словосочетание встречается в сети только в этой Вашей работе. Т.е. можно патентовать 🙂
    Нет, мне честно понравилось.

    • Понял, все исправил.

Добавить комментарий