Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / Лабы 2 / OLD / LAB_02

.TXT
Скачиваний:
28
Добавлен:
17.04.2013
Размер:
6.37 Кб
Скачать

Лабораторная работа N2
Тема: Практикум приближенных вычислений. Определение погрешности ЭВМ в среде
MATLAB. Создание m-файлов процедур и m-файлов функций.

1. Вызовите константу eps, равную точности, с которой работает Matlab. Про-
ведите сравнение 1+eps и 1+eps/2 с единицей (в командной строке наберите
1+eps>1 затем 1+eps/2>1 Результат 1 - истина, 0 - ложь).
Постройте процедуру нахождения этой величины, например, с помощью процедуры:

epsilon=1;k=1;while (1+epsilon)>1,epsilon=epsilon/2;k=k+1;end,epsi=2*epsilon

(см. блок-схему в лекции 1).
Найдите число итераций k - это число со знаком минус есть показатель степени
двойки. Как отсюда оценить максимальноый размер двоичной мантиссы чисел, с
которыми оперирует MATLAB.
Скопируйте результаты в отчет.

2. С помощью текстового редактора создайте m-файл процедуру под именем l2_1.m
(вторая лабораторная работа, пункт 1), в котором воспроизведите процедуру из
пункта 1. Сначала просто скопируйте эту строку, сохраните файл с указаннм
именем. Теперь достаточно в командной строке набрать l2_1 и нажать Enter.
Результат будет выведен на экран немедленно. В редакторе оформите его "красиво",
например:

epsilon=1;k=1;
while (1+epsilon)>1
epsilon=epsilon/2;k=k+1;
end
epsi=2*epsilon

Если заменить ; на , в строке epsilon=epsilon/2; на epsilon=epsilon/2, то
промежуточные результаты будут выводиться на экран. Если дополнительно после
запятой поставить команду pause т.е. epsilon=epsilon/2,pause, то будет временная
остановка после вывода epsilon на экран. Продолжение после нажатия любой
клавиши. Когда наблюдать вывод Вам надоест, нажмите Ctrl+C для прерывания
вычислений.
Скопируйте результаты в отчет.

3. Запишите на бумаге число 1/10 в двоичной системе. 1 равно 1, 10 равно 1010
и поделите столбиком одно на другое (см. лекцию 1). В результате Вы получите
бесконечную двоичную дробь. С помощью цикла, выбирая разное количество значащих
цифр, получите на экране различные приближенные значения для 1/10. Определите
порог достижения предельной точности.
Указание: получить в результате деления разложение искомого числа по отрица-
тельным степеням двойки. Проверить справедливость разложения суммированием
бесконечно бывающей геометрической прогрессии. Выполнить приближенные вычисле-
ния, начиная с первого ненулевого члена разложения, постепенно увеличивая чило
слагаемых. Для большей наглядности включить format long.

Подсказка для первого слагаемого:

n=4;s=0;for k=4:n,if rem(k,4)==0 | rem(k,4)==1,s=s+2^(-k);else,end,end,s

Проведя вычисления в командной строке, повторить их с помощью м-файла (l2_3.m),
в который можно скопировать приведенные выше операторы.

Внимание для студентов ФХ!!! В версии MATLAB под DOS операция копирования
информации в m-файлы может выполняться в два этапа: сначала отладить про-
цедуру вычислений в командной строке с обязательным (!!!) ведением дневника,
при этом содержимое экрана копируется в текст файла дневника, а затем содер-
жимое дневника можно отредактировать, убрав все лишнее, добавив необходимое
и сохранить под нужным именем.

Расположите команды "красиво" с выделением цикла, например:

n=4;s=0;
for k=4:n
if rem(k,4)==0 | rem(k,4)==1
s=s+2^(-k);
else
end
end
s

нарисуйте блок-схему этой процедуры для произвольного n и покажите прподавателю).
Обратите внимание на то, что оператор else можно опустить. Поставьте перед ним
знак % - признак комментария. Результат вычислений не измениться. Проведите
исследование зависимости представления десятичного числа 0.1 от количества учи-
тываемых двоичных знаков. Для этого внесите следующие изменения в файл l2_3.m
Уберите оператор присвоения n (значение n будет меняться от 4 до m, которое Вы
будете задавать в командной строке). Поэтому в файле l2_3.m добавьте еще один
внешний цикл по n от 4 до m, а выводить будем матрицу Result, в строках которой
будут последовательные значения n s

Result=[0 0]
for n=4:m
s=0;
for k=4:n
if rem(k,4)==0 | rem(k,4)==1
s=s+2^(-k);
end
end
Result=[Result; n s];
end
Result

Результат сохраните под обновленным именем l2_31.m Введите в кмандной строке
m=13;l2_31 и нажмите Enter. Создается впечатление, что учет тринадцати двоичных
разрядов дают верный результат. Однако, введите
format long,Result
и Вы увидите, что до цели еще далеко! Проведите дальнейшее исследование при-
ближение к одной десятой самостоятельно и запишите результаты в отчет.

Внимание!!! Вы научились создавть и использовать m-файлы процедуры, которые
фактически являются программами для среды MATLAB.

Научимся создавть m-файлы функции.

4. Такой файл начинаеися с ключевого слова function и описания зависимой
переменной y и аргумента x (может быть несколько). Функциональную зависмость
можно определять любой текстовой комбинацие, например, myfun. Желательно
эти символы использовать в имени файла (расширение, естественно, m). Далее
после признака комментария (%) идет текстовая информация, которая будет
выводиться на экран по команде help myfun, затем идет описание способа вы-
числения функции

Введите в текстовом редакторе информацию и сохраните его под именем myfun.m

function y=myfun(x)

% Тестовая функция лабораторной работы
% в m-файле (функции) с именем myfun.m

y=x^2;

После сохранения наберите в командной строке help myfun и нажмите Enter. Вы
увидите заготовленную справку помощи.
Введите myfun(3) и нажмите Enter, получите 9. Но, если попытетесь вычислить
функцию от вектора значений аргумента, например, x=1:5;myfun(x) получите
сообщение об ошибке!!! Это связано с тем, что Вы задавали функцию от число-
вого аргумента. Для векторного аргумента надо предусмотреть выполнение по-
лементной операции возведения в квадрат - x.^2 вместо x^2 в строке вычисления
функции. Не забудьте сохранить файл. Повторите ввод x=1:5;myfun(x)
Постройте график этой функции на отрезке [-2;2] с шагом 0.1 (help plot) с
сеткой (help grid)

5. Создайте файл функцию определения приближенного значения одной десятой
в зависимости от числа учитываемых двоичных разрядов.

Для факультета АиЭМ

6. Ознакомьтесь с системой помощи (help) в среде MATLAB. Для этого сначала
наберите в командной строке help дважды, т.е. help help. Затем просмотрите
помощь по элементарным функциям - help elfun

Соседние файлы в папке OLD