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

лр(1)

.docx
Скачиваний:
2
Добавлен:
16.09.2023
Размер:
21.15 Кб
Скачать

Задание 1: Рассмотрим многочлен Уилкинсона = = Очевидно, корнями его являются . Выполните в MATLAB команду p=poly(1:20), которая позволяет получить коэффициенты полинома, корнями которого является аргумент функции. Наберите roots(p) и убедитесь, что корни полинома найдены приближенно. Измените значение, например, второго коэффициента на малую величину (составляет от числа) и снова выполните эту команду – половина корней стала комплексными числами! Исходная задача оказалась неустойчивой к входным данным (их малое изменение ведет к сильному изменению решения), в результате чего получился абсурдный результат.

>> p=poly(1:20);

>> roots(p)'

ans =

20.0003 18.9972 18.0112 16.9711 16.0483 14.9354 14.0653 12.9491 12.0334 10.9840 10.0061 8.9984 8.0003 7.0000 6.0000 5.0000 4.0000 3.0000 2.0000 1.0000

>> p(2)=p(2)-1.0e-7;

>> roots(p)'

ans =

20.7888 + 0.0000i 19.4596 - 1.8743i 19.4596 + 1.8743i 16.7251 - 2.7315i 16.7251 + 2.7315i 14.0113 - 2.4495i 14.0113 + 2.4495i 11.8219 - 1.5994i

11.8219 + 1.5994i 10.1217 - 0.6059i 10.1217 + 0.6059i 8.9253 + 0.0000i 8.0071 + 0.0000i 6.9996 + 0.0000i 6.0000 + 0.0000i 5.0000 + 0.0000i

4.0000 + 0.0000i 3.0000 + 0.0000i 2.0000 + 0.0000i 1.0000 + 0.0000i

Задание 2: Рассмотрим представление числа в компьютере. Чаще всего в MATLAB производятся операции над числами с двойной точностью. Число формата double – 64-разрядное число (8 байт), в котором 1 бит – знаковый, 52 отводятся под мантиссу и 11 под порядок числа. ( , - мантисса числа, n - порядок). Так как в порядке тоже есть знаковый бит, то множество его значений лежит от до . В командном окне MATLAB наберите 2^1023. Получилось число с десятичным порядком +308 (его легко оценить аналитически: ). Теперь выполните 2^1024 – получили Inf, т.е. машинную бесконечность. Команда realmax как раз и выдает максимальное число, которое можно представить в MATLAB, команда realmin – минимальное (по абсолютной величине).

>> 2^1023

ans =

8.9885e+307

>> 2^1024

ans =

Inf

>> realmax

ans =

1.7977e+308

>> realmin

ans =

2.2251e-308

Задание 3:

Установите формат отображения с плавающей точкой: format long e, выполните sqrt(2)(квадратный корень из 2). Посчитайте число выданных цифр.

>> format long e

>> sqrt(2)

ans =

1.414213562373095e+00

>> %15 цифр

Задание 4: Казалось бы, такая точность представления способна удовлетворить любые нужды исследователя. Однако, необходимо помнить, что, например, перед тем как два числа будут сложены они должны быть приведены к единому порядку, а то, что при сложении выйдет за мантиссу будет отброшено! Поэтому, если сложить 10^8+-10^-7 в мантиссу уложатся 15 десятичных знаков и будет получен верный результат, а если выполнить 10^8+10^-8, то малое число выйдет за разрядную сетку, и получим те же 10^8 (проверьте).

>> 10^8+-10^-7

ans =

9.999999999999990e+07

>> a=10^8+10^-8

a =

1.000000000000000e+08

Вывод: Было получено точное значение переменной, а так как число имеет 15 десятичных знаков, то памяти в мантиссе хватило. В случае переменной b число вышло за объём памяти мантиссы, и произошло округление.

Задание 5: Протестируем компьютер на погрешность вычислений. Найдем значение выражения при . С точки зрения аналитической математики значение этого выражения постоянно и равно единице для любых n. Сделайте предположения, при каком значении n это выражение перестанет отличаться от единицы, чему будет равно; напишите программу, реализующую этот алгоритм с пошаговой выдачей номера шага, значения и результата выражения.

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

S=[];

for i=0:1:59

eps = 2^-i;

s = (1 + eps - 1)/eps;

S = [S s];

end

disp(S)

Columns 1 through 20

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Columns 21 through 40

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Columns 41 through 60

1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0

Задание 6:

Рассмотрим погрешности численных методов. Построим алгоритм вычисления интеграла Интегрируя по частям, находим:

и т.д.

Вычислите значения интегралов, до n=30. Заметьте, что подынтегральная функция на всем отрезке интегрирования неотрицательна, следовательно, и значение интеграла – положительное число. Более того, подынтегральная функция на данном интервале ограничена функцией , т.е. значение интеграла не может превышать единицы. Посмотрите, как это согласуется с полученными результатами.

