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

Labs Matlab / Lab1 / index5

.htm
Скачиваний:
50
Добавлен:
01.06.2015
Размер:
14.87 Кб
Скачать

Лабораторная работа 5. Индивидуальное задание Дан ряд (см. ваш вариант) . Найти сумму ряда аналитически. Вычислить значения частичных сумм ряда

и найти величину погрешности при значениях N={102, 103, 104, 105} . Определить количество верных цифр результатов.

Порядок решения задачи.

В MATLAB существует множество способов решения данной задачи, мы рассмотрим только один из них. Вначале вам следует повторить пример. Затем решить свою задачу. При этом следует копировать в текстовый файл (например WORD или Блокнот) из командного окна все вычисления и результаты по каждому пункту, с целью продолжения работы на следующем занятии или дома и в дальнейшем составлении отчета. 1. Найдем сумму ряда S аналитически с использованием средств Matlab.

>> syms n

>> S_inf=symsum(3/(n^2+5*n+6),n,0,inf)

S_inf =

3/2

>>

Пояснения:

а) в MATLAB, как и в других аналогичных системах, сумма от ноля до бесконечности может быть вычислена только аналитически; с этой целью необходимо определить переменную суммирования (в нашем случае n) с помощью специальной конструкции syms;

б) функция суммирования числовых рядов в MATLAB имеет вид:

symsum(an, n, n1, n2)

здесь an- член числового ряда, n - переменная суммирования, n1 - начальное значение переменной суммирования, n2 - конечное значение переменной суммирования;

в) в нашем случае в качестве n2 выступает бесконечнось; в MATLAB для обозначения бесконечности используется зарезервированное слово inf;

г) S_inf = 3/2 - так в MATLAB выводится результат расчетов; т.е. сумма ряда равна 1.5;

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

2. Для решения задачи сумм нам необходимо знать значение частичных сумм S(N). Решим эту задачу в общем случае:

>> syms N

>> S=symsum(3/(n^2+5*n+6),n,0,N)

и в результате получим:

S =

-3/(N+3)+3/2

Очевидно, что это означает:

Пояснения:

а) здесь мы вели еще одну символьную переменную N, поскольку снова выполняли аналитические преобразования; кроме того, данную переменную мы могли бы определить в пункте 1, если бы сразу написали >> syms n N ;

б) в MATLAB переменные n и N различные, т.е. регистр символов имеет значение;

в) в ваших задачах могут быть получены более сложные выражения.

3. Сформируем вектор N={102, 103, 104, 105}.

>> N=[10^2, 10^3, 10^4, 10^5]

N =

100 1000 10000 100000

>>

Пояснения:

а) операция ^ означает возведение в степень;

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

4. Вычислим значения частичных сумм Si = S (Ni) ряда при соответствующих значениях Ni.

>> S=-3.0./(N+3)+3/2

S =

1.4709 1.497 1.4997 1.5

Данный результат необходимо интерпретировать следующим образом:

i Ni S(Ni) 1 100 1.4709 2 1000 1.497 3 10000 1.4997 4 100000 1.5 Пояснения:

а) вместо выражения S(i)=-3.0./(N(i)+3)+3/2 для i=1,2,3,4 мы написали S=-3.0./(N+3)+3/2; это обычная практика в MATLAB - если в выражении участвует вектор, последовательно вычисляются значения для всех элементов вектора;

б) обратите внимание, написано -3.0./ ... , а не -3.0/ ... ; дело в том, что в MATLAB определены операции сложения или разности вектора с числом, но не определена операция деления числа на вектор [(N+3) есть вектор]; для таких случаев существует операция поэлементного деления ./ (точка+слэш); как мы узнаем позднее, такие же особенности присущи и некоторым другим арифметическим операциям с участием векторов;

5. Для каждой величины S ( Ni) вычислим абсолютную погрешность . О вычислительных погрешностях см. здесь.

Для вычисления абсолютной погрешности будем использовать встроенную функцию abs:

>> D=abs(S-3/2)

D =

0.0291 0.0030 0.0003 0.0000

Пояснения:

a) поскольку в вычислениях участвует вектор S, в результате мы также получаем вектор из четырех элементов D={0.0291, 0.0030, 0.0003, 0.0000} ;

