Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЧМ (МП-3) / Лабы / Лабы 2003, Земсков / LAB_02
.TXT Лабораторная работа N2
Тема: Практикум приближенных вычислений.
1. Влияние округлений при вычислениях на ЭВМ.
Вопрос: На сколько порядков должны отличаться два числа, чтобы при выполне-
нии операции сложения второе слагаемое перестало учитываться?
Создайте исполняемый m-файл (процедуру) под именем l2_11.m (первый файл в
первом пункте лабораторной работы), с помощью которого выполните операции
суммирования четырех чисел z1=2^n, z2=-z1, z3=2^(-n) и z4=-z3. Сложите эти
числа, по разному расставляя скобки A=(z1+z2)+(z3+z4), B=z1+(z2+z3))+z4 и
выбирая различные значения показателя степени n c помощью команды input.
Пример файла (можно скопировать в свой блокнот и сохранить под нужным име-
нем):
n=input('Введите порядок чисел в Вашем эксперименте =')
z1=2^(n);z2=-z1;z3=2^(-n);z4=-z3;
A=(z1+z2)+(z3+z4)
B=z1+(z2+z3)+z4
При выполнении этого файла обратите внимание на то, что А и В, естественно,
равны нулю при небольших значениях n. Однако, начиная с некоторого значения
n, А по-прежнему равно нулю, а В отлично от нуля (т.к. z2 перестало
“реагировать” во внутренней скобке на присутствие z3) и должно было бы рав-
няться z4, проверьте равенство (!!!).
Измените основание на 10 (назовите файл l2_12.m) и повторите эксперимент.
(!!!)Объясните почему число В сразу отличается от 0. Определите пороговое
значение n, при котором оно становится равным z4.
Сравнить полученные результаты. Объясните их на языке сложения чисел с раз-
личными порядками и одинаковыми по длине мантиссами. Учтите, что ЭВМ пере-
водит числа в двоичную систему.
2. Запишите на бумаге число 1/10 в двоичной системе. 1 равно 1, 10 равно
1010 и поделите столбиком одно на другое. В результате получите бесконечную
дробь. В командном окне MATLAB с помощью цикла, выбирая разное количество
значащих цифр в двоичном представлении 1/10, получите на экране различные
приближенные значения для этого числа. Определите порог достижения предель-
ной точности. При необходимости используйте команду format long.
3. Вызовите константу eps, равную точности, с которой работает Matlab. По-
стройте процедуру нахождения этой величины, например, с помощью процедуры:
epsilon=1;k=1;while
(1+epsilon)>1,epsilon=epsilon/2;k=k+1;end,epsi=2*epsilon
Найдите число итераций k.
Сравните числа 1+epsi и 1+epsilon с 1. Что получается?
4. Изучите влияние процедуры округления в ЭВМ на погрешность результата
сложения .
Построить и сравнить векторы [round(x) fix(x) сeil(x) floor(x)] для разных
значений х: 11.2, -11.2 4.5, -4.5, 55.6, -55.6.
Постройте вектор десятимерного пространства, координаты которого образуют
геометрическую прогрессию с первым членом .123456789 и знаменателем два. С
помощью цикла или сортировки (sort) просуммируйте их в восходящем и нисхо-
дящем порядке, округляя каждый раз результат сложения с помощью функции
okrug(х,2). Сравните полученные результаты.
Объясните полученные результаты с помощью графа этого вычислительного про-
цесса.
5. Найдите значения косинуса для значений углов от (2^50)*pi до (2^55)*pi,
используя цикл для нахождения значения y(k)=cos(x), удваивая начальное зна-
чение x. Выведите на печать значения y'. Проанализируйте полученные резуль-
таты, с учетом точности хранящегося в Matlab числа pi.
6. Запустить программу sin_p (m-файл функция sin_p.m), вычисляющую значения
функции sin(x) при значениях х=pi/6+2*pi*i (i=1:7). Ожидаемый результат
0.5. Убедиться, что хотя вычисления проводятся путем суммирования членов
ряда до тех пор пока последнее слагаемое не станет по модулю меньше задан-
ной точности и результат вычисления суммы знакопеременного ряда должен был
бы отличаться от точной суммы на такую же величину, при больших значениях
х, результат по модулю существенно отличается от 0.5. Установите число чле-
нов ряда для k=7 и просмотрите слагаемые — компоненты вектора r(k). Внима-
тельно прочитайте комментарий в конце файла sin_p.m
Внимание: стандартная процедура вычисления тригонометрических функций кро-
ме использования тейлоровского разложения предполагает приведение аргумента
к стандартному промежутку от -pi/2 до pi/2.
7. Найдите коэффициенты многочлена, корнями которого являются числа 1, 2, 3
и 4. Обозначьте вектор коэффициентов через с. Покажите преподавтелю. С по-
мощью процедуры roots найдите корни этого многочлена. Обратите внимание,
что если немного изменить, например, коэффициент c(2)=c(2)+2^(-10), то это
мало повлияет на значения корней.
8. Повторим этот эксперимент с многочленом корни которого 1, 2, 3, ..., 20.
с=poly(1:20)
roots(c)
c(2)=c(2)+2^(-23)
roots(c)
9. В тетрадке сравните графическое решение задачи поиска нулей функций
l2_91.m и l2_92.m. Изучите процедуру нахождения нуля функции fzero. Сравни-
те результаты нахождения нулей вышеуказанных функций из разных стартовых
точек. Можете включить процедуру выполнения поиска по шагам.
Тема: Практикум приближенных вычислений.
1. Влияние округлений при вычислениях на ЭВМ.
Вопрос: На сколько порядков должны отличаться два числа, чтобы при выполне-
нии операции сложения второе слагаемое перестало учитываться?
Создайте исполняемый m-файл (процедуру) под именем l2_11.m (первый файл в
первом пункте лабораторной работы), с помощью которого выполните операции
суммирования четырех чисел z1=2^n, z2=-z1, z3=2^(-n) и z4=-z3. Сложите эти
числа, по разному расставляя скобки A=(z1+z2)+(z3+z4), B=z1+(z2+z3))+z4 и
выбирая различные значения показателя степени n c помощью команды input.
Пример файла (можно скопировать в свой блокнот и сохранить под нужным име-
нем):
n=input('Введите порядок чисел в Вашем эксперименте =')
z1=2^(n);z2=-z1;z3=2^(-n);z4=-z3;
A=(z1+z2)+(z3+z4)
B=z1+(z2+z3)+z4
При выполнении этого файла обратите внимание на то, что А и В, естественно,
равны нулю при небольших значениях n. Однако, начиная с некоторого значения
n, А по-прежнему равно нулю, а В отлично от нуля (т.к. z2 перестало
“реагировать” во внутренней скобке на присутствие z3) и должно было бы рав-
няться z4, проверьте равенство (!!!).
Измените основание на 10 (назовите файл l2_12.m) и повторите эксперимент.
(!!!)Объясните почему число В сразу отличается от 0. Определите пороговое
значение n, при котором оно становится равным z4.
Сравнить полученные результаты. Объясните их на языке сложения чисел с раз-
личными порядками и одинаковыми по длине мантиссами. Учтите, что ЭВМ пере-
водит числа в двоичную систему.
2. Запишите на бумаге число 1/10 в двоичной системе. 1 равно 1, 10 равно
1010 и поделите столбиком одно на другое. В результате получите бесконечную
дробь. В командном окне MATLAB с помощью цикла, выбирая разное количество
значащих цифр в двоичном представлении 1/10, получите на экране различные
приближенные значения для этого числа. Определите порог достижения предель-
ной точности. При необходимости используйте команду format long.
3. Вызовите константу eps, равную точности, с которой работает Matlab. По-
стройте процедуру нахождения этой величины, например, с помощью процедуры:
epsilon=1;k=1;while
(1+epsilon)>1,epsilon=epsilon/2;k=k+1;end,epsi=2*epsilon
Найдите число итераций k.
Сравните числа 1+epsi и 1+epsilon с 1. Что получается?
4. Изучите влияние процедуры округления в ЭВМ на погрешность результата
сложения .
Построить и сравнить векторы [round(x) fix(x) сeil(x) floor(x)] для разных
значений х: 11.2, -11.2 4.5, -4.5, 55.6, -55.6.
Постройте вектор десятимерного пространства, координаты которого образуют
геометрическую прогрессию с первым членом .123456789 и знаменателем два. С
помощью цикла или сортировки (sort) просуммируйте их в восходящем и нисхо-
дящем порядке, округляя каждый раз результат сложения с помощью функции
okrug(х,2). Сравните полученные результаты.
Объясните полученные результаты с помощью графа этого вычислительного про-
цесса.
5. Найдите значения косинуса для значений углов от (2^50)*pi до (2^55)*pi,
используя цикл для нахождения значения y(k)=cos(x), удваивая начальное зна-
чение x. Выведите на печать значения y'. Проанализируйте полученные резуль-
таты, с учетом точности хранящегося в Matlab числа pi.
6. Запустить программу sin_p (m-файл функция sin_p.m), вычисляющую значения
функции sin(x) при значениях х=pi/6+2*pi*i (i=1:7). Ожидаемый результат
0.5. Убедиться, что хотя вычисления проводятся путем суммирования членов
ряда до тех пор пока последнее слагаемое не станет по модулю меньше задан-
ной точности и результат вычисления суммы знакопеременного ряда должен был
бы отличаться от точной суммы на такую же величину, при больших значениях
х, результат по модулю существенно отличается от 0.5. Установите число чле-
нов ряда для k=7 и просмотрите слагаемые — компоненты вектора r(k). Внима-
тельно прочитайте комментарий в конце файла sin_p.m
Внимание: стандартная процедура вычисления тригонометрических функций кро-
ме использования тейлоровского разложения предполагает приведение аргумента
к стандартному промежутку от -pi/2 до pi/2.
7. Найдите коэффициенты многочлена, корнями которого являются числа 1, 2, 3
и 4. Обозначьте вектор коэффициентов через с. Покажите преподавтелю. С по-
мощью процедуры roots найдите корни этого многочлена. Обратите внимание,
что если немного изменить, например, коэффициент c(2)=c(2)+2^(-10), то это
мало повлияет на значения корней.
8. Повторим этот эксперимент с многочленом корни которого 1, 2, 3, ..., 20.
с=poly(1:20)
roots(c)
c(2)=c(2)+2^(-23)
roots(c)
9. В тетрадке сравните графическое решение задачи поиска нулей функций
l2_91.m и l2_92.m. Изучите процедуру нахождения нуля функции fzero. Сравни-
те результаты нахождения нулей вышеуказанных функций из разных стартовых
точек. Можете включить процедуру выполнения поиска по шагам.
Соседние файлы в папке Лабы 2003, Земсков
