8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 119 120 121 122 123 124 125 ... 365

задачах. Коэффициент, на который следует умножать предыдущее слагаемое, равен отношению ak/ak x.

Файл-функция sumN, вычисляющая S(x), приведена в листинге 7.3. j Листинг 7.3. Файл-функция sumN для вычисления суммы , .

function Е ~ sumN(x, N) % ФАЙЛ-ФУНКЦИЯ ДЛЯ ВЫЧИСЛЕНИЯ СУММЫ %х/1! + хл2/2! + ... + хлЫ/Ы!

% использование: S = sum(x, N)

обнуление S для накопления суммы s = 0;

£начальное значение, соответствующее m = 0 u = 1 ;

% накопление суммы в цикле for ш = 1:Н

u = u.*x/m; s = s + и;

end

О назначении и способе вызова файл-функции sumN пользователь может узнать, набрав в командной строке help sumN. В командное окно выведутся первые три строки с комментариями, отделенные от текста файл-функции пустой строкой. Ясно, что для л = 1.5 и N = 10 функция sumN даст тот же результат, ЧТО И FORdem2 :

» S = sumN(1.5, 10) s =

3.4ВП

Обратите внимание, что внутренние или локальные переменные m и и файл-функции sumN не являются глобальными. Попытка просмотра значения переменной m или и из командной строки после выполнения файл-функции sumN приводит к сообщению о том, что функция, или переменная, не определена (разумеется, если она не была инициализирована до вызова sumN). Если в рабочей среде имеется глобальная переменная с тем же именем то, определенная из командной строки или в файл-программе, то она никак не связана с локальной переменной m в файл-функции. Как правило, лучше


оформлять собственные алгоритмы в виде файл-функций для того, чтобы переменные, используемые в алгоритме, не портили значения одноименных глобальных переменных рабочей среды. Впрочем при необходимости файл-функция может использовать глобальные переменные (см. разд. "Подфункции" главы 5).

Циклы for могут быть вложены друг в друга, при этом переменные вложенных циклов должны быть разными. Вложенные циклы удобны для заполнения матриц. Например, в разд. MATLAB: Programming: Basic Program Components: Program Control Statements: Loop Control — for, while, continue, break справочной системы MATLAB содержится пример заполнения матрицы Гильберта при помощи вложенных циклов. Элементы матрицы Гильберта порядка л определяются формулами aitj = l/(i + j -1), для i,j = 1,2, я .

Скопируйте пример в новый М-файл при помощи буфера обмена Windows, сохраните с именем HiLdem.m и продолжите работу с ним, как с файл-программой.

Примечание j,

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

Перед вычислением элементов матрицы целесообразно инициализировать ее при помощи функции zeros, которая создает массив, заполненный нулями. Иначе в цикле размеры массива будут динамически увеличиваться, что потребует дополнительного времени. Для вывода матрицы на экран достаточно добавить в конце файл-программы имя массива, содержащего матрицу. Следует снабдить части файл-программы комментариями. После небольших изменений в скопированном примере файл-программа HILdem выглядит так, как показано в листинге 7.4.

! Листинг 7.4. Файл-программа HILdem для нахождения матрицы Гильберта

% Задание размера матрицы п = 4;

% Инициализация матрицы и заполнение ее нулями а = zeros(п);

Ь Вычисление матрицы Гильберта порядка п for i = 1:п


for j = l:n

a(i, j) = l/{i + j - 1);

end

end

4 Вывод матрицы Гильберта на экран а

Запуск HlLdem приводит к выводу в командное окно матрицы Гильберта четвертого порядка и появлению в рабочей среде новой глобальной переменной — массива а размера четыре на четыре, содержащего элементы матрицы Гильберта.

Примечание

Инициализация любых используемых переменных считается хорошим стилем написания программ, она необходима во многих языках программирования. В MATLAB инициализация не обязательна, формально команду а = zeros (п) можно было пропустить, поскольку MATLAB автоматически увеличивает размеры массива по мере присвоения значений его элементам и выхода за верхнюю границу быть не может. Эта особенность может послужить источником ошибок. Пренебрежение инициализацией таит в себе еще одну опасность. Пусть в рабочей среде уже есть массив а размера 10 на 10, а в файл-программе HlLdem инициализация отсутствует. Тогда после выполнения HlLdem массив не изменит размеры, а элементы, строчные и столбцевые индексы которых превосходят четыре, останутся без изменений.

Поставим теперь задачу — исследовать границы спектра матрицы Гильберта для различных порядков матрицы (от первого до некоторого ы-го) и отобразить результат в виде графиков значений максимального и минимального собственных чисел в зависимости от размера матрицы. Для решения этой задачи требуется N раз выполнить операторы файл-программы HlLdem, приведенной в листинге 7.4, изменяя п от единицы до N. После вычисления матрицы Гильберта порядка п необходимо:

1.Найти ее спектр при помощи встроенной функции eig.

2.Определить границы спектра, т. е. максимальный и минимальный элемент вектора — аргумента eig.

3.Запомнить границы в элементах с индексом п некоторых вспомогательных векторов.

В конце следует визуализировать результат (операциям с матрицами, в частности, нахождению спектра, посвящен разд. "Задачи линейной алгебры" главы 6).



0 ... 119 120 121 122 123 124 125 ... 365