
- •Информатика
- •Этапы разработки программного обеспечения
- •Постановка задачи
- •Анализ, формальная постановка задачи и выбор метода решения
- •Разработка алгоритмов решения задачи
- •Реализация
- •Тестирование разработанных программных модулей
- •Пример разработки алгоритма
- •Примеры программ, реализующих рассмотренный алгоритм
- •Решение для заданной функции без диалога
- •Пример программы с простым диалогом
- •Структура и правила оформления пояснительной записки
- •Содержание
- •Перечень сокращений, условных обозначений, символов, единиц и терминов
- •Введение
- •Список использованных источников
- •Требования к оформлению работы
- •Шрифт, отступы, интервалы
- •Заголовки
- •Нумерация
- •Иллюстрации
- •Таблицы
- •Формулы
- •Приложение 1
- •Численное решение нелинейных уравнений § 1. Понятия и определения
- •Постановка задачи
- •Локализация корней
- •Уточнение корней
- •§ 2. Методы уточнения корней
- •Метод половинного деления (бисекции, дихотомии)
- •Метод хорд
- •Метод Ньютона (метод касательных)
- •Модифицированный метод Ньютона
- •Метод секущих
- •Метод простых итераций
- •Приложение 2
- •Порядок выполнения курсовой работы
- •Варианты заданий
- •Справка по функциям языка MatLab
- •Требования к входным и выходным данным разрабатываемой функции
- •Приложение
- •Приложение 3
Справка по функциям языка MatLab
Функции, реализующие различные алгоритмы интерполяции: polyfit, polyval, interp1, interp2, spline, pchip, ppval. Среды MatLab и GNU Octave поддерживают все эти функции.
Функции для решения нелинейных уравнений: fzero, fsolve.
Функции для оптимизации (поиска экстремумов) функций одной и нескольких переменных: fminbnd, fminsearch.
Функции численного интегрирования: trapz, quad, quadgk, quad2d, dblquad.
Из вышеперечисленного списка среда FreeMat версии 4.1 поддерживает только функции polyfit, polyval, interp2 и trapz. Среды MatLab и GNU Octave поддерживают все функции.
Требования к входным и выходным данным разрабатываемой функции
Для блока заданий посвященных интерполяции на вход разрабатываемой функции должен поступать вектор значений независимой переменной X (или несколько векторов X1, ..., Xn для функции нескольких переменных), вектор значений зависимой переменной Y и вектор X0 (или n векторов X01, …, X0n для функции n переменных) значений независимой переменной, для которых необходимо найти интерполированное значение функции. Ввод векторов должен осуществляться через интерфейс пользователя, с последующим преобразованием из строки в массив чисел. На выходе функция должна выдавать вектор интерполированных значений зависимой переменной Y0 в точках, указанных во входном векторе X0.
Для
блока заданий по решению нелинейных и
трансцендентных уравнений на вход
разрабатываемой функции должно подаваться
имя функции (указатель на функцию, т.н.
Function Handle в MatLab), осуществляющей вычисление
левой части уравнения
при заданном значении переменной
,
а также интервал
,
на котором ищется корень, и погрешность
.
Сама функция
вводится через интерфейс пользователя
в виде строки, например такой: 'x – x^2'.
Преобразование из строки в функцию MatLab может осуществляться с помощью 2-х функций: evalи анонимной функции.
Функция eval('выражение') интерпретирует и вычисляет текстовую строку, которая может содержать либо арифметическое выражение, либо инструкцию, либо обращение к функции.
Анонимная функция — в программировании особый вид функций, которые объявляются в месте использования и не получают уникального идентификатора для доступа к ним. Обычно при создании они либо вызываются напрямую, либо ссылка на функцию присваивается переменной, с помощью которой затем можно косвенно вызывать данную функцию.
В MatLabанонимная функция объявляется следующим способом:
F= @(x,y)x+y, где в скобках указываются переменные, которые будут использованы в функции, а после скобок указывается сама функция.
Пример преобразования строки в функцию:
f= eval( ['@(n,x)' 'x – x^2' ]).
Вызов f(2) теперь вернет -2, а f(5) будет равно -20. Именно функция f и передается в качестве входных данных разрабатываемой функции. Выходным значением разрабатываемой функции должно быть найденное значение корня. Выходное значение должно выводиться пользователю.
Для
заданий на поиск экстремума и многомерную
оптимизацию на вход разрабатываемой
функции в обязательном порядке должно
подаваться имя функции (указатель на
нее), осуществляющей вычисление целевой
функции
или
(см. выше комментарий для заданий по
решению нелинейных и трансцендентных
уравнений). Остальные входные параметры
определяются в зависимости от конкретного
алгоритма и могут включать: интервал
,
на котором будет производиться поиск
экстремумов; начальное значение
,
с которого начнется поиск экстремума;
шаг поиска
;
погрешность результата
;
число переменных
.
В случае поиска экстремума, на выходе
разрабатываемой функции должно быть
число или вектор, содержащий значения
,
при которых функция
имеет экстремум. В случае минимизации
функции нескольких переменных на выходе
разрабатываемой функции должен быть
вектор размерности
,
содержащий значения абсцисс
найденного экстремума. Ввод и вывод
всех данных должен осуществляться через
интерфейс пользователя с использованием
промежуточных преобразований из строки
в число, из строки в inline-функцию и т.п.
Применительно
к численным методам интегрирования на
вход разрабатываемой функции должен
поступать указатель на интегрируемую
функцию
(см. выше комментарий для заданий по
решению нелинейных и трансцендентных
уравнений) и интервал интегрирования
.
Остальные входные параметры выбираются
в зависимости от конкретного алгоритма.
На выходе функция должна возвращать
значение интеграла, вычисленное заданным
численным методом. Ввод и вывод данных
должен осуществляться через разработанный
интерфейс пользователя.
Пример использования eval и анонимной функций
% Зададим функцию f в виде строки s
s ='x.^2';
f =eval([@(x) s]); % перевод строки в функцию
a =0; % пределы интегрирования a и b
b =2;
% вычисление значений функции на концах интервала
f1=f(a);
f2=f(b);
% вывод в консоль:
disp(['f(x) = ', s])
disp(['a = ', num2str(a), ', b = ', num2str(b)])
disp(['f(a) = ', num2str(f1), '; f(b) = ', num2str(f2)])
%% Численное интегрирование методом трапеций
%с использованием готовой функции MatLab
%(см. [1], с. 104-105)
step =0.1; % шаг интегрирования
% шаг можно задать и по-другому:
%step=(b-a)/m, где m–число частей,
%на которые разбивается отрезок [a, b]
x =a:step:b; % делим отрезок [a, b] на части
y =f(x);
V1=step*trapz(y); % метод трапеций
V2=trapz(x,y); % значения x могут быть
%распределены неравномерно (с изменяемым шагом),
%тогда надо передавать параметр x в функцию trapz
% V1 равно V2 !
% вывод в консоль:
disp(['V1 = ', num2str(V1)])
disp(['V2 = ', num2str(V2)])
%% Проверка точности алгоритма (работает только в среде MatLab!)
% Интеграл от функции x^2 на интервале от 0 до 2 равен 2,(6)
% Для проверки вычисляем интеграл аналитически в MatLab
z = sym('z'); % объявляем символьную переменную
V3=int(z.^2, a, b); % интегрируем функцию z.^2 от a до b
disp(['V3 = ', char(V3), ' = ', num2str(double(V3))])
В результате работы этой программы в рабочую область среды программирования будет выведен следующий текст:
f(x) = x.^2
a = 0, b = 2
f(a) = 0; f(b) = 4
V1 = 2.67
V2 = 2.67
V3 = 8/3 = 2.6667
Разработка интерфейса пользователя
Существует два вида пользовательских интерфейсов: интерфейс командной строки(CLI,Commandlineinterface) играфический пользовательский интерфейс(GUI,Graphicaluserinterface).
Для взаимодействия с пользователем программа на основе интерфейса командной строки выводит на экран результат работы в виде текста, а пользователь вводит текст (команды и данные) на клавиатуре. Одним из примеров реализации такого интерфейса является командное окно сред MatLab,FreeMatиGNUOctave.
Использование графического пользовательского интерфейса позволяет пользователю управлять работой программы при помощи мыши, выбирая нужные пункты меню, нажимая на отображающиеся на экране кнопки, значки и т.д. Программы с графическим интерфейсом пользователя используют оконный интерфейс, когда каждая программа имеет одно или несколько окон, через которые взаимодействует с пользователем. Продолжая начатый ранее пример можно сделать вывод, что в рассматриваемых математических пакетах используется графический интерфейс пользователя, внутри которого встроен интерфейс командной строки.
Выбор вида пользовательского интерфейса для разрабатываемой в рамках курсовой работы программы осуществляется на усмотрение студента. Необходимо иметь в виду, что полным набором функций для разработки графического интерфейса пользователя обладает лишь среда MatLab. Создание интерфейса командной строки, несомненно, намного проще, нежели разработка графического интерфейса. Вывод данных на экран осуществляется с помощью функцийfprintf(...)илиdisp(...), а запрос на ввод данных с клавиатуры выполняет функцияfscanf(...). Данные функции поддерживаются всеми математическими пакетами.
Выбор среды разработки
Язык программирования MATLABиспользуется в одноименном пакете прикладных программ, предназначенном для решения задач технических вычислений. Разработка средыMatLabи языка программированияMATLABосуществляется компаниейMathWorks. Помимо средыMatLab, которая является коммерческой, существует множество свободно распространяемых программных пакетов для решения задач численного анализа. Некоторые из них совместимы (или частично совместимы) со средойMatLabна уровне языка программирования. Это пакетыGNUOctave,FreeMat,Scilab. Основными недостатками свободно распространяемых математических пакетов по сравнению с коммерческой средойMatLabявляются ограниченный набор математических функций и менее богатые графический интерфейс пользователя и интегрированная среда разработки (IDE).
Выбор среды разработки для выполнения курсовой работы студенту предлагается сделать самостоятельно. Курсовая работа может быть успешно выполнена в любом из следующих математических пакетов: MatLab,GNUOctave,FreeMat.
Литература
Дьяконов В.П. Справочник по алгоритмам и программам для ПЭВМ. М.: Наука, 1987. 240 с. (издание 1989 г. – стереотипное)
http://ru.wikipedia.org/wiki/Численное_интегрирование
http://ru.wikipedia.org/wiki/Метод_прямоугольников