Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по КР-раб.doc
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
1.01 Mб
Скачать

Задание на курсовую работу по дисциплине «Информатика» ( далее ссылки на литературу приведены по литературе, указанной в Приложении 2)

Цели курсовой работы

  1. Изучить этапы разработки программного обеспечения.

  2. Получить навыки программирования на языке MATLAB.

  3. Освоить работу с функциями и массивами данных, получить навыки построения интерфейса пользователя.

Задание на курсовую работу

Разработать алгоритм и программную реализацию заданного математического метода в виде функции на языке программирования MATLAB в среде MatLab, FreeMat, Octave или SciLab. Разработанная функция должна быть снабжена пользовательским интерфейсом. Для недопустимых значений входных данных, при которых невозможно провести вычисления, должно отображаться сообщение об ошибке. Также необходимо провести сравнение разработанной функции со встроенными функциями используемого математического пакета (MatLab, FreeMat, Octave), решающими те же задачи.

Реализуемый математический метод определяется в соответствии вариантом. Варианты назначаются преподавателем.

Порядок выполнения курсовой работы

  1. построить алгоритм для указанного в задании математического метода и реализовать его в виде пользовательской функции (см. примечание 1 ниже);

  2. реализовать указанный в задании математический метод с использованием встроенных математических функций среды разработки (см. примечание 2 ниже);

  3. реализовать пользовательский интерфейс для упрощения взаимодействия конечного пользователя с разработанной функцией;

  4. сравнить работу пользовательских функций, полученных в результате выполнения пунктов 1 и 2.

Примечание 1: при выполнении пункта 1 задания запрещается использовать все математические и другие функции используемого математического пакета. Алгоритм необходимо реализовать с помощью базовых языковых конструкций, таких как for, while, if-else и т.п.

Примечание 2: при выполнении пункта 2 задания, в случае, если в используемом математическом пакете нет встроенной функции, реализующей указанный в задании математический метод, необходимо подобрать имеющуюся в математическом пакете функцию, наиболее близкую по смыслу решаемой ею задачи. Например, в пакете FreeMat не реализована интерполяция многочленами Лагранжа или по формуле Ньютона, однако связка функций polyfit и polyval решает задачу интерполяции многочленами методом наименьших квадратов. Следовательно, вместо интерполяции многочленами по Лагранжу или по Ньютону, при выполнении пункта 2 задания можно использовать функции polyfit и polyval.

Варианты заданий

Блок «интерполяция и экстраполяция»

  1. Интерполяция функции по формулам Лагранжа при равномерном расположении узлов ([1], с. 79).

  2. Интерполяция функции по методу Эйткена ([1], с. 80).

  3. Интерполяция функции полиномом Лагранжа при произвольном расположении узлов ([1], с. 80).

  4. Интерполяция функции методом Ньютона при произвольном расположении узлов ([1], с. 82).

  5. Интерполяция функции на множестве интервалов при равномерном расположении узлов с помощью кусочно-линейной функции ([1], с. 82).

  6. Интерполяция функции на множестве интервалов с помощью квадратичной функции ([1], с. 82).

  7. Интерполяция функции сплайнами (сплайн-интерполяция) ([1], с. 83).

  8. Интерполяция функции двух переменных ([1], с. 84).

  9. Многоинтервальная квадратичная интерполяция-аппроксимация функции двух переменных ([1], с. 85).

  10. Метод обратной интерполяции-экстраполяции ([1], с. 82, 90).

  11. Методом обратной квадратичной интерполяции-экстраполяции ([1], с. 90).

Блок «нелинейные и трансцендентные уравнения»

  1. Решение нелинейных и трансцендентных уравнений методом Ньютона ([1], с. 86).

  2. Решение нелинейных и трансцендентных уравнений методом простых итераций ([1], с. 86, 87).

  3. Решение нелинейных и трансцендентных уравнений методом Рыбакова ([1], с. 88).

  4. Решение нелинейных и трансцендентных уравнений методом поразрядного приближения ([1], с. 88).

  5. Решение нелинейных и трансцендентных уравнений методом подекадного приближения ([1], с. 89).

  6. Решение нелинейных и трансцендентных уравнений методом хорд ([1], с. 89).

  7. Решение нелинейных и трансцендентных уравнений методом секущих ([1], с. 89).

  8. Решение нелинейных и трансцендентных уравнений комбинированным методом секущих-хорд ([1], с. 89).

  9. Решение нелинейных и трансцендентных уравнений методом Эйтекена-Стеффенсона ([1], с. 90).

  10. Решение нелинейных и трансцендентных уравнений модифицированным методом Ньютона ([1], с. 87).