б) это неправильный результат, говорящий нам о том, что при N = 105 погрешность вычисления равна нулю; для понимания причин данного результата рассмотрим возможные форматы представления чисел в MATLAB:

При вычислениях в MATLAB используется режим двойной точности. Однако, при выводе результатов, по умолчанию выдаются числа с 4 цифрами после десятичной точки в действительной форме. Чтобы изменить данную форму вывода, необходимо в программе перед выводимой величиной использовать команду format name, где name - имя формата. Для числовых данных name может быть следующим:

short - короткое представление в фиксированном формате (5 знаков) - используется по умолчанию;

short е - короткое представление в экспоненциальной форме (5 знаков мантиссы и 3 знака порядка);

long – длинное представление в фиксированном формате (15 знаков);

long е – длинное представление в экспоненциальной форме (15 знаков мантиссы и 3 знака порядка).

В качестве примера рассмотрим 2 числа: x = 5/3, y = 1.2783 e - 7

format x y format short 1.6667 0.0000 format short e 1.6667E+000 1.2783E – 007 format long 1.66666666666667 0.00000012783000 format long e 1.66666666666667E+000 1.27830000000000E – 007 Задание формата сказывается только на форме вывода чисел. Вычисления же происходят в режиме двойной точности, а ввод чисел осуществляется в любом удобном виде.

Т.е. мы увидим правильный результат, если введем следующие две строки:

>> format long

>> D

На экране мы увидим:

D 0.02912621359223 0.00299102691924 0.00029991002699 0.00002999910003 Хотя для отображения погрешности обычно пользуются следующим форматом:

>> format short e

>> D

На экране мы увидим:

D 2.9126e-002 2.9910e-003 2.9991e-004 2.9999e-005 Или, округляя (не в MATLAB) до одной значащей цифры, получим окончательный результат для абсолютной погрешности (в отчете):

1 2 3 4 3*10-2 3*10-3 3*10-4 3*10-5 6. Для каждой величины S ( Ni) вычислим относительную погрешность и определим количество верных цифр. О вычислительных погрешностях см. здесь.

>> d=D./1.5

d =

1.9417e-002 1.9940e-003 1.9994e-004 1.9999e-005

Далее вам следует самостоятельно округлить полученный результат до одной значащей цифры и заполнить таблицу (в отчете):

1 2 3 4 2*10-2 2*10-3 2*10-4 2*10-5 7. Для каждой величины S ( Ni) определим количество верных цифр. О вычислительных погрешностях см. здесь.

Введем вспомогательный вектор a, который в нашем случае примет вид:

>> a=[1 1 1 1];

В ваших вариантах данный вектор будет другим, почему?

Вычислим количество верных цифр:

>> n=1-log10(a.*d)

n =

2.7118e+000 3.7003e+000 4.6991e+000 5.6990e+000

Здесь log10 - функция вычисения десятичного логарифма, .* означает операцию поэлементного умножения двух векторов в отличие от скалярного произведения векторов *.

Округлим полученные значения до целых, меньших или равных n:

>> n=floor(n)

n =

2 3 4 5

8. Запишем численные значения найденных частичных сумм, округлив их до найденного ранее количества верных цифр.

Для этого нам необходимы более точные значения частичных сумм:

>> format long

>> S

S =

1.47087378640777 1.49700897308076 1.49970008997301 1.49997000089997

Окончательно округляем частичные суммы, оставляя только верные цифры:

S1 S2 S3 S4 1.5 1.50 1.500 1.5000 Анализ результатов проведите самостоятельно.

9. Построить график зависимости относительной погрешности в процентах от N. Отформатировать график (он будет являться приложением к отчету):

подписать оси координат;

нарисовать координатную сетку;

дать графику название;

и т.д.

Дополнительно, по указанию преподавателя.

10. Определить количество верных цифр для частичных сумм, используя понятие абсолютной погрешности (т.е. определение количества верных цифр). Сравнить результаты.

11. Провести анализ рабочей области. Какие характеристики переменных здесь приведены. Привести 1 - 2 примера в отчете. Как добавить или удалить данные столбцы - характеристики (описать в отчете)?

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