Сравнительная характеристика методик решения систем нелинейных алгебраических уравнений в средах 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


Решение СНАУ от двух переменных


Синтаксис:

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 - произведение Кронекера.

 

POLEQ


Вычисление компонентов  матрицы вспомогательной СНАУ


 

Синтаксис:

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.

Пакет СНАУ: нет.

 

 

SSNAE2, 
DSNAE2


Решение СНАУ от двух переменных


 

Синтаксис:

[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.

POLSOL


Формирование вспомогательной  СНАУ


 

 

Синтаксис:

[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.

 

REDUC


Редукция числа переменных СНАУ


Синтаксис:

Ay = reduc(Axy, x, sx)

Описание:

Функция Ay = reduc(Axy, x, sx) осуществляет редукцию числа переменных СНАУ путем подстановки найденного решения x.

Входные переменные:

  • Axy - матрица СНАУ;
  • x - найденное решение;
  • sx - максимальная степень переменной x.

Выходные переменные:

  • Ay - редуцированная матрица СНАУ;

Используемые функции:

MATLAB: max, size.

Пакет СНАУ: нет.

SOLSNAE1


Решение СНАУ от одной  переменной


Синтаксис:

solsnae1

Описание:

Демонстрационный Script-файл, предназначенный  для решения нелинейных алгебраических уравнений и систем таких уравнений от одной переменной.

% ********************************************************

%

% Решение 

% систем нелинейных алгебраических  уравнений (СНАУ)

% от одной переменной

% A*x = 0,

%

% ********************************************************

% A - матрица размера p*N;

% N - число столбцов матрицы A, равное длине вектора x;

% x - вектор алгебраической структуры

% sx jx

% [ x*..*x ... x*..*x ... 1 ],

%

% jx - степень переменной;

% sx - максимальная степень переменной.

%

SNAE2


Решение СНАУ от двух переменных


Синтаксис:

[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,                                   (2.15)

где Ap*N - матрица коэффициентов системы уравнений;  
x, y - векторы алгебраической структуры вида x = [xs...xj ...x 1]T, s = max j, ri = si +1;  
XN - кронекеровское произведение векторов xA y.

Алгебраическая структура вектора Xk позволяет свести задачу определения решения относительно переменных  
x1 .... xk к спектральной задаче для системы линейных сингулярных пучков вида [1, 3]

Информация о работе Сравнительная характеристика методик решения систем нелинейных алгебраических уравнений в средах MathCAD и MathLab