Блок «многомерная оптимизация»

  1. Минимизация функции N переменных методом координатного спуска ([1], с. 99).

  2. Минимизация функции N переменных методом спирального координатного спуска ([1], с. 99, 100).

  3. Минимизация функции N переменных методом квадратичной интерполяции-экстраполяции ([1], с. 99, 100).

Блок «поиск экстремальных значений»

  1. Поиск экстремумов функции методом равномерного поиска ([1], с. 96). Модифицировать алгоритм для поиска всех экстремумов на интервале с заданной погрешностью (шириной шага приращения) .

  2. Поиск экстремумов функции методом поразрядного приближения ([1], с. 96, 97).

  3. Поиск экстремумов функции методом дихотомии (деления пополам) ([1], с. 97).

  4. Поиск экстремумов функции методом "золотого сечения" ([1], с. 97).

  5. Поиск экстремумов функции методом квадратичной интерполяции-экстраполяции ([1], с. 97, 98).

Блок «численное интегрирование»

  1. Численное интегрирование функций методом Уэдля ([1], с. 106, 107).

  2. Численное интегрирование функций методом Ньютона-Котеса ([1], с. 105‑107).

  3. Численное интегрирование функций методом Чебышева ([1], с. 106, 107).

  4. Численное интегрирование функций методом Гаусса ([1], с. 106, 107).

  5. Численное интегрирование функций методом Гаусса с заданной точностью ([1], с. 106, 108).

  6. Численное интегрирование функций методом парабол (Симпсона) ([1], с. 108, 109).

  7. Вычисление несобственного интеграла методом Гаусса ([1], с. 108, 109)

  8. Численное интегрирование функций методом Монте-Карло ([2], раздел «Методы Монте-Карло»).

  9. Численное интегрирование функций методом прямоугольников (правых) ([2], раздел «Метод прямоугольников»; [3]).

  10. Численное интегрирование функций методом прямоугольников (левых) ([2], раздел «Метод прямоугольников» ; [3]).

  11. Вычисление двойного интеграла по простой формуле Симпсона ([1], с. 108, 109).

  12. Вычисление двойного интеграла по простой формуле Гаусса ([1], с. 110).

  13. Вычисление двойного интеграла по сложной формуле Гаусса ([1], с. 110).

Справка по функциям языка 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 может осуществляться с помощью функции inline, например, так: f=inline('x – x^2'). Вызов f(2) теперь вернет -2, а f(5) будет равно -20. Именно функция f и передается в качестве входных данных разрабатываемой функции. Выходным значением разрабатываемой функции должно быть найденное значение корня. Выходное значение должно выводиться пользователю.

Для заданий на поиск экстремума и многомерную оптимизацию на вход разрабатываемой функции в обязательном порядке должно подаваться имя функции (указатель на нее), осуществляющей вычисление целевой функции или (см. выше комментарий для заданий по решению нелинейных и трансцендентных уравнений). Остальные входные параметры определяются в зависимости от конкретного алгоритма и могут включать: интервал , на котором будет производиться поиск экстремумов; начальное значение , с которого начнется поиск экстремума; шаг поиска ; погрешность результата ; число переменных . В случае поиска экстремума, на выходе разрабатываемой функции должно быть число или вектор, содержащий значения , при которых функция имеет экстремум. В случае минимизации функции нескольких переменных на выходе разрабатываемой функции должен быть вектор размерности , содержащий значения абсцисс найденного экстремума. Ввод и вывод всех данных должен осуществляться через интерфейс пользователя с использованием промежуточных преобразований из строки в число, из строки в inline-функцию и т.п.

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

Пример использования inline-функции

% Зададим функцию f в виде строки s

s = 'x.^2';

f = inline(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, Command line interface) и графический пользовательский интерфейс (GUI, Graphical user interface).