>> exp(-1)-1/exp(1)

ans =

5.5511e-017

>> %величина ошибки, каждый член будет отличаться от теоретического на d*n!

I(1)=exp(-1);

for i=2:1:30

I(i)=1-i*I(i-1);

end

disp(I)

0.367879441171442 0.264241117657115 0.207276647028654 0.170893411885384

0.14553294057308 0.12680235656152 0.112383504069363 0.100931967445092

0.0916122929941707 0.0838770700582927 0.0773522293587803 0.0717732476946367

0.0669477799697233 0.0627310804238732 0.0590337936419019 0.0554593017295701

0.0571918705973076 -0.0294536707515363 1.55961974427919 -30.1923948855838

Значения модулей интеграла на логарифмической шкале. Видна ошибка, растущая со скоростью факториала.

код для вывода ошибки

clc

clear all;

d=5.5511e-017; //погрешность

I = exp(-1);

error = d;

for i=1:1:30;

I=1-i*I(i-1);

error = error * i +d;

end

Задание 7: Напишите функцию вычисления значения синуса в виде конечной суммы ряда

( ). По признаку Лейбница погрешность вычисления сходящегося знакопеременного ряда не превышает по абсолютной величине первого из отброшенных членов. Вычисления членов ряда проводите до вычисления члена по модулю не превышающего . Вычислите значение синуса в точках , убедитесь, что полученные значения с высокой степенью точности совпадают с действительным значением синуса в этих точках. Далее проведите вычисления в точках , выводя результаты по шагам (посчитанный член и частичную сумму ряда). Полученные результаты объясняются погрешностями округления, в реальных программах значение аргумента приводится к отрезку .

function s=sinus(x)

u(1)=x;

n=1;

while abs(u(n))>=1e-17

u(n+1)=-u(n)*x^2/((2*(n-1)+2)*(2*(n-1)+3));

n=n+1;

end

s=sum(u);

end

>> sinus(0)

ans =

0

>> sin(0)

ans =

0

>> sinus(pi/3)

ans =

8.660254037844385e-001

>> sin(pi/3)

ans =

8.660254037844386e-001

>> sinus(pi/2)

ans =

1.000000000000000e+000

>> sin(pi/2)

ans =

1

>> sinus(pi)

ans =

2.479031568558660e-016

>> sin(pi)

ans =

1.224646799147353e-016

>> sinus(2*pi)

ans =

4.372518090456442e-016

>> sin(2*pi)

ans =

-2.449293598294706e-016

>> sinus(12*pi)

ans =

-4.227503435861631e-002

>> sin(12*pi)

ans =

-1.469576158976824e-015

>> sinus(13*pi)

ans =

4.282569859949910e-001

>> sin(13*pi)

ans =

-1.960672839908942e-015

>> sinus(14*pi)

ans =

1.184949154441604e+002

>> sin(14*pi)

ans =

-1.714505518806294e-015

Полученные результаты объясняются погрешностями округления, в реальных программах значение аргумента приводится к отрезку [0; π 2 ].

function [G U]=sinus2(x)

u(1)=x; g(1)=x;

n=1;

while abs(u(n))>=1e-17

u(n+1)=-u(n)*x^2/((2*(n-1)+2)*(2*(n-1)+3));

g(n+1)=g(n)+u(n+1);

n=n+1;

end

U=u';% элементы

G=g';% частичные суммы

end

какие бывают ошибки:

1. Ошибка математической модели — ошибка неучтенных параметров физического явления. Например, полет тела, брошенного под углом к горизонту с малыми скоростями можно описывать обычными баллистическими уравнениями без учёта сопротивления воздуха. Как только скорости становятся значительными нужно вводить сопротивление воздуха. Далее следуют: учёт плотности, температуры воздуха, ветра, переменного ускорения свободного падения, вращения Земли и т.д. Построение адекватной математической модели описывается в курсе математического моделирования.

2. Ошибка входных данных — это ошибка измерений параметров физической модели. Во многих физических и технических задачах данная погрешность достигает нескольких процентов. Она приводит к так называемой неустранимой погрешности, которая не управляется математически и, зачастую, приводит к парадоксальным результатам.

3. Ошибка численного метода — связана с тем, что исходные операторы заменяются приближёнными. Например, интеграл – суммой, дифференцирование – конечной разностью, функцию – полиномом, бесконечный ряд – конечной суммой элементов. Погрешность численного метода обычно берут в 2-5 раза меньше неустранимой погрешности. Меньше брать невыгодно из-за увеличения объёма выполняемых вычислений, больше — из-за снижения точности вычислений. Ошибка численного метода управляется математически.

4. Ошибка округления связана с ограниченной разрядной сеткой компьютера, из-за чего, например, бесконечные десятичные дроби представляются в конечном виде.

Соседние файлы в предмете Численные методы