- •§ 2.2. Командное окно системы matlab
- •§ 2.3. Рабочее пространство системы matlab
- •§ 2.4. Скаляры и массивы. Индексированные переменные
- •§ 2.5. Форматы представления вещественных чисел
- •§ 2.6. Арифметические выражения
- •2.6.1. Некоторая специфика использования вещественных данных
- •2.6.2. Некоторая специфика использования комплексных данных
- •2.6.3. Некоторые приемы работы с матрицами и векторами
- •2.6.4. Некоторые специфика выполнения арифметических и логических операций.
- •§ 2.7. Элементарные математические функции
- •Часть 2. Визуализация результатов вычислений
- •§ 2.8. Особенности графической подсистемы matlab
- •§ 2.9. Построение графиков функций одной переменной
- •2.9.1. Простые графики в декартовой системе координат.
- •2.9.2. Визуализация нескольких графиков.
- •2.9.3. Функция fplot.
- •2.9.4. Построение графиков в логарифмическом и полулогарифмическом масштабах.
- •2.9.5. Построение графиков в полярных координатах.
- •§ 2.10. Оформление графиков и графических окон
- •2.10.1. Выбор свойств линий.
- •2.10.2. Оформление осей координат.
- •2.10.3. Добавление надписей, заголовков и координатной сетки.
- •§ 2.11. Средства управления в графическом окне
- •§ 2.12. Общее знакомство с трехмерной графикой в matlab
- •2.12.1. Общий алгоритм визуализации функций двух переменных.
- •2.12.2. Построение трехмерных линий.
- •2.12.3. Построение поверхностей.
- •2.12.4. Задание дополнительных параметров трехмерных графиков.
- •2.12.5. Построение линий уровня.
- •2.12.6. Построение траектории точки, движущейся в пространстве.
- •2.12.7. Интерактивное редактирование графиков.
- •Часть 3. Вычисления с действительными и комплексными массивами чисел
- •§ 2.13. Операции отношения и логические операции над числами
- •2.13.1. Операции отношения.
- •2.13.2. Логические операции.
- •2.13.3. Приоритет операций.
- •§ 2.14. Формирование одномерных числовых массивов
- •2.14.1. Задание одномерных массивов и доступ к их элементам.
- •2.14.2. Об ускорении операций задания массива.
- •2.14.3. Об использовании операции формирования диапазона.
- •§ 2.15. Матрицы и векторы. Двумерные массивы чисел
- •2.15.1. Создание матриц и векторов.
- •2.15.2. Доступ к отдельным фрагментам матриц.
- •2.15.3. Удаление строк и столбцов матрицы.
- •2.15.4. Использование функций перестановки частей матриц.
- •2.15.5. Определение размеров и размерностей массивов.
- •2.15.6. Использование операций индексации.
- •2.15.7. Изменение размеров массива.
- •2.15.8. Специальные функции формирования массивов.
- •§ 2.16. Вычисления с массивами
- •2.16.1. Поэлементные и групповые операции над массивами.
- •2.16.2. Решение некоторых типовых задач линейной алгебры и аналитической геометрии.
- •2.16.3. Применение операций отношения и логических операций к массивам.
- •2.16.4. Некоторые функции для работы с массивами.
- •Часть 4. Стандартные средства решения некоторых типовых задач линейной алгебры и математического анализа
- •§ 2.17. Решение систем линейных алгебраических уравнений
- •§ 2.18. Решение некоторых задач линейной алгебры. Матричные функции
- •§ 2.19. Разреженные матрицы
- •§ 2.20. Решение нелинейных уравнений
- •§ 2.21. Поиск минимального значения функции
- •§ 2.22. Численное интегрирование
- •2.22.1. Использование метода трапеций.
- •2.22.2. Использование методов Симпсона и Гаусса-Лобатто.
- •2.22.3. Вычисление двойных интегралов.
- •§ 2.23. Операции над полиномами
- •2.23.1. Вычисление значения полинома.
- •2.23.2. Вычисление корней полинома.
- •2.23.3. Умножение и деление полиномов.
- •2.23.4. Дифференцирование и интегрирование полиномов.
- •§ 2.24. Интерполяция и аппроксимация данных
- •2.24.1. Полиномиальная аппроксимация.
- •2.24.2. Интерполяция сплайнами.
- •Часть 5. Символьные вычисления
- •§ 2.25. Создание символьных переменных, выражений и матриц
- •2.25.1. Создание символьных переменных.
- •2.25.2. Создание символьных выражений.
- •2.25.3. Создание символьных матриц.
- •§ 2.26. Символьные вычисления
- •2.26.1. Символьное дифференцирование.
- •2.26.2. Вычисление пределов.
- •2.26.3. Символьное интегрирование.
- •2.26.3. Вычисление суммы ряда. Разложение функций в ряды.
- •2.26.4. Упрощение выражений. Подстановки.
- •2.26.5. Управление точностью вычислений.
- •2.26.6. Операции над векторами. Операции над матрицами. Некоторые операции линейной алгебры.
- •2.26.7. Решение уравнений и систем уравнений.
- •§ 2.27. Визуализация результатов символьных вычислений
- •2.27.1. Построение двумерных графиков.
- •2.27.2. Построение трехмерных графиков.
- •Часть 6. Основы программирования на m-языке
- •§ 2.28. Основные понятия программирования в системе matlab
- •2.28.1. Назначение языка программирования matlab.
- •2.28.2. Основные средства программирования.
- •2.28.3. Основные типы данных.
- •2.28.4. Виды программирования.
- •2.28.5. Двойственность операторов, команд и функций.
- •2.28.6. Некоторые ограничения.
- •§ 2.29. Создание и использование m-файлов
- •2.29.1. Понятие об m-файлах.
- •2.29.2. Типы m-файлов.
- •2.29.3. Создание файл-программ.
- •2.29.4. Создание файл-функций.
- •2.29.5. Глобализация переменных и функций.
- •2.29.6. Синтаксический контроль программ.
- •§ 2.30. Управляющие структуры
- •2.30.1. Понятие об управляющих структурах.
- •2.30.2. Операторы цикла.
- •2.30.3. Операторы ветвления.
- •2.30.4. Прочие операторы.
- •§ 2.31. Работа с файлами
- •2.31.1. Общие замечания.
- •2.31.2. Подготовка файла к работе.
- •2.31.3. Завершение работы с файлами.
- •2.31.4. Контроль за исчерпанием данных.
- •2.31.5. Чтение из текстового файла.
- •2.31.6. Анализ ошибок в файловых операциях.
- •§ 2.32. Форматный ввод-вывод данных
- •2.32.1. Форматные преобразования (sprintf, sscanf).
- •2.32.2. Форматные преобразования при работе с файлами (fprintf, fscanf).
- •§ 2.33. Рекурсивные файл-функции. Производительность файл-функций
- •2.33.1. Понятие о рекурсивных файл-функциях.
- •2.33.2. Оценка производительности файл-функции.
- •§ 2.34. Файл-функции с переменным числом входных параметров и выходных значений
- •§ 2.35. Диалоговые программы
- •2.35.1. Ввод числовых и символьных данных.
- •2.35.2. Вывод результатов вычислений.
- •§ 2.36. Анимационные эффекты
- •§ 2.37. Контроль входных и выходных параметров файл-функции
- •§ 2.38. Отладка программы
- •2.38.1. Понятие о способах отладки программы.
- •2.38.2. Рекомендации по созданию и отладке программ.
- •Часть 7. Создание программ с визуальным интерфейсом
- •§ 2.39. Понятие о графическом интерфейсе пользователя (gui)
- •2.39.1. Предварительные замечания.
- •2.39.2. Основные команды для создания gui.
- •§ 2.40. Общие сведения о визуальной среде guide
- •§ 2.41. Программирование событий в matlab
- •§ 2.42. Свойства основных компонентов в matlab
- •§ 2.43. Диалоговые окна в matlab
- •§ 2.44. Динамическое создание компонентов
- •§ 2.45. Создание меню
- •§ 2.46. Некоторые рекомендации по созданию приложений с графическим интерфейсом пользователя
§ 2.21. Поиск минимального значения функции
В системе MATLAB имеются функции, осуществляющие поиск минимальных значений (минимумов) заданных функций, причем как для функций одной переменной, так и для функций многих переменных.
В частности, для отыскания минимума функции одной переменной используется функция fminbnd:
fminbnd(hFunction,x0,xl)
где hFunction – дескриптор функции, для которой находится минимум; x0 и xl задают границы отрезка поиска.
Рассмотрим использование данной функции
на примере поиска минимума многочлена
на отрезке
.
Для построения графика обратимся к
функции fplot
(рис. 2.21.1):
>> f=inline('x^4+4*x^3-6*x^2+12*x-1','x')
f =
Inline function:
f(x) = x^4+4*x^3-6*x^2+12*x-1
>> fplot(f,[-5 5])
Согласно рис. 2.21.1, минимум рассматриваемой
функции
существует на отрезке
.
Для нахождения минимума будем иметь:
>> fminbnd(f,-5,-3)
ans =
-3.9514
Для одновременного определения минимума и соответствующего значения в точке минимума следует использовать следующий синтаксис вызова функции fminbnd:
>> [x,y]=fminbnd(f,-5,-3)
x =
-3.9514
y =
-145.0966
Для поиска минимума функции нескольких переменных используется функция fminsearch:
fminsearch(hFunction,x0)
где hFunction – дескриптор функции нескольких переменных, для которой находится минимум; x0 – вектор аргументов функции, с которого начинается поиск минимума.
Продемонстрируем использование данной
функции на примере поиска минимума
функции
.
Имеем:
>> f=inline('x(1)^2+x(2)^2','x')
Рис. 2.20.1. График функции .
Рис. 2.21.1. График функции .
f =
Inline function:
f(x) = x(1)^2+x(2)^2
>> xmin=fminsearch(f,[1 1])
xmin =
1.0e-04 *
-0.2102 0.2548
Отметим, что для функции нескольких переменных большое значение (более существенное, чем для функции одной переменной) имеет предварительная оценка количества и приблизительного расположения локальных минимумов. Полезным здесь может оказаться опять-таки предварительное построение графика рассматриваемой функции.
Для получения сведений о количестве итераций, которое было сделано системой MATLAB для получения уточненного результата, необходимо обратиться к функции fminsearch следующим образом:
[xmin,val,flag,output]=fminsearch(hFun,x0)
где output – объект, содержащий полную информацию о процессе нахождения минимума функции. В частности, в поле output.iterations находится количество совершенных итераций. Для вывода соответствующего значения на экран следует использовать следующий синтаксис обращения:
>> [x,val,flag,output]=fminsearch(f,[1 1])
x =
1.0e-04 *
-0.2102 0.2548
val =
1.0915e-09
flag =
1
output =
iterations: 38
funcCount: 69
algorithm: 'Nelder-Mead simplex direct search'
message: 'Optimization terminated:
the current x satisfies the termination criteria using ...'
§ 2.22. Численное интегрирование
2.22.1. Использование метода трапеций.
Одной из основных проблем численного анализа является задача вычисления определенных интегралов [104,125]. Одним из наиболее часто используемых методов численного (приближенного) интегрирования является метод трапеций, который в системе MATLAB реализует функция trapz:
trapz(x,y)
где x – вектор, содержащий дискретные значения аргументов подынтегральной функции; y – вектор, содержащий соответствующие значения подынтегральной функции.
Результатом данного обращения будет
вычисление площади криволинейной
трапеции, расположенной под графиком
соответствующей функции
,
в котором все точки, заданные векторами
x
и y,
соединены прямыми. Для интегрирования,
как правило, выбирают равномерную сетку,
т.е. значения элементов вектора x
задаются отстоящими друг от друга на
определенную величину, именуемую шаг
интегрирования. Разумеется, чем меньше
шаг интегрирования, тем больше точность
вычисления интеграла.
Заметим, что если вектор x в приведенном обращении отсутствует (т.е. не задан) и обращение имеет вид trapz(y), то по умолчанию предполагается, что шаг интегрирования является постоянным и равным единице.
Пусть требуется вычислить интеграл
,
где
;
;
.
Следовательно, будем иметь:
>> a=0; b=3;
>> dx=0.01;
>> x=a:dx:b;
>> y=1-x+x.^2-x.^3;
>> trapz(x,y)
ans =
-12.750175000000000
Для простейшей оценки точности численного интегрирования определим тот же интеграл, используя меньшим в два раза шаг интегрирования:
>> a=0; b=3;
>> dx=0.005;
>> x=a:dx:b;
>> y=1-x+x.^2-x.^3;
>> trapz(x,y)
ans =
-12.750043750000000
Сопоставление полученных результатов позволяет заключить, что значения интеграла при использовании шагов интегрирования 0.01 и 0.005, отличаются в четвертом знаке после запятой. Итак, можно считать, что в пределах первых трех знаков после запятой результат является точным.
Метод трапеций является достаточно эффективным при интегрировании не слишком гладких функций. Если же подынтегральная функция является достаточно гладкой (т.е. существуют непрерывные производные этой функции нескольких порядков) целесообразно использовать методы численного интегрирования более высоких порядков точности (при одном и том же шаге интегрирования эти методы в общем случае позволяют получить более точные, по сравнению с методом трапеций, результаты).