Для взаимодействия с пользователем программа на основе интерфейса командной строки выводит на экран результат работы в виде текста, а пользователь вводит текст (команды и данные) на клавиатуре. Одним из примеров реализации такого интерфейса является командное окно сред MatLab, FreeMat и GNU Octave.

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

Выбор вида пользовательского интерфейса для разрабатываемой в рамках курсовой работы программы осуществляется на усмотрение студента. Необходимо иметь в виду, что полным набором функций для разработки графического интерфейса пользователя обладает лишь среда MatLab. Создание интерфейса командной строки, несомненно, намного проще, нежели разработка графического интерфейса. Вывод данных на экран осуществляется с помощью функций fprintf(...) или disp(...), а запрос на ввод данных с клавиатуры выполняет функция fscanf(...). Данные функции поддерживаются всеми математическими пакетами.

Выбор среды разработки

Язык программирования MATLAB используется в одноименном пакете прикладных программ, предназначенном для решения задач технических вычислений. Разработка среды MatLab и языка программирования MATLAB осуществляется компанией MathWorks. Помимо среды MatLab, которая является коммерческой, существует множество свободно распространяемых программных пакетов для решения задач численного анализа. Некоторые из них совместимы (или частично совместимы) со средой MatLab на уровне языка программирования. Это пакеты GNU Octave, FreeMat, Scilab. Основными недостатками свободно распространяемых математических пакетов по сравнению с коммерческой средой MatLab являются ограниченный набор математических функций и менее богатые графический интерфейс пользователя и интегрированная среда разработки (IDE).

Выбор среды разработки для выполнения курсовой работы студенту предлагается сделать самостоятельно. Курсовая работа может быть успешно выполнена в любом из следующих математических пакетов: MatLab, GNU Octave, FreeMat.

Литература

  1. Дьяконов В.П. Справочник по алгоритмам и программам для ПЭВМ. М.: Наука, 1987. 240 с. (издание 1989 г. – стереотипное)

  2. http://ru.wikipedia.org/wiki/Численное_интегрирование

  3. http://ru.wikipedia.org/wiki/Метод_прямоугольников

Приложение

Порядок установки среды GNU Octave с графической оболочкой в OC Windows XP/7

Среда GNU Octave является консольной, т.е. не имеет графического интерфейса. Однако существует множество различных графических оболочек для GNU Octave.

Одной из таких оболочек является GUI Octave, которую можно скачать с сайта http://guioctave.com. В разделе Download сайта указана версия среды GNU Octave, с которой работает графическая оболочка, а также приведены ссылки для скачивания среды GNU Octave и графической оболочки GUI Octave.

Перед установкой графической оболочки необходимо сначала установить саму среду GNU Octave нужной версии. Затем устанавливается графическая оболочка. После первого запуска оболочки, необходимо зайти в меню File\Options и на вкладке Octave указать путь к папке с исполняемыми файлами установленной версии среды GNU Octave. Например, это может быть путь “C:\Octave\3.2.4_gcc-4.4.0\bin”. Также необходимо убедиться, что установлена опция «Autoconnect on startup», автоматически подключающая графическую оболочку к среде GNU Octave при запуске. После сохранения новых настроек необходимо перезапустить графическую оболочку.

Для работы с некоторыми функциями в среде GNU Octave может потребоваться установка дополнительных расширений (toolbox’ов). При установке GNU Octave версии 3.2.4 в процессе установки пользователю предлагается выбрать, какие из toolbox’ов необходимо установить.

Расширения можно устанавливать самостоятельно (по одному). Для этого необходимо скачать нужные расширения с сайта http://octave.sourceforge.net/packages.php. Затем, для каждого скачанного расширения необходимо выполнить в командной строке GNU Octave следующую команду:

pkg install package_file_name.tar.gz

где package_file_name.tar.gz нужно заменить на путь и имя файла с расширением, скачанного по приведенной выше ссылке.

1.

2[2] К таким случаям следует отнести и те, в которых, хотя и существуют формулы для получения точного решения, но они столь громоздки, что использование приближенных методов оказывается более предпочтительным. Это относится, например, к алгебраическим уравнениям третьей и четвертой степени.

3