- •Основы работы и программирования, компьютерная математика Учебный курс
- •Isbn ооо «Харвест», 2008
- •Предисловие
- •Введение
- •Глава 1 знакомство с matlab и простейшие вычисления
- •1.1. Рабочая средаMatlab
- •1.2. Арифметические вычисления
- •1.3. Вещественные числа
- •1.4. Форматы вывода результата вычислений
- •1.5 Комплексные числа
- •1.6 Векторы и матрицы
- •1.7 Встроенные функции. Функции, задаваемые пользователем
- •1.8 Сообщения об ошибках и их исправление
- •1.9 Просмотр и сохранение переменных
- •1.10 Матричные и поэлементные операции над векторами и матрицами
- •1.11 Решение систем линейных уравнений
- •Вопросы для самопроверки
- •Глава 2 работа с массивами
- •2.1 Создание векторов и матриц
- •2.2 Применение команд обработки данных к векторам и матрицам
- •2.3 Создание специальных матриц
- •2.4 Создание новых массивов на основе существующих
- •2.5 Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры
- •Вопросы для самопроверки
- •Глава 3 м-файлы
- •3.1 Файл-программы
- •3.2 Файл-функции
- •Вопросы для самопроверки
- •Глава 4 программирование
- •4.1 Операторы отношения и логические операторы
- •4.2 Операторы цикла
- •4.3 Операторы ветвления
- •4.4 Оператор переключения switch
- •4.5 Оператор прерывания цикла break
- •4.6 Пример сравнения быстродействия матричных и скалярных операций
- •Вопросы для самопроверки
- •Глава 5 высокоуровневая графика
- •5.1 2D графика
- •5.1.1 Графики в линейном масштабе
- •5.2 Специальные виды 2d - графиков
- •5.2.1 Представление функции в виде дискретных отсчетов
- •5.2.2 Лестничные графики
- •5.2.3 Графики с указанием погрешности
- •5.2.4 Графики в логарифмическом и полулогарифмическом масштабах
- •5.2.5 Графики параметрических функций
- •5.3 3D графика
- •5.3.1 Линейчатые поверхности
- •5.3.2 Каркасные поверхности
- •5.3.3 Контурные графики
- •5.3.4 Сплошная освещенная поверхность
- •5.4 Оформление, экспорт и анимация
- •5.4.1 Оформление графиков
- •5.4.2 Сохранение и экспорт графиков
- •5.4.3 Анимация
- •Вопросы для самопроверки
- •Глава 6 прикладная численная математика
- •6.1 Операции с полиномами
- •6.2 Решение уравнений и их систем
- •6.3 Минимизация функции одной переменной
- •6.4 Минимизация функции нескольких переменных
- •6.5 Вычисление определенных интегралов
- •6.6 Решение дифференциальных уравнений
- •6.7 Аппроксимация и интерполяция данных
- •6.8 Интерполяция двумерных и многомерных данных
- •Вопросы для самопроверки
- •Глава 7 символьные вычисления
- •7.1 Символьные переменные, константы и выражения
- •7.2 Вычисления с использованием арифметики произвольной точности
- •7.3 Команды упрощения выражений – simplify, simple
- •7.4 Команда расширения выражений – expand
- •7.5 Разложение выражений на простые множители – команда factor
- •7.6 Приведение подобных членов – команда collect
- •7.7 Обеспечение подстановок – команда subs
- •7.8 Вычисление пределов – команда limit
- •7.9 Вычисление производных – команда diff
- •7.10 Вычисление интегралов – команда int
- •7.11 Разложение в ряд Тейлора – команда taylor
- •7.12 Вычисление суммы ряда – команда symsum
- •7.13 Решение уравнений и их систем – команда solve
- •7.14 Решение дифференциальных уравнений – команда dsolve
- •7.15 Прямое и обратное преобразования Лапласа – команды laplace,ilaplace
- •7.16 Графики символьных функций – команды ezplot, ezpolar
- •7.17 Прямой доступ к ядру системы Maple – командаmaple
- •7.18 Разложение рациональной дроби на сумму простейших дробей
- •7.19 Интерполяционный полином Лагранжа
- •7.20 Решение неравенств и систем неравенств
- •7.21 Разложение в ряд Тейлора функции нескольких переменных
- •7.22 Решение дифференциальных уравнений с помощью степенных рядов
- •7.23 Решение тригонометрических уравнений
- •Вопросы для самопроверки
- •Приложения Приложение 1. Справочная система matlab
- •Приложение 2. Знакомство с пакетами расширения системыMatlab
- •Приложение 3. Задания для самостоятельной работы
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Литература
6.3 Минимизация функции одной переменной
Поиск локального минимума функции одной переменной на некотором отрезке осуществляется командой fminbnd. Одна из модификаций fminbnd имеет вид fminbnd('file', x1,x2). Здесь
file – имя файл-функции, вычисляющей значение функции,
x1 и x2 – границы отрезка изоляции локального минимума.
Первый входной аргумент можно задать как указатель на файл-функцию @»file. О других модификациях команды fminbnd можно узнать с помощью команды doc fminbnd.
Найти локальные минимумы функции e-xcos2πx на отрезке [0;2]. Создадим файл-функцию gr, вычисляющую значение функции e-xcos2πx при заданном значении аргумента x:
function y=gr(x)
y=exp(-x)*cos(2*pi*x);
Перед нахождением локальных минимумов построим график исследуемой функции командой fplot (рис. 6.3):
>> fplot(@gr,[0,2])
Рис. 6.3
На рис. 6.3 видно, что исследуемая функция имеет два локальных минимума. Вычислим значение х, при котором достигается второй локальный минимум:
>> x2=fminbnd(@gr,1.4,1.6)
x2 =
1.4749
Итак, второй локальный минимум достигается при х ≈ 1,4779.
Для одновременного вычисления значения функции в точке минимума следует вызвать fminbnd с двумя аргументами:
>> [x2,f]=fminbnd(@gr,1.4,1.6)
x2 =
1.4749
f =
-0.2260
Найдите самостоятельно остальные локальные минимумы и максимумы. Для нахождения локального максимума нет специальной функции, очевидно, что нужно искать минимум функции с обратным знаком.
6.4 Минимизация функции нескольких переменных
Для поиска минимума функции нескольких переменных применяется команда fminsearch.
Использование команды продемонстрируем на примере нахождения локального минимума функции f(x,y)=sinsin, зависящей от двух переменных x и y. Сначала получим представление о поведении функции, построив ее линии уровня при помощи следующих команд (рис. 6.4):
>> [X,Y]=meshgrid(0:.01:2);
>> Z=sin(pi/2*X.^2).*sin(pi/2*Y.^2);
>> [CMatr,h]=contour(X,Y,Z,[-.9,-.5,-.1,.1,.5,.9]);
>> clabel(CMatr,h)
На графике, приведенном на рис. 6.4, видно расположение локальных минимумов и максимумов. Один из локальных минимумов имеет стартовое приближение (1;1,7) в системе координат xOy.
Рис. 6.4
Перед применением fminsearch необходимо создать файл-функцию, вычисляющую значения данной функции, причем аргументом файл-функции должен быть вектор, первый элемент которого соответствует переменной х, а второй – y. Приведем текст требуемой файл-функции:
function f=gr2(arg)
x=arg(1);
y=arg(2);
f=sin(pi/2*x.^2).*sin(pi/2*y.^2);
Теперь для уточнения координат точки минимума вызовем fminsearch с двумя входными аргументами – указателем на файл-функцию gr2 и стартовым приближением (1;1,7). В результате выходной аргумент – вектор M, возвращает координаты искомой точки минимума:
>> M=fminsearch(@gr2,[1,1.7])
M =
1.0000 1.7320
Для получения значения функции в точке минимума следует вызвать fminsearch с двумя выходными аргументами:
>> [M,f]=fminsearch(@gr2,[1,1.7])
M =
1.0000 1.7320
f =
-1.0000
Команды fzero, fsolve, fminbnd и fminsearch позволяют задать дополнительный параметр options, контролирующий вычислительный процесс. Значение options следует предварительно сформировать при помощи команды optimset в соответствии с характером требуемого контроля.
В разделе 6.3 найдено приближенное значение локального минимума функции e-xcos2πx. Представим результат в формате вывода long:
>> format long
>> [x2,f]=fminbnd(@gr,1.4,1.6)
x2 =
1.47489614357390
f =
-0.22596214557056
Задание максимальной точности eps нахождения локального минимума осуществляется при помощи следующих команд:
>> options=optimset('TolX',eps);
>> [x2,f]=fminbnd(@gr,1.4,1.6,options)
x2 =
1.47488038336724
f =
-0.22596214670612
Здесь eps – системная переменная MATLAB (см. разд. 1.2):
>> disp(eps)
2.220446049250313e-016
Аналогичным образом точность задается при нахождении корней и минимизации функции нескольких переменных. Об остальных параметрах команды optimset можно узнать с помощью команды doc optimset.
В следующем разделе проводится сравнение результатов вычислений с различной заданной точностью.