Сравнительная характеристика методик решения систем нелинейных алгебраических уравнений в средах MathCAD и MathLab
Автор работы: Пользователь скрыл имя, 08 Октября 2013 в 16:31, курсовая работа
Краткое описание
Актуальность рассматриваемой задачи: Высокая. Никак нельзя отрицать, что СНАУ применяются крайне часто для решения любых классов задач. Проблема решения СНАУ никогда не канет в лету. Системы уравнений это один из базисов математики. Также всем известно, что при описании сложных процессов никак нельзя пользоваться только одним уравнением, приходится использовать системы из уравнений. А значит крайне важно знать и уметь решать такие системы. Тем более важно знать различные методы и способы их решения. К счастью для этого существуют прекрасные программы, которые ускоряют само решение, а также пресекают даже саму возможность получения ошибки вычисления связанной с невнимательностью присущей человеку. Это замечательно, ведь освоив всего один такой метод, можно быстро решать целые классы задач. В данной работе рассмотрены две программы MathCAD и MathLab прекрасной фирмы Math Works, Inc. Эти программы позволяют решать СНАУ быстро и надежно, а средства для решения этих задач представлены ниже.
Содержание
Цель работы и Актуальность проблемы
Введение
Решение Систем Нелинейных Алгебраических уравнений в среде MathCAD
Одно уравнение с одним неизвестным
Корни полинома
Системы уравнений
О численных методах решения систем уравнений
Приближенное решение уравнений
Символьное решение уравнений
Решение Систем Нелинейных Алгебраических уравнений в среде MathLab
Описание функций для решения СНАУ
Алгоритм решения СНАУ
Сравнительная характеристика методик Систем Нелинейных уравнений в средах MathCAD и MathLab.
Список использованной литературы
Вложенные файлы: 1 файл
Федеральное государственное образовательное учреждение.doc
— 495.00 Кб (Скачать файл)1.5. Приближенное решение уравнений
Иногда приходится заменять задачу
отделения корней системы уравнений
задачей поиска экстремума функции многих
переменных. Например, когда невозможно
найти решение с помощью функции Find, можно
попытаться потребовать вместо точного
выполнения уравнений условий минимизировать
их невязку. Для этого следует в вычислительном
блоке вместо функции Find использовать
функцию Minerr, имеющую тот же самый набор
параметров. Она также должна находиться
в пределах вычислительного блока:
1. xi:=d ... хм: =см - начальные
значения для неизвестных.
2. Given - ключевое слово.
3. Система алгебраических уравнений и
неравенств, записанная логическими операторами.
4. Minerr (xi,... ,хм) - приближенное решение
системы относительно переменных xi,...
,хм, минимизирующее невязку системы
уравнений.
Пример использования функции Minerr показан
в листинге 1.9. Как видно, достаточно заменить
в вычислительном блоке имя функции на
Minerr, чтобы вместо точного (с точностью
до TOL) получить приближенное решение уравнения,
заданного после ключевого слова Given.
Листинг 1.9. Приближенное
решение уравнения,имеющего корень (х=о,у=0)
Листинг 1.9 демонстрирует приближенное
решение уравнения k-x2+y2=o, которое
при любом значении коэффициента k имеет
единственный точный корень (х=о,у=0). Тем
не менее при попытке решить его функцией
Find для больших k, порядка принятых в листинге,
происходит генерация ошибки"No solution was found"
(Решение не найдено). Это связано с иным
поведением функции f (x,y)=k-x2+y2
вблизи ее корня, по сравнению с функциями,
приводимыми в качестве примеров выше
в этой главе (см. рис. 1.1, 1.2).В отличие от
них f (х,у) не пересекает плоскость f (х,у)=о,
а лишь касается ее (рис. 1.7) в точке (х=о,у=0).
Поэтому и найти корень изложенными в
предыдущем разделе градиентными методами
сложнее, поскольку вблизи корня производные
f (х,у) близки к нулю, и итерации могут уводить
предполагаемое решение далеко от корня.
Ситуация еще более ухудшается, если наряду
с корнем типа касания (см.рис. 1.7) имеются
(возможно, весьма удаленные) корни типа
пересечения.
Тогда попытка решить уравнение или систему
уравнений с помощью функции Find может
приводить к нахождению корня второго
типа, даже если начальное приближение
было взято очень близко к первому. Поэтому
если вы предполагаете, что система уравнений
имеет корень типа касания, намного предпочтительнее
использовать функцию Minerr, тем более, что
всегда есть возможность проверить правильность
решения уравнений простой подстановкой
в них полученного решения (см. листинг
1.6).
Рис. 1.7. График
функции k-x2+y2
В листинге 1.9 мы рассмотрели пример нахождения
существующего решения уравнения. Приведем
в заключение пример нахождения функцией
Minerr приближенного решения несовместной
системы уравнений и неравенств (листинг
1.10). Решение, выдаваемое функцией Minerr,
минимизирует невязку данной системы.
Листинг 1.10. Приближенное
решение несовместной системы уравнений
и неравенств
Как видно из листинга, в качестве результата
выдаются значения переменных, наилучшим
образом удовлетворяющие уравнению и
неравенствам внутри вычислительного
блока. Внимательный читатель может обнаружить,
что решение, выдаваемое функцией Minerr
в рассматриваемом примере, неявляется
единственным, поскольку множество пар
значений (х,у) в равной степени минимизирует
невязку данной системы уравнений и неравенств,
Поэтому для различных начальных значений
будут получаться разные решения, подобно
тому, как разные решения выдаются функцией
Find в случае бесконечного множества. Еще более опасен
случай, когда имеются всего несколько
локальных минимумов функции невязки.
Тогда неудачно выбранное начальное приближение
приведет к выдаче именно этого локального
минимума, несмотря на то, что другой (глобальный)
минимум невязки может удовлетворять
системе гораздо лучше.
1.6. Символьное решение
уравнений
Некоторые уравнения можно решить
точно с помощью символьного
процессора MathCAD. Делается это очень
похоже на численное решение уравнений
с применением вычислительного
блока. Присваивать неизвестным начальные значения нет необходимости.
Листинги 8.11 и 8.12 демонстрируют символьное
разрешение уравнения с одним неизвестным
и системы двух уравнений соответственно.
Листинг 1.11. Символьное
решение алгебраического уравнения с
одним неизвестным
Листинг 1.11. Символьное
решение системы алгебраических уравнений
Как видно, вместо знака равенства после
функции Find в листингах следует знак символьных
вычислений, который можно ввести с панели Symbolic(Символика)
или, нажав клавиши <Ctrl>+<.>. Не Забывайте,
что сами уравнения должны иметь вид логических
выражений, т. е. знаки равенства нужно
вводить с помощью панели Booleans (Булевы
операторы). Обратите внимание, что в листинге
1.12 вычислены как два первых действительных
корня, которые мы уже находили численным
методом. С помощью символьного процессора
решить уравнение с одним неизвестным
можно и по-другому:
1. Введите уравнение, пользуясь панелью Booleans (Булевы
операторы) или нажав клавиши <Ctrl>+<>
для получения логического знака равенства,
например, х2+2-х-4=о.
2. Щелчком мыши выберите переменную, относительно
которой вы собираетесь решить уравнение.
3. Выберите в меню Symbolics (Символика)
пункт Variable / Solve(Переменная
/ Решить).
После строки с уравнением появится строка
с решением или сообщение о не возможности
символьного решения этого уравнения.
В данном примере после осуществления
описанных действий появляется вектор,
состоящий из двух корней уравнения
Символьные вычисления могут производиться
и над уравнениями, в которые, помимо неизвестных,
входят различные параметры. В листинге
1.13 приведен пример решения уравнения
четвертой степени с параметром а. Как
видите, результат получен в аналитической
форме.
Листинг 1.13. Символьное
решение уравнения, зависящего от параметра
В следующем разделе мы рассмотрим более
подробно, как с помощью MathCAD можно численными
методами решать подобные задачи.
Решение Систем Нелинейных Алгебраических уравнений в среде MathLab.
Свое описание решения СНАУ в MathLab я начну с описания функций, которые используются в данной среде для решения. Затем опишу некоторые способы решения и примеры реализаций данной задачи в MathLab.
2.1. Описание функций для решения СНАУ
В этом разделе описаны функции, составляющие основу пакета SNAE. Имена файлов совпадают с именами соответствующих функций. Далее пойдут комментарии с указанием назначения и правил обращения к данной функции. Функции расположены в алфавитном порядке.
- demosnae - решение СНАУ от двух переменных (2.1)
- poleq - вычисление компонентов матрицы вспомогательной СНАУ (2.2)
- polsol - формирование вспомогательной СНАУ (2.3)
- reduc - редукция числа переменных СНАУ (2.4)
- solsnae1 - решение СНАУ от одной переменной (2.5)
- solsnae2 - решение СНАУ от двух переменных (2.6)
- snae1 - решение СНАУ от одной переменной (2.7)
- snae2 - решение СНАУ от двух переменных (2.8)
- ssnae2, dsnae2 - решение СНАУ от двух переменных (2.9, 2.10 )
|
Решение СНАУ от двух переменных |
Синтаксис:
demosnae
Описание:
Демонстрационный Script-файл, предназначенный для решения систем нелинейных алгебраических уравнений от двух переменных.
% ******************************
% Решение
% систем нелинейных алгебраических уравнений (СНАУ)
% от двух переменных:
% Axy*[x**y] = 0,
% ******************************
% Axy - матрица размера p*N;
% N - число столбцов матрицы Axy;
% x, y - вектора алгебраической
% sx jx
% [ x*..*x ... x*..*x ... 1 ],
% sy jy
% [ y*..*y ... y*..*y ... 1 ]
% jx, jy - степени переменных;
% sx, sy - максимальные степени
% x**y - произведение Кронекера.
|
Вычисление компонентов матрицы вспомогательной СНАУ |
Синтаксис:
Slx = poleq(a, b, t, n1, n2)
Описание:
Функция Slx = poleq(a, b, t, n1, n2) вычисляет составляющие матрицы для вспомогательной СНАУ вида
Входные переменные:
- a, b - матрицы пучка D(x)=a-x*b;
- t - степень полиномиального решения;
- n1, n2 - диапазон столбцов, выделяемых из Slx.
Используемые функции
MATLAB: max, round, eval, size, zeros.
Пакет СНАУ: нет.
|
Решение СНАУ от двух переменных |
Синтаксис:
[x, y, err] = ssnae2(Axy, P, sx, sy, nv)
[x, y, err] = dsnae2(Axy, P, sx, sy, nv)
Описание:
Функция [x, y, err] = ssnae2(Axy, P, sx, sy, nv) решает системы нелинейных алгебраических уравнений от двух переменных x и у.
Функция [x, y, err] = dsnae2(Axy, P, sx, sy, nv) выполняет те же операции и предназначена для демонстрационной версии.
Входные переменные:
- Axy - матрица коэффициентов СНАУ;
- Р - матрица перестановок;
- sx - максимальная степень переменной x;
- sy - максимальная степень переменной y;
- nv - длина вектора свободных переменных.
Выходные переменные:
- {x,y} - пары решений СНАУ;
- err - символьная переменная, принимающая значения:
- infinity - СНАУ имеет бесчисленное множество решений или приводима;
- none_solution - СНАУ не имеет решений.
Используемые функции:
MATLAB: null.
Пакет СНАУ: pencil, solssp, reduc, snae1.
|
Формирование вспомогательной СНАУ |
Синтаксис:
[Dflx, Dfly, alrlx, alrly] = polsol(Dx, Dy, t, v)
Описание:
Функция [Dflx, Dfly, alrlx, alrly] = polsol(Dx, Dy, t, v) формирует
вспомогательную систему
Входные переменные:
- Dx, Dy - сингулярные пучки ax - x*bx, ay - y*by;
- t, v - степени полиномиальных решений по переменным x и y.
Выходные переменные:
- Dflx, Dfly - регулярные пучки вспомогательной СНАУ;
- D0lx, D0ly - сингулярные пучки вспомогательной СНАУ.
Используемые функции:
MATLAB: length, rank, size.
Пакет СНАУ: ker, pencil, poleq, pr_table, struct.
|
Редукция числа переменных СНАУ |
Синтаксис:
Ay = reduc(Axy, x, sx)
Описание:
Функция Ay = reduc(Axy, x, sx) осуществляет редукцию числа переменных СНАУ путем подстановки найденного решения x.
Входные переменные:
- Axy - матрица СНАУ;
- x - найденное решение;
- sx - максимальная степень переменной x.
Выходные переменные:
- Ay - редуцированная матрица СНАУ;
Используемые функции:
MATLAB: max, size.
Пакет СНАУ: нет.
|
Решение СНАУ от одной переменной |
Синтаксис:
solsnae1
Описание:
Демонстрационный Script-файл, предназначенный для решения нелинейных алгебраических уравнений и систем таких уравнений от одной переменной.
% ******************************
%
% Решение
% систем нелинейных
% от одной переменной
% A*x = 0,
%
% ******************************
% A - матрица размера p*N;
% N - число столбцов матрицы A, равное длине вектора x;
% x - вектор алгебраической
% sx jx
% [ x*..*x ... x*..*x ... 1 ],
%
% jx - степень переменной;
% sx - максимальная степень
%
|
Решение СНАУ от двух переменных |
Синтаксис:
[x, y, err] = snae2(Axy, sx, sy)
Описание:
Функция [x, y, err] = snae2(Axy, sx, sy) решает системы нелинейных алгебраических уравнений от двух переменных x и у.
Входные переменные:
- Axy - матрица коэффициентов СНАУ;
- sx - максимальная степень переменной x;
- sy - максимальная степень переменной y.
Выходные переменные:
- {x, y} - решения СНАУ;
- err - строковая переменная, которая может принимать одно из двух значений:
- 'Infinity' - количество решений бесконечно;
- 'None_solution' - СНАУ не имеет решений или приводима.
Используемые функции:
MATLAB: null.
ППП СНАУ: pencil, solssp, reduc, rmovstr, snae1. (2.11, 2.12, 2.13, 2.14).
2.2. Алгоритм решения СНАУ
Рассмотрим подробно алгоритм решения систем нелинейных алгебраических уравнений (СНАУ) от двух переменных вида:
Ap*N [x
y] = 0,
где Ap*N - матрица коэффициентов системы
уравнений;
x, y - векторы алгебраической структуры
вида x = [xs...xj ...x 1]T, s = max j, ri = si +1;
XN - кронекеровское произведение
векторов xA y.
Алгебраическая структура
x1 .... xk к спектральной задаче
для системы линейных сингулярных пучков
вида [1, 3]