Как записать систему уравнений в mathcad

REDMOND

Given в маткаде это

Здесь f1(x1, . ,хм) , . fn(x1, . ,хм) — некоторые скалярные функции от скалярных переменных хцх2/ . /хм и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему (1) можно формально переписать в виде

где х — вектор, составленный из переменных x1,х2, . ,хм, a f (х) — соответствующая векторная функция.

Для решения систем имеется специальный вычислительный блок, состоящий из трех частей, идущих последовательно друг за другом:

  • Given — ключевое слово;
  • система, записанная логическими операторами в виде равенств и, возможно, неравенств;
  • Find(x1. ,хм) — встроенная функция для решения системы относительно переменных хх. хм.

Вставлять логические операторы следует, пользуясь панелью инструментов Boolean (Булевы операторы). Если Вы предпочитаете ввод с клавиатуры, помните, что логический знак равенства вводится сочетанием клавиш + . Блок Given/Find использует для поиска решения итерационные методы, поэтому, как и для функции root, требуется задать начальные значения для всех х1, . ,xм. Сделать это необходимо до ключевого слова Given. Значение функции Find есть вектор, составленный из решения пс каждой переменной. Таким образом, число элементов вектора равно число аргументов Find.

В листинге 8.6. приведен пример решения системы двух уравнений.

Листинг 8.6. Решение системы уравнений

В первых двух строках листинга вводятся функции, которые определяют систему уравнений. Затем переменным х и у, относительно которых она будет решаться, присваиваются начальные значения. После этого следует ключевое слово Given и два логических оператора, выражающих рассматриваемую систему уравнений. Завершает вычислительный блок функция Find, значение которой присваивается вектору v. Следующая строка показывает содержание вектора v, т. е. решение системы. Первый элемент вектора есть первый аргумент функции Find, второй элемент — ее второй аргумент. В последних двух строках осуществлена проверка правильности решения уравнений.

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

Отметим, что уравнения можно определить непосредственно внутри вычислительного блока. Таким образом, можно не определять заранее функции f (x,y) и д(х,у), как это сделано в первых двух строках листинга 8.6, а сразу написать:

Такая форма представляет уравнения в более привычной и наглядной форме, особенно подходящей для документирования работы.

Графическая интерпретация рассмотренной системы представлена на рис. 8.3. Каждое из уравнений показано на плоскости XY графиком. Первое — сплошной кривой, второе — пунктиром. Поскольку второе уравнение линейное, то оно определяет на плоскости XY прямую. Две точки пересечения кривых соответствуют одновременному выполнению обоих уравнений, т. е. искомым действительным корням системы. Как нетрудно убедиться, в листинге найдено только одно из двух решений — находящееся в правой нижней части графика Чтобы отыскать и второе решение, следует повторить вычисления, изменив начальные значения так, чтобы они лежали ближе к другой точке пересечения графиков, например x=-1, y=-1.

Рис. 8.3. Графическое решение системы двух уравнений

Пока мы рассмотрели пример системы из двух уравнений и таким же числом неизвестных, что встречается наиболее часто. Но число уравнений и неизвестных может и не совпадать. Более того, в вычислительный блок можно добавить дополнительные условия в виде неравенств. Например, введение ограничения на поиск только отрицательных значений х в рассмотренный выше листинг 8.6 приведет к нахождению другого решения, как это показано в листинге 8.7.

Листинг 8.7. Решение системы уравнений и неравенств

Обратите внимание, что, несмотря на те же начальные значения, что и в листинге 8.6, мы получили в листинге 8.7 другой корень. Это произошло именно благодаря введению дополнительного неравенства, которое определено в блоке Given в предпоследней строке листинга 8.7.

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

Вычислительный блок использует константу CTOL в качестве погрешности выполнения уравнений, введенных после ключевого слова Given. Например, если CTOL=0.001, то уравнение х=10 будет считаться выполненным и при х=10.001, и при х=9.999. Другая константа TOL определяет условие прекращения итераций численным алгоритмом (см. разд. 8.4). Значение стоъ может быть задано пользователем так же как и TOL, например, CTOL:=0.01. По умолчанию принято, что CTOL=TOL=0.001, но Вы по желанию можете переопределить их.

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

О том, как найти все решения рассматриваемой задачи, рассказывается в разд. 8.7.

Вычислительным блоком с функцией Find можно найти и корень уравнения с одним неизвестным. Действие Find в этом случае совершенно аналогично уже рассмотренным в данном разделе примерам. Задача поиска корня рассматривается как решение системы, состоящей из одного уравнения. Единственным отличием будет скалярный, а не векторный тип числа, возвращаемого функцией Find. Пример решения уравнения из предыдущего раздела приведен в листинге 8.8.

Листинг 8.8. Поиск корня уравнения с одним неизвестным с помощью функции Find

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

MathCad | ANSYS CFX | MS Office

Поиск по сайту

Выбор языка

Решение уравнений в MathCad

Часто в курсовом проекте, либо в лабораторной работе встает вопрос о решении какого-либо сложного большого уравнения с одним неизвестным. Не всегда хочется тратить 10 — 20 минут на рутинные преобразования в процессе которых, велика вероятность допущения ошибки. Целесообразно воспользоваться математической программой (в данном случае MathCad), которая быстро и правильно сможет дать ответ. Мы рассмотрим пример использования 2-ух способов решения уравнений, причем как в числах так и в символьном виде.

Способ №1: использование вычислительного блока Given — Find:

Это наиболее распространенный способ решения обычных алгебраических уравнений. Он достаточно прост. В рабочем поле записываем первое слово Given. Это служебное слово. Оно "подключает" определенные программные модули mathcad, необходимые для решения уравнения. Эти модули в своем составе содержат основные численные методы решения: метод бисекции, простой итерации и пр. Далее пишется наше уравнение в любом — явном или неявном виде. Само уравнение набирается с клавиатуры с использованием логического символа "равно". На панельке Boolean (Булева алгебра) он выделен жирным шрифтом (см. рис. 1).
Given в маткаде этоРис. 1. Панель "Булевая алгебра"
Далее пишется слово Find(x) (где х — переменная). Это функция, которая и получает ответ. Функцию Find(x) можно присвоить какой-либо переменной и использовать далее в расчетах. Для получения результата, после Find(x) следует поставить символ "→" либо "=" (см. рис. 2).
Given в маткаде этоРис. 2. Панель "Вычисления"
В зависимости от сложности уравнения через некоторое время MathCad выведет результат.

Возможности MathCad позволяют определить корень как в численном виде (т. е. результат решения уравнения представляет собой число) так и в символьном (результат — выражение). Для численного определения корня необходимо задать (определить) ВСЕ переменные входящие в уравнение и даже искомую переменную. MathCad воспринимает задание искомой переменной как начальное приближение корня. Крайне важно задаться начальным приближением, поскольку без него корень уравнения невозможно определить в силу особенностей используемых численных методов. Нужно отметить, что некорректное задание начального приближения часто становится причиной получения неверного результата либо его отсутствия вообще. Но не стоит забывать также и о том, что корня может не быть, потому что само уравнение его не имеет.
В том случае, если необходимо решить уравнение относительно какой-либо переменной в символьном виде, то нет необходимости задаваться значениями всех входящих в уравнение параметров и начальным приближением переменной. В этом случае достаточно ввести уравнение (также через "жирное равно") и после оператора Find(x) поставить "→". При этом будут работать уже другие функции MathCad, которые заточены под символьное преобразование и упрощение выражений. Результатом решения будет выражение. Стоит отметить, что MathCad сможет записать решение далеко не всякого уравнения. В этом смысле его возможности ограничены.

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

Пример №1. Решение уравнения в MathCad с помощью блока Given Find численно: Скачать

Пример №2. Решение уравнения в MathCad с помощью блока Given Find символьно: Скачать

Способ №2: Применение метода solve:

Этот метод по существу не отличается от выше рассмотренного, поскольку процедура нахождения корня аналогична. Разница лишь в оформлении. В этом случае наше уравнение записывается без операторов Given и Find. После ввода уравнения на панели Symbolic нажимаем кнопку solve (см. рис. 3), определяем через запятую искомую переменную, жмем "→" и получаем ответ.
Given в маткаде этоРис. 3. Панель "Символьные"
Иногда, то что не получается найти с помощью Given Find получается в solve.

Пример №3. Решение уравнения в MathCad с помощью solve: Скачать

Mathcad дает возможность решать также и системы уравнений. Максимальное число уравнений и переменных равно пятидесяти. В первой части этого раздела описаны процедуры решения систем уравнений. В заключительной части приведены примеры и проведено обсуждение некоторых часто встречающихся ошибок. Результатом решения системы будет численное значение искомого корня. Для символьного решения уравнений необходимо использовать блоки символьного решения уравнений. При символьном решении уравнений искомый корень выражается через другие переменные и константы.

Для решения системы уравнений выполните следующее:

  • Задайте начальные приближения для всех неизвестных, входящих в систему уравнений. Mathcad решает уравнения при помощи итерационных методов. На основе начального приближения строится последовательность, сходящаяся к искомому решению.
  • Напечатайте ключевое слово Given. Оно указывает Mathcad, что далее следует система уравнений. При печати слова Given можно использовать любой шрифт, прописные и строчные буквы. Убедитесь, что при этом Вы не находитесь в текстовой области или параграфе.
  • Введите уравнения и неравенства в любом порядке ниже ключевого слова Given. Удостоверьтесь, что между левыми и правыми частями уравнений стоит символ =. Используйте [Ctrl]= для печати символа =. Между левыми и правыми частями неравенств может стоять любой из символов , , и .
  • Введите любое выражение, которое включает функцию Find. При печати слова Find можно использовать шрифт любого размера, произвольный стиль, прописные и строчные буквы.

Функция Find возвращает найденное решение следующим образом:

  • Если функция Find имеет только один аргумент, то она возвращает решение уравнения, расположенного между ключевым словом Given и функцией Find.
  • Если функция Find имеет более одного аргумента, то она возвращает ответ в виде вектора. Например, Find(z1, z2) возвращает вектор, содержащий значения z1 и z2 , являющиеся решением системы уравнений.

Ключевое слово Given, уравнения и неравенства, которые следуют за ним, и какое-либо выражение, содержащее функцию Find, называются блоком решения уравнений.

На Рисунке 5 показан рабочий документ, который использует блок решения уравнений для решения одного уравнения с одним неизвестным. Так как имеется только одно уравнение, то только одно уравнение появляется между ключевым словом Given и формулой, включающей функцию Find. Так как уравнение имеет одно неизвестное, то функция Find имеет только один аргумент. Для решения одного уравнения с одним неизвестным можно также использовать функцию root, как показано ниже:

Рисунок 5: Блок решения уравнений для одного уравнения с одним неизвестным.

Между ключевым словом Given и функцией Find в блоке решения уравнений могут появляться выражения строго определенного типа. Ниже приведен список всех выражений, которые могут быть использованы в блоке решения уравнений. Использование других выражений не допускается. Эти выражения часто называются ограничениями. В таблице, приведенной ниже, через x и y обозначены вещественнозначные скалярные выражения, а через z и w обозначены любые скалярные выражения.

Условие Как ввести Описание
w = z [Ctrl] = Булево равенство возвращает 1, если операнды равны; иначе 0
x > y > Больше чем.
x

Следующие выражения недопустимы внутри блока решения уравнений:

  • Ограничения со знаком .
  • Дискретный аргумент или выражения, содержащие дискретный аргумент в любой форме.
  • Неравенства вида a -15 .

Причиной появления этого сообщения об ошибке может быть следующее:

  • Поставленная задача может не иметь решения.
  • Для уравнения, которое не имеет вещественных решений, в качестве начального приближения взято вещественное число. Если решение задачи комплексное, то оно не будет найдено, если только в качестве начального приближения не взято также комплексное число. На Рисунке 11 приведен соответствующий пример.
  • В процессе поиска решения последовательность приближений попала в точку локального минимума невязки. Метод поиска решения, который используется в Mathcad, не позволяет в этом случае построить следующее приближение, которое бы уменьшало невязку. Для поиска искомого решения пробуйте использовать различные начальные приближения или добавьте ограничения на переменные в виде неравенств, чтобы обойти точку локального минимума.
  • В процессе поиска решения получена точка, которая не является точкой локального минимума, но из которой метод минимизации не может определить дальнейшее направление движения. Метод преодоления этой проблемы — такой же, как для точки локального минимума: измените начальное приближение или добавьте ограничения в виде неравенств, чтобы миновать нежелательную точку остановки.
  • Возможно, поставленная задача не может быть решена с заданной точностью. Если значение встроенной переменной TOL слишком мало, то Mathcad может достигнуть точки, находящейся достаточно близко к решению задачи, но уравнения и ограничения при этом не будут выполнены с точностью, задаваемой переменной TOL. Попробуйте увеличить значение TOL где-нибудь выше блока решения уравнений.

Что делать, когда имеется слишком мало ограничений

Если количество ограничений меньше, чем количество переменных, Mathcad вообще не может выполнить блок решения уравнений. Mathcad помечает в этом случае функцию Find сообщением об ошибке “слишком мало ограничений”.

Задача, аналогичная той, которая приведена на Рисунке 12, называется недоопределенной. Ограничений в ней меньше, чем переменных. Поэтому ограничения не содержат достаточной информации для поиска решения. Поскольку функция Find имеет пять аргументов, Mathcad определяет, что требуется решить два уравнения с пятью неизвестными. Вообще говоря, такая задача обычно имеет бесконечное число решений.

При использовании блока решения уравнений в Mathcad необходимо задать количество уравнений по крайней мере не меньшее, чем число искомых неизвестных. Если зафиксировать значения некоторых переменных, удастся решить уравнения относительно оставшихся переменных. На Рисунке 13 показано, как, зафиксировав часть переменных, решить недоопределенную задачу из Рисунка 12. Поскольку функция Find содержит только два аргумента, z и w, Mathcad определяет переменные x, y и v как имеющие фиксированные значения 10, 50 и 0 соответственно. Блок решения уравнений становится в этом случае корректно определенным, потому что теперь имеются только две неизвестных, z и w, и два уравнения.

Рисунок 12: Функция Find имеет пять аргументов, поэтому Mathcad определяет, что требуется решить два уравнения с пятью неизвестными.

Рисунок 13: Проблема может быть решена, если уменьшить количество аргументов функции Find.

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter

7. РЕШЕНИЕ УРАВНЕНИЙ В СРЕДЕ MATHCAD

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

Отыскание корней численными методами связано с несколькими задачами:

Ø Исследование существования корней в принципе, определение их количества и примерного расположения;

Ø Отыскание корней с заданной погрешностью

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

Решение одного уравнения с одним неизвестным

Рассмотрим алгебраическое уравнение f(x)=0 с одним неизвестным х, например, sin(x)=0.

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

Мнемоника команды выглядит следующим образом:

root (f(x), x) или root (f(x), x, a, b),

где f(х) – скалярная функция, определяющая уравнение; х – скалярная переменная, относительно которой решается уравнение; а, b – границы интервала, внутри которого происходит поиск корня.

Первый тип функции root требует дополнительного задания начального значе

ния переменной х. Для этого нужно просто предварительно присвоить х некоторое число. Поиск корня будет производиться вблизи этого числа. Таким образом, присвоение начального значения требует априорной информации о примерной локализации корня.

Приведем пример решения очень простого уравнения sin(x)=0, корни которого известны заранее (рис. 38).

Обратите внимание, что, хотя уравнение имеет бесконечное количество корней MathCAD находит (с заданной точностью) только один из них, х0, лежащий наиболее близко к х = 0,5. Если задать другое начальное значение, например х = 3, то решением будет другой корень уравнения х1 = π и т.д. Таким образом, для поиска корня средствами MathCAD требуется его предварительная локализация. Это связано с особенностями выбранного численного метода, который называется методом секущих.

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

Рис. 7.1. Функция Minerr

Примечание: Для решения уравнения с одним неизвестным применимы и градиентные методы, относящиеся в MathCAD к системам уравнений.

Иногда удобнее задавать не начальное приближение к корню, а интервал [а, b], внутри которого корень заведомо находится. В этом случае следует использовать функцию root с четырьмя аргументами, а присваивать начальное значение х не нуж

но. Поиск корня будет осуществлен в промежутке между а и b альтернативным численным методом (Риддера или Брента). Явный вид функции f(x) может быть определен непосредственно в теле функции root (рис. 39).

Когда root имеет четыре аргумента, следует помнить о двух ее особенностях:

Ø внутри интервала [а, b] не должно находиться более одного корня, иначе будет найден один из них, заранее неизвестно, какой именно;

Ø значения f(а) и f(b) должны иметь разный знак, иначе будет выдано сообщение об ошибке.

Если уравнение не имеет действительных корней, но имеет мнимые, то их также можно найти. Например, уравнение х 2 +1=0, имеющее два чисто мнимых корня, решается два раза с разными начальными значениями (рис. 40).

При задании начального значения 0,5 численный метод отыскивает первый корень (отрицательную мнимую единицу –i), а при начальном значении –0,5 находится и второй корень i.

Для решения этого уравнения второй вид функции root (с четырьмя, а не с двумя аргументами) неприменим, поскольку f(х) является положительно определенной, и указать интервал, на границах которого она имела бы разный знак, невозможно.

Нахождение корней полинома

Если функция f(x) является полиномом, то все его корни можно определить, использую встроенную функцию polyroots(v), где v – вектор, составленный из коэффициентов полинома.

Поскольку полином n-й степени имеет ровно n корней (некоторые из них могут быть кратными), вектор v должен состоять из n+1 элемента. Результатом действия функции polyroots является вектор, составленный из n корней рассматриваемого полинома. При этом нет надобности вводить какое-либо начальное приближение, как для функции root.

Например, найдем корни полинома четвертой степени f(x)=х 4 -6х 3 +12х 2 -10х+3 с

помощью функции polyroots (рис. 41).

Рис. 7.2. Функция Polyroots

Запишем коэффициенты рассматриваемого в примере полинома в виде вектора. Первым в векторе должен идти свободный член полинома, вторым – коэффициент при х 1 и т.д. Соответственно, последним n+1 элементом вектора должен быть коэффициент при старшей степени x N .

Совет: Иногда исходный полином имеется не в развернутом виде, а, например, как произведение нескольких полиномов. В этом случае определить все его коэффициенты можно, выделив его и выбрав в меню Symbolics (Символика) пункт Expand (Разложить). В результате символьный процессор MathCAD сам преобразует полином в нужную форму, пользователю надо будет только корректно ввести ее в аргументы функции polyroots.

Далее показано действие функции polyroots. Обратите внимание, что численный метод вместо двух из трех действительных единичных корней (иными словами, кратного корня 1) выдает два мнимых числа. Однако малая мнимая часть этих корней находится в пределах погрешности, определяемой константой TOL, и не должна вводить пользователей в заблуждение. Просто нужно помнить, что корни полинома могут быть комплексными, и ошибка вычислений может сказываться как на действительной, так и на комплексной части искомого корня.

Для функции polyroots можно выбрать один из двух численных методов – метод полиномов Лаггера (он установлен по умолчанию) или метод парной матрицы.

Решение системы линейных алгебраических уравнений

Рассмотрим систему уравнений вида

В матричной форме СЛАУ записывается в эквивалентном виде:

где А – матрица коэффициентов СЛАУ размерности n×n; x – вектор неизвестных; В – вектор правых частей уравнений.

СЛАУ имеет единственное решение, если матрица А является невырожденной, т. е. ее определитель не равен нулю. С вычислительной точки зрения, решение СЛАУ не представляет трудностей, если матрица А не очень велика.

В MathCAD СЛАУ можно решить как в более наглядной форме (1), так и в более удобной для записи форме (2). Для первого способа следует использовать вычислительный блок Given/Find, а для второго – встроенную функцию решения системы линейных уравнений lsolve. Мнемоника написания команды следующая:

где А – матрица коэффициентов системы; В – вектор правых частей.

Применение функции lsolve показано на рис. 42.

В некоторых случаях, для большей наглядности представления СЛАУ, его можно решить точно так же, как систему нелинейных уравнений. Не забывайте, что при численном решении всем неизвестным требуется присвоить начальные значения (это сделано в первой строке листинга) (рис. 43). Они могут быть произвольными, так как решение СЛАУ с невырожденной матрицей единственно.

Решение системы нелинейных уравнений

Рис. 7.4. Решение системы

Рассмотрим решение системы N нелинейных уравнений с m неизвестными

Здесь fi(x1, … , xm) – некоторые скалярные функции от скалярных переменных x1, x2, …, хm и, возможно, от еще каких-либо переменных. Уравнений может быть как больше, так и меньше числа переменных. Заметим, что систему можно формально переписать в виде f(x)=0, где х – вектор, составленный из переменных x1, x2, …, хm; f(x) – соответствующая векторная функция.

Для решения систем имеется специальный вычислительный блок, состоящий из трех частей, идущих последовательно друг за другом:

1) Given – ключевое слово;

2) Система, записанная логическими операторами в виде равенств и, возможно, неравенств;

3) Find (х1, …, хm) – встроенная функция для решения системы относительно переменных х1, …, хm.

Вставлять логические операторы следует, пользуясь панелью инструментов Boolean (Булевы операторы). Если вы предпочитаете ввод с клавиатуры помните, что логический знак равенства вводится сочетанием клавиш <Ctrl> + <=>. Блок Given/Find используется для поиска решения итерационные методы, поэтому, как и для функции root, требуется задать начальные значения для всех х1, …, хm. Сделать это необходимо до ключевого слова Given. Значение функции Find есть вектор, составленный из решения по каждой переменной. Таким образом, число элементов вектора

Find равно числу аргументов.

В листинге (рис 44) приведен пример решения системы двух уравнений.

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

Совет: Часто бывает очень полезно проверить точность решения уравнений, вычислив значения образующих их функций в найденных вычислительным процессором корнях.

Рис. 7.6. Точность

В листинге найдено только одно из двух решений – находящееся в правой нижней части графика (рис. 45). Чтобы отыскать и второе решение, следует повторить вычисления, изменив начальные значения так, чтоб они лежали ближе к другой точке пересечения графиков, например, х=–1, y=–1.

Пока мы рассмотрели пример системы из двух уравнений и таким же числом

неизвестных, что встречается наиболее часто. Но число уравнений и неизвестных может и не совпадать. Более того, в вычислительный блок можно добавить дополнительные условия в виде неравенств. Например, введение ограничения на поиск только отрицательных значений х (рис. 46).

Рис. 7.7. Ограничение на поиск

Обратите внимание, что, несмотря на те же начальные значения, что и в предыдущем листинге мы получили другой корень. Это произошло именно благодаря введению дополнительного неравенства, которое определено в блоке Given в предпоследней строке.

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

Примечание: Вычислительный блок использует константу CTOL в качестве погрешности выполнения уравнений, введенных после ключевого слова Given. Другая константа TOL определяет условие прекращения итераций численным алгоритмом. Значение CTOL может быть задано пользователем, так же как и TOL, например, CTOL:=0,01. По умолчанию принято, что CTOL=TOL=0,001, но по желанию можно переопределить их.

Рис. 7.8. Переопределение

Вычислительным блоком с функцией Find можно найти и корень уравнения с одним неизвестным. Действие Find в этом случае совершенно аналогично уже рас

смотренным в данном разделе примерам. Задача поиска корня рассматривается как решение системы, состоящей из одного уравнения. Единственным отличием будет скалярный, а не векторный тип числа возвращаемого функцией Find (рис 47).

Символьное решение уравнений

Некоторые уравнения можно решить точно с помощью символьного процессора MathCAD. Делается это очень похоже на численное решение уравнений с применением вычислительного блока. Присваивать неизвестным начальные значения нет необходимости. Рассмотрим листинги символьного решение уравнения с одним неизвестным и системы двух уравнений с двумя неизвестными.

Как видно, вместо знака равенства после функции Find в листингах (рис. 48) следует знак символьных вычислений, который можно ввести с панели Symbolic, или, нажав клавиши <Ctrl>+<.>.

Рис. 7.9. Пример вычисления

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

Срочно?
Закажи у профессионала, через форму заявки
8 (800) 100-77-13 с 7.00 до 22.00

Как записать систему уравнений в mathcad

7.1. Решение систем нелинейных и линейных уравнений 2

7.1.1. Функция root (f(z),z,a,b) 2

7.1.2. Функция Polyroots() 6

7.1.3. Использование вычислительного блока Given – Find () 7

7.1.4. Использование функции Given – MinErr () 10

7.1.5. использование функции Lsolve(). 10

7.1.6. Использование метода Гаусса. 11

7.1.7. Использование метода Крамера. 12

7.1.8. Использование матричного метода. 14

7.1.9. Исследование системы неоднородных уравнений. 15

7.2.1. Решение ДУ первого порядка 18

7.2.1.1. Использование функции Odesolve() 19

7.2.1.2. Использование функции rkfixed 20

7.2.2. Решение систем ДУ. 21

7.2.2.1. Использование встроенных функций Rkfixed(), Rkadapt(),Bulstoer(). 22

7.2.3. Решение ДУ высших порядков 24

7.2.3.1. Использование функции Given-Odesolve() 24

7.2.3.2. Использование встроенных функций Rkfixed(), Rkadapt(),Bulstoer(). 25

^ 7.3. Интерполирование и функции предсказания 31

7.3.1. Линейная интерполяция 31

7.3.2. Кубическая сплайн-интерполяция 33

7.3.3. Линейное предсказание 35

7.3.4. Использование функции регрессии 36

7.3.4.1. Линейная регрессия 37

7.3.4.2. Полиномиальная регрессия 38

Контрольные вопросы 38

Использование встроенных функций

REDMOND

Использование встроенных функций, реализующих численные методы интегрированной среды MathCAD, проиллюстрируем на примерах расчета различных задач.

7.1. Решение систем нелинейных и линейных уравнений

В интегрированной среде MathCAD имеются средства для отыскания корней уравнения с одной и многими переменными. Для этой цели используются встроенные функции. Рассмотрим некоторые из них подробней.

7.1.1. Функция root (f(z),z,a,b)

Функция root (f(z),z,a,b) возвращает скаляр z, при котором выражение или скалярная функция f(z) обращается в ноль на интервале [a,b]. Варьируя начальное приближение z, MathCAD будет пытаться найти такое значение функции, при котором функция f(z) TOL, где TOL – встроенная переменная, указывающая заданную степень точности (по умолчанию TOL=10). Если интервал [a,b] не указан, то перед использованием функции root() используют метод секущей. Начальное приближение, заданное пользователем, становится первым приближением при поиске корня. Если процесс сходится, то итерация заканчивается, когда значение f(x) становится меньше TOL. Если процесс расходится и MathCAD не может найти корень, итерация прекращается и выдается сообщение – “Cannot evaluate this accurately at one or more of the values you specified” – «Не могу это вычислить точно по одной или более переменным, которые вы указали».

  • для изменения точности поиска корней, можно изменить значение встроенной переменной TOL. Если уменьшить TOL, то число итераций функции root() будет увеличиваться, но решение будет точнее. Если увеличить TOL, то число итераций уменьшается и корень будет найден грубее. Изменить TOL можно непосредственно в рабочем документе (например, TOL:=0.0001) или через меню Math/Options/Built – in Variables tab;
  • для поиска нескольких корней можно менять интервал [a,b] или начальные приближения. В этом случае целесообразно воспользоваться графиком функции f(x). Точки пересечения кривой f(x) с осью х графически определяют значение и число корней;
  • если функция root() имеет малый наклон около искомого корня, можно или уменьшить TOL, или заменить функцию f(x)=0 на функцию g(x)=0, где g(x)= f(x)/f’(x);
  • для выражения f(x) с известным корнем a, т.е. f(a)=0, нахождение дополнительных корней эквивалентно поиску корней уравнения h(x)=0, где h(x)=f(x)/(x-a). Этот прием полезен для отыскания корней, расположенных близко друг к другу.

^ Рассмотрим примеры использования функции root()

  • Пусть дан полином 3-й степени. Запишем его в виде:
  • Зададим точность.
  • построим график функции f(x). Для этого выполним следующие действия:
  • зададим ранжированную переменную х (ранжир выбирается произвольно):
  • Создадим двумерный график (Shift + 2).
  • Введем значения в местозаполнители следующим образом:
  • Отформатируем график:

  • График построен
  • Теперь необходимо выбрать отрезок, на концах которого функция принимает значения разных знаков (т.е. отрезки, на которых функция единожды пересекает ось абсцисс). Например, отрезок [-9; -5.25] или [-1.5; 2.25].
  • После того как были проведены все вышеперечисленные действия, можно применить функцию root(полином, переменная, начало отрезка, конец отрезка).
  • Для просмотра результата необходимо ввести x1= и нажать клавишу Enter. В результате получим равенство:
  • Для этого запишем уравнения в виде:
  • Составим дискретный аргумент -1×1 с шагом 0.01:
  • Построим график функций причем коэффициент а в функции g(x,a) примет значения 1, 5, 20. Чтобы построить на одном графике несколько функций, необходимо записать эти функции в местозаполнитель слева через запятую:

Теперь вычислим аналитически корни системы, имея ввиду, что коэффициент а изменяется от 1 до 20 с шагом 1. Для того чтобы решить систему двух уравнений необходимо свести систему к одной функций. Известно, что решением системы уравнений являются точки пересечения этих уравнений на графике. Следовательно:

  • зададим ранжированную переменную а:
  • зададим начальное приближение. В качестве начального приближения возьмем начало отрезка [-1; 1]. Т.е.
  • построим итерационный процесс по формуле:

Данный процесс на каждом шаге рассчитывает каждый последующий корень на основе предыдущего. Таким образом, мы найдем все 20 корней системы уравнений, каждый корень системы соответствует одному значению коэффициента а. Значит решение системы можно записать в виде таблицы:

7.1.2. Функция Polyroots()

Если f(x) представляет собой полином и его коэффициенты, начиная со свободного члена, можно представить в виде вектора v, то для поиска одновременно всех корней полинома можно использовать функцию polyroots(v).

Построим алгоритм нахождения корней полинома с помощью встроенной функции polyroots(). Функция polyroots() находит все возможные корни уравнения и выводит их пользователю в виде вектора.

Рассмотрим пример использования функции polyroots().

  • Пусть дан полином 3-й степени. Запишем его в виде:
  • Зададим точность:
  • Запишем коэффициенты полинома в вектор v, начиная с коэффициента, стоящего у неизвестного низшей степени, т.е. x 0 . Тогда вектор v примет вид:
  • После того, как были проведены все вышеперечисленные действия можно применить встроенную функцию polyroots(вектор коэффициентов).
  • Чтобы сделать проверку, необходимо в исходную функцию поочередно подставить корни уравнения. Т.е.:

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

7.1.3. Использование вычислительного блока Given – Find ()

Для решения системы нелинейных уравнений и неравенств (до 50 уравнений и неравенств) можно использовать блок Given Find (). Перед блоком записываются начальные приближения всех неизвестных. Между ключевыми словами Given – Find () записывается система уравнений и неравенств (в уравнениях должен быть знак равенства через Ctrl+=). Число уравнений должно быть равно числу неизвестных. Функция Find () имеет следующий формат: Find (z1,z2,z3,…..), где z1,z2,z3,… — искомые переменные. Если функция Find () имеет более одного аргумента, то она возвращает ответ в виде вектора.

Формат функции: Find(Список переменных).

  • напечатать слово Given, чтобы создать решающий блок;
  • напечатать ОДУ, используя булевы операторы;
  • напечатать Find (). В круглые скобки записать список неизвестных относительно которых решается уравнение.
  • Зададим точность:
  • Из каждого уравнения выразим одну переменную (из каждого уравнения выразим разные переменные), представим каждое уравнение системы в виде:
  • Теперь выделим корень системы уравнений графически. Для этого построим график функций f1(x) и f2(y), выполнив следующие действия:
  • Зададим изменения x и y:
  • Построим двумерный график (Shift + 2). Затем заполним местозаполнители и отформатируем график, чтобы он принял удобный для нас вид:
  • Задаем вектор начального приближения (начальные значения x и y) учитывая, что начальные значения должны быть максимально приближены к корню системы (точка пересечения двух графиков).
  • Теперь можно использовать вычислительный блок GivenFind(). В вычислительном блоке любое равенство записывается через жирное равно (Ctrl+=). Параметрами оператора fund являются переменные относительно которых решается система:
  • В результате вычислительный блок выдает решение в виде вектора, в котором каждое следующее число сверху вниз соответствует значению корня слева направо. Чтобы вывести вектор решения необходимо ввести V =. В результате получим:
  • ^ Для проверки необходимо перенести все, что находится в правой части каждого уравнения в левую, подставить значения корней вместо соответственных неизвестных и поставить знак равенства (=), если вычисления проведены, верно, то в результате каждое уравнение должно равняться 0 или числу близкому к 0 (все зависит от точности вычислений). Например:

Блоки Given – Find () не могут быть вложенными. Функция Find () может быть использована как любая другая функция. Если система уравнений имеет несколько различных решений, то для поиска остальных можно использовать различные начальные приближения или дополнительные ограничения в виде неравенств, которым удовлетворяет найденное решение.

^ Блок Given – Find может быть использован для решения систем уравнений в символьном виде , например:

  • Использование блока Given – Find при аналитических преобразованиях:

Подставим вместо a, b, r, c конкретные значения и решим систему уравнений графически (решение показано на рисунке ниже):

Данное решение получено при a = b = 0, c = 1, r = 2

7.1.4. Использование функции Given – MinErr ()

  • достигнута точка, из которой не может быть получено более точное приближение к решению;
  • достигнута точка, из которой невозможно выбрать подходящее направление спуска, т.е. направление, вдоль которого ищется следующее приближение. В связи с этим продолжать итерации невозможно;
  • достигнут предел точности вычислений. Дальнейшие вычисления не увеличивают точность решения вследствие влияния ошибок округления.
  • Зададим точки начального приближения:
  • Применим вычислительный блок Given – Minerr(). Данный вычислительный блок выдает решение в виде вектора, корни системы уравнений в данном случае имеют приближенное значение. Это связано с немого иным условием окончания методами приближения вычислительного блока Given – Minerr() по сравнению с блоком Given – Find(), который выдает точное решение системы. Уравнения в блоке Given – Minerr() записываются через жирное равно (Ctrl + =):

7.1.5. использование функции Lsolve().

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

^ Формат функции : lsolve(Матрица системы, Вектор правых частей)

Например, дана система линейных уравнений:

  • Зададим точность вычислений:
  • Составим матрицу системы. Для этого запишем в матрицу все коэффициенты, стоящие перед неизвестными. Тогда матрица системы будет выглядеть следующим образом:
  • Составим вектор правых частей. Для этого запишем в вектор правые части всех уравнений сверху вниз:
  • После того как были проведены вышеперечисленные действия, применим функцию lsolve(Матрица системы, Вектор правых частей):
  • Также необходимо проверить правильность решения. Для этого перенесем элементы правой части каждого уравнения в левую часть с противоположным знаком, следовательно, в правой части должны получится 0:

7.1.6. Использование метода Гаусса.

  • Составление матрицы системы.
  • Составление вектора правых частей.
  • Слияние матриц.
  • В полученной матрице приводим матрицу системы к единичной.
  • Дана система:
  • Составим матрицу системы:
  • Составим вектор правых частей:
  • Произведем слияние матриц с помощью оператора Augment(Матрица, Матрицы, ..):
  • Приведем полученную матрицу к ступенчатому виду с помощью оператора rref(Матрица):
  • Та часть матрицы, полученной в результате вышеперечисленных преобразований, в которой ранее находился вектор правых частей, дает нам вектор неизвестных (последний столбец). Выделим нужную часть матрицы с помощью оператора submatrix(Матрица, начальная строка, конечная строка, начальный столбец, конечный столбец):
  • Сделаем проверку:

Получился практически нулевой столбец, что говорит о правильно проведенных вычислениях.

7.1.7. Использование метода Крамера.

Метод Крамера состоит из следующих действий:

  • Составим вектор правых частей.
  • Проверяем неравенство детерминанта матрицы системы нулю (необходимо, потому что далее производится деление на детерминант матрицы системы [деление на ноль запрещено]. Если детерминант матрицы системы равен нулю, то можно сделать вывод, что система имеет множество решений). Если детерминант матрицы не равен 0, то выполняем следующие действия:
  • Для вычисления первой, второй и третьей неизвестной подставляем вектор правых частей в первую, вторую или третью колонку матрицы системы соответственно.
  • Вычисляем детерминант полученной матрицы.
  • Делим полученный детерминант на детерминант матрицы системы.
  • Записываем, найденную неизвестную, в вектор.
  • Дана система:
  • Найдем матрицу системы:
  • Проверим неравенство детерминанта матрицы системы 0:
  • Преобразуем матрицу системы, подставляя вектор правых частей вместо первого, второго и третьего столбца (используем функции submatrix(Матрица, начальная строка, конечная строка, начальный столбец, конечный столбец) и Augment(Матрица, Матрицы, ..)). Затем делим детерминант, полученной матрицы, на матрицу системы. Заносим результат в вектор:
  • Для первой неизвестной:
  • Для второй неизвестной:
  • Для третьей неизвестной:
  • Выводим вектор неизвестных:
  • Сделаем проверку:

Получился практически нулевой столбец, что говорит о правильно проведенных вычислениях.

7.1.8. Использование матричного метода.

Сущность матричного метода.

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

  • Дана система:
  • Составим матрицу системы:
  • Составим вектор правых частей:
  • Применим формулу матричного метода:
  • Выведем вектор неизвестных:
  • Сделаем проверку:

Получился практически нулевой столбец, что говорит о правильно проведенных вычислениях.

7.1.9. Исследование системы неоднородных уравнений.

Добавить исследование систем однородных уравнений

Исследовать неоднородную СЛАУ – это значит установить является ли она совместной и если является, то найти выражение для общего решения системы. Для того чтобы неоднородная СЛАУ была совместна – необходимо и достаточно, чтобы ранг расширенной матрицы совпадал с рангом матрицы.

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

1.Ввести матрицу системы и вектора правых частей.

2.Получить расширенную матрицу системы (augment(A,b1))

3.Вычислить ранг основной и ранг расширенной матрицы.

4.Сформулировать вывод о существовании решения (система совместна?)

5.Привести расширенную матрицу совм. системы к ступенчатому виду (rref(Ar))

6.Определить базисные и свободные переменные.

7.Записать эквивалентную систему и разрешить ее относительно базисных переменных.

8.Записать общее решение системы.

9.Найти частное решение системы.

  • Дана СНЛУ:
  • Составим матрицу системы:
  • Запишем вектор правых частей:
  • Получим расширенную матрицу используя, оператор augment(матрицы, подлежащие слиянию). Дадим новой матрице имя Rass1:
  • Вычислим ранг основной и расширенной матрицы и сравним их. Если ранги совпадают, то система совместна. Для нахождения ранга матрицы используем оператор rank(матрица):
  • Приводим расширенную матрицу к ступенчатому виду (путем простых алгебраических преобразований ниже и выше главной диагонали получаем 0). Для приведения матрицы к ступенчатому виду используем оператор rref(матрица):
  • Определим базисные и свободные переменные.
  • Подставим в ступенчатую матрицу неизвестные (элементы матрицы являются коэффициентами при неизвестных, а последний столбец матрицы – вектор правых частей):
  • Решим полученную систему уравнений с помощью вычислительного блока. Заглядывая наперед можно сказать, что неизвестная х5 не получит численного значения, поэтому после оператора Find (список неизвестных) необходимо поставить оператор символьного вывода:
  • Запишем общее решение системы:
  • Найдем частное решение системы. Частное решение будет получено при конкретном (частном) значении х5 (например: х5 = 0):

Смысл вычислений, проведенных в последнем пункте, состоит в вычислении значений переменных х1, х2, х3, х4 при заданном значении х5 (в данном случае х5 = 0).

7.2. Решение дифференциальных уравнений

  • ^ Задачи Коши – для которых определены начальные условия на искомые функции, т.е. заданы значения этой функции в начальной точке интервала интегрирования уравнения.
  • ^ Краевые задачи – для которых заданы определенные соотношения сразу на обоих концах (границах) интервала.
  • решение обыкновенных дифференциальных уравнений (odesolve, rkfixed);
  • решение гладких систем (Bulstoer);
  • решение жестких систем (Stiffb, Stiffr);
  • решение медленно изменяющихся систем (Rkadapt);
  • нахождение последней точки на интегрируемом интервале (bulstoer, rkadapt, stiffb, stiffr);
  • решение краевых задач с двумя ограничениями (bvalfit, sbval);
  • решение дифференциальных уравнений в частных производных (relax, multigrid);

7.2.1. Решение ДУ первого порядка

Рассмотрим некоторые из часто используемых функций.

7.2.1.1. Использование функции Odesolve()

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

^ Формат функции : Odesolve(x,b[,step]),

где: х – переменная интегрирования (real);

b– значение конца интервала интегрирования (real);

step – шаг, используемый MathCAD при интегрировании уравнения (выражение в квадратных скобках можно опустить).

  • напечатать слово Given, чтобы создать решающий блок;
  • напечатать ОДУ и ограничения, использующие булевы операторы;
  • напечатать оператор Odesolve, переменную интегрирования х и значение конечной точки b.
  • ОДУ может быть написано с использованием операторов производных типаd/dxиd/dxили, используя простую систему обозначений, подобнуюy(x) иy’(x) (для записи знака (‘) нажатьctrl+F7);
  • Ограничения должны быть записаны в форме y(a)=b0или y’(a)=b0. MathCAD не будет принимать долее сложные ограничения типа y’(a)+y(a)=b0;
  • Значение конечной точкиbдолжно быть больше чем начальное значение;
  • По умолчанию,Odesolveиспользует методRungeKutta. Чтобы использовать адаптивный метод, нажмите наodesolveправой кнопкой мыши, и выберитеAdaptiveиз всплывающего меню.

Пусть дано ОДУ вида:

  • Также заданы начальные условия:
  • Заменим y` на выражение типа . Учитывая, что функция у является функцией от t можно заменить выражение у на у(t). Принимая во внимания все преобразования, запишем ОДУ и начальные условия в вычислительный блок Given–Odesolve(). Примечание: все равенства записываются через жирное равно (Ctrl + =):
  • В результате получили функцию, которая является решением ОДУ. Построим ее график:

Чтобы решать системы ОДУ или нелинейные дифференциальные уравнения высоких порядков, следует использовать функцию rkfixed.

7.2.1.2. Использование функции rkfixed

Функция rkfixed() использует метод Рунге-Кутта четвертого порядка. Формат функции:

rkfixed(y,x1,x2,npoints,D)

,где y- вектор начальных условий размерности;

n (n – порядок дифференциального уравнения или число уравнений в системе, если решается система уравнений);

x1,x2- граничные точки интервала, на котором ищется решение дифференциального уравнения;

npoints- число точек (не считая начальной точки), в которых ищется приближенное решение. По этому аргументу определяется число точек (1+npoints) в матрице, возвращаемой функцией rkfixed();

D(x,y)- функция, возвращающая значение в виде вектора из n элементов, содержащих первые (младшие) производные неизвестных функций.

  • Пусть дана ОДУ:
  • Также заданы начальные условия:
  • Зададим количество в которых ищется приближенное значение. Построим для сравнения две функции (для каждой функции зададим различное количество точек и посмотрим различия):
  • Для обеих функций возьмем одинаковый интервал [0; 8*π]
  • Старшей в данном выражении является первая производная у`. Следовательно все остальное выражение является младшей функцией. Запишем:
  • Зададим функции:
  • Теперь построим оба графика в одной системе координат и сравним их. Известно, что функция rkfixed возвращает матрицу, содержащую в первом столбце значения х, во втором столбце – у. Следовательно, строим график на основе матриц, выданных функциями:

Примечание: цифра в фигурных скобках указывает столбец матрицы (данный элемент устанавливается сочетанием клавиш Ctrl+6).

График наглядно показывает, что увеличение количества точек, в которых ищется приближенное решение, повышает точность решения ОДУ.

7.2.2. Решение систем ДУ.

MathCad 2001 требует, чтобы система ОДУ была представлены в виде:

Также должны быть представлены начальные условия в виде:

,где b, c, t – числа.

Для решения систем ОДУ применяются следующие функции:

  • Rkfixed(y0,t0,t1,M,D) – реализует метод Рунге – Кутты с фиксированным шагом;
  • Rkadapt(y0,t0,t1,M,D) – реализует метод Рунге – Кутты с переменным шагом;
  • Bulstoer(y0,t0,t1,M,D) – реализует метод Булирша-Штера.

где y0 – вектор начальных значений в точке t0 размера N×1;

t0 – начальная точка расчета;

t1 – конечная точка расчета;

М – число шагов, на которых численный метод находит решение;

D – векторная функция размера N×1 двух аргументов – скалярного t и векторного y. При этом у – искомая векторная функция аргумента t того же размера N×1.

7.2.2.1. Использование встроенных функций Rkfixed(), Rkadapt(),Bulstoer().

Составим алгоритм использования данных функций:

Дана система ОДУ:

  • Составим вектор D. В векторе D определяется правая часть системы ОДУ. Здесь следует сказать несколько слов о форме записи вектора D. Первый параметр вектора D – неизвестный аргумент, относительно которого задана функция Y. Второй параметр – вектор Y (приглядитесь, элементами вектора D являются элементы вектора у. Это важно: вектор у составлен путем замены y0(t)=y(t), y1(t)=y ` (t), y2(t)=y«(t)….).
  • Составим вектор начальных приближений (имеет ту же размерность, что и D(t,y)):
  • Запишем интервал. Интервал задается вторым и третьим параметрами встроенной функции:
  • Зададим количество шагов (четвертый параметр функции):
  • Используем функцию:
  • Первый столбец – вектор неизвестных (узлы сетки);
  • Второй столбец – вектор функции (значения функции в узлах сетки);
  • Третий и последующие столбцы – вектора производных функции.
  • По данным данного массива можно построить графики функции и ее производных:

Используем функцию Bulstoer():

  • Строим график:

Используем функцию Rkadapt():

  • Строим график:

Примечание: следует строго соблюдать регистр написания функции.

7.2.3. Решение ДУ высших порядков

В MathCad 2001 можно решать ДУ высших порядков как с помощью вычислительного блока Given-Odesolve(), так и путем сведения их к системам уравнений первого порядка. Рассмотрим эти два способа решения ДУ высших порядков подробнее.

7.2.3.1. Использование функции Given-Odesolve()

  • ОДУ должно быть записано в стандартной форме, т.е. относительно старшей производной;
  • Начальные условия должны иметь простую форму:
  • Все равенства записываются через жирное равно (Ctrl + =);
  • Знак ‘ ставится с помощью сочетания клавиш (Shift + F7) или клавишей `. вместо знака ` можно использовать
  • Представим данное уравнение в стандартном виде:
  • Даны начальные условия:

y(0) = 0.1

y`(0) = 0

  • Запишем данные в вычислительный блок:
  • Решением ОДУ является функция. Покажем данную функцию на графике:

7.2.3.2. Использование встроенных функций Rkfixed(), Rkadapt(),Bulstoer().

Для того, чтобы решить ОДУ высокого порядка с помощью функций Rkfixed(), Rkadapt(),Bulstoer(), следует сперва преобразовать ОДУ к системе ОДУ первого порядка.

ОДУ n- порядка сводится к системе n уравнений 1-го порядка.

  • Пусть дано уравнение второго порядка:
  • Проведем некоторые преобразования:
    • Так как у = у0, у` — производная от у, а у` = у1, то у0` = y1. запишем последнее равенство в систему.
    • Так как у` = у1, y« — производная от у`, то у1` = y«. Рассмотрим выражение . Перепишем его в ином виде . Получилось ОДУ первого порядка. Запишем производную от у1 и остаток выражения по разные стороны от знака равенства и внесем результат в систему. В конечном итоге получена система ОДУ первого порядка:

    Данная система ОДУ решается при помощи встроенных функций Rkfixed(), Rkadapt(),Bulstoer(). Пример решения системы ОДУ первого порядка описан в параграфе 7.2.2.1.

    7.2.3. Использование дополнительных функций

    Функция rkfixed() не всегда является быстродействующей, хотя приводит к искомому результату. Однако имеются случаи, когда результат можно получить точнее. Если известно, что решение дифференциального уравнения является “жесткой” функцией (решение неустойчивое, с разрывами, асимптотами), то следует использовать функции Stiffb(), Stiffr().

    ^ Форматы функций Stiffb() (метод Булирша – Стейна для решения жестких систем ОДУ) и Stiffr() (метод Розенборка для решения жестких систем ОДУ) следующие:

    где y – вектор начальных значений в начальной точке;

    x1 – начальная точка расчета;

    x2 – конечная точка расчета;

    npoints – число шагов численного метода;

    D – векторная функция задающая систему ОДУ (пример сохдания этой функции описан в параграфе 7.2.2.1.)

    J(x,y) – функция, возвращающая матрицу n(n+1). Первый столбец содержит производные D/x, остальные строки и столбцы представляют собой матрицу Якоби (D/y)

    Рассмотрим работу алгоритма на примере. Дана система:

        • Составим вектор начальных условий:
        • Проведем некоторые преобразования:
        • Составим систему уравнений:
        • Так как у = у0, у` — производная от у, а у` = у1, то у0` = y1. запишем последнее равенство в систему.
        • Так как у` = у1, y« — производная от у`, то у1` = y«. Рассмотрим выражение . Перепишем его в ином виде . Получилось ОДУ первого порядка. Запишем производную от у1 и остаток выражения по разные стороны от знака равенства и внесем результат в систему. такие же действия проведем со второй и третьей производными. В конечном итоге получена система ОДУ первого порядка. Запишем данную систему в матрицу D
        • Составим матрицу Якоби:
        • Применим функцию Stiffb():
        • Результатом вычисления (как и функций класса rkfixed()) будет матрица, содержащая в первом столбце значение х, во втором – значения у при определенных значениях х, далее – значения производных функции (по возрастанию степени).
        • Решение системы можно представить графически. Для этого на оси 0х отложить значения х (первый столбец матрицы), а по оси 0у отложить значения функций и производных функции в точках х:

        При решении краевых задач с граничными условиями часто выполняют преобразования граничных условий к начальным. Такое преобразование дает возможность функции группы rkfixed() использовать для решения некоторых дифференциальных уравнений с частными производными (ДУЧП).

        Функция bvalfit() выполняет преобразования граничных условий, заданных на интервале поиска решения и возвращает вектор начальных условий в неизвестной точке х1.

        Она имеет формат:

        Где: v1 – вектор, содержащий неполные граничные условия для x1;

        v2 – вектор, содержащий неполные условия для x2;

        x1 и x2- начальные и конечные точки интервала, на котором решается ДУЧП;

        xf- точка на интервале (х1,х2), в которой искомая функция при поиске решения от х1 и х2 имеет одинаковые значения;

        D- n-мерный вектор младших производных:

        load1 – искомый вектор граничных значений для точки х1;

        load2 – искомый вектор граничных значений для точки х2;

        score – n-мерный вектор значений функции и ее производных в точке xf. Если score(xf,y)=y, то все значения производных справа и слева совпадают.

        Рассмотрим использование функции на примере.

        При заданных начальных условиях:

        Пример 7.2. Решить уравнение:

        Функция sbval() вычисляет недостающие начальные условия в точке х1 и тем самым преобразует краевую задачу в задачу Коши. Она имеет формат

        где: v – вектор для начальных значений младших производных (задаются как начальные приближения для искомых производных в точке х1);

        x1, x2 – начальное и конечное значение интервала поиска решения;

        D – n-мерный вектор младших производных;

        load – вектор начальных условий для точки х;

        score – разность производных и их граничных значений в точке х2.

        Пример 7.3. Решить дифференциальное уравнение с граничными значениями:

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

        Для решения дифференциального уравнения в частных производных типа уравнения Пуассона

        • расположение элементов матрицы соответствует расположению сетки внутри квадратной области;
        • значение элемента матрицы аппроксимирует значение искомого решения.

        7.3. Интерполирование и функции предсказания

        продумать таблицы вида y(x)

        • Функция должна проходить через точки (xi, yi), то есть f(xi)=yi . В этом случае говорят о интерполяции данных, заданных таблицей, функцией f(x) во внутренних точках между узлами сетки, или экстраполяции (функции предсказания) за пределами интервала содержащего все xi.
        • Функция должна некоторым образом приближать y(xi) необязательно проходя через узлы сетки. В данном случае речь идет о регрессии.

        Для построения интерполяции или экстраполяции MathCad имеет ряд встроенных функций, позволяющих соединить узлы сетки кривой какой – либо степени гладкости.

        7.3.1. Линейная интерполяция

        При выполнении линейной интерполяции MathCAD соединяет смежные точки табличной функции прямыми линиями, представляя функцию в виде ломаной линии. Тогда по такой функции можно определить любые промежуточные значения в заданном интервале. Эти вычисления выполняются встроенной функцией linterp(). Она имеет формат

        где vx – вектор, состоящий из значений х, заданных в таблице исходных данных (замечание: элементы вектора х должны располагаться в порядке возрастания)

        vy – вектор состоящий из значений у заданных в таблице исходных данных (замечание: определенному);

        t – аргумент, при котором нужно найти промежуточное значение y. Вектор vx должен содержать вещественные значения, расположенные в порядке возрастания.

        При небольшом числе узловых точек (менее 10) линейная интерполяция оказывается довольно грубой. При ней даже первая производная функции аппроксимации испытывает резкие скачки в узловых точках. Для целей экстраполяции функция linterp() не предназначена и за пределами области определения может вести себя непредсказуемо.

        • Пусть дана таблица исходных данных:


          О
          X 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85

        Y 0.86 0.77 0.70 0.63 0.58 0.52 0.47 0.39

        • Определение вектора Y (берется из таблицы данных):
        • Встроенная функция linterp() вычисляет значение в конкретной точке (последний параметр функции), но так как нам необходимо построить график, то мы заменим параметр t неизвестной (например, r), не имеющей дискретного значения, и подставим эту переменную в нижний местозаполнитель декартовой системы координат (плоский график). построим график, отформатируем его по своему усмотрению:

        Чтобы вычислить значение графика в какой – либо точке, необходимо поставить вместо r число. Замечание: данные действия необходимо производить вне графической зоны.

        Пример: Вычислим значение функции, построенной с помощью линейной интерполяции в точке 2.1:

        7.3.2. Кубическая сплайн-интерполяция

        Кубическая сплайн-интерполяция позволяет провести кривую через набор точек таким образом, что первые и вторые производные кривой непрерывны в каждой точке. Эта кривая образуется путем создания ряда кубических полиномов, проходящих через наборы из трех смежных точек, состыкованных друг с другом. Для построения кубической сплайн – интерполяции в MathCad 2001 имеются встроенные функции interp() и применяемые совместно с ней функции cspline(vx,vy), lspline(vx,vy) и pspline(vx,vy). Формат функции interp()

        где vs – вектор вторых производных, полученный одной из вспомогательных функций cspline(vx,vy), lspline(vx,vy) и pspline(vx,vy);

        vx – вектор неизвестных, полученный из таблицы данных (характерно и для вспомогательных функций);

        vy – вектор значений функции, полученный из таблицы данных (характерно и для вспомогательных функций);

        r – значение аргумента при котором вычисляется значение функции (подобно параметру r функции linterp()).

        При выполнении интерполяции для вычисления вектора vs можно пользоваться тремя функциями:

        cspline(vx,vy) – генерирует кривую сплайна, которая может быть кубическим полиномом в граничных точках;

        lspline(vx,vy) – генерирует кривую сплайна, которая приближается к прямой линии в граничных точках;

        pspline(vx,vy) – генерирует кривую сплайна, которая приближается к параболе в граничных точках.

        Для наглядности построим графики кубической интерполяции, используя все три вспомогательные функции. В качестве исходных данных возъмем данные из предыдущего примера, а т.е.:

        Для построения графиков выполним следующие действия:


          О
          X 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85

        Y 0.86 0.77 0.70 0.63 0.58 0.52 0.47 0.39

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

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

        Данная иллюстрация наглядно показывает различия между вспомогательными функциями.

        7.3.3. Линейное предсказание

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

        где vy – вектор табличных значений функции (элементы вектора vy должны быть взяты через равные интервалы);

        m – число последних исходных значений табличной функции, по которым выполняется прогноз;

        n – число предсказанных значений табличной функции.

        Рассмотрим применение функции предсказания на примере:

        П
        Y 0.86 0.77 0.70 0.63 0.58 0.52 0.47 0.39

        усть дана таблица данных

        • Определение вектора Y (берется из таблицы данных):
        • Определение m, число известных значений Y по которым будет построена экстраполяция, в нашем случае m = 8;
        • Определение n, число значений Y, по которым строится экстраполяция + количество точек которое необходимо предсказать. В нашем случае n = 13.
        • Построим график функции предсказания. Для наглядности построим на одном графике исходную функцию (построим по точкам) и функцию предсказания, причем таким образом, чтобы последняя являлась продолжением первой функции. Для этого необходимо провести некоторые манипуляции:
        • Так как мы имеем 8 значений исходных данных, то будем строить исходную функцию в 8 – ми точках:
        • Так как мы собираемся строить экстраполяцию для 13 – ти точек, то:
        • Построим график функций. Причем необходимо обратить внимание, что мы сдвинули начало координат для функции предсказания на 8 точек вправо (потому что исходная функция кончается на 8 – й точке) с помощью выражения j+8.

        7.3.4. Использование функции регрессии

        MathCAD имеет ряд встроенных функции для вычисления регрессий. Эти функции создают кривую или поверхность определенного типа, которые максимально приближены к значениям у в точках (х, у). В отличие от функций интерполяции, кривая регрессии проводится из условия минимума среднеквадратичного отклонения. Среднеквадратическое отклонение рассчитывается по формуле:

        Где F(x) – значения функции регрессии в узлах сетки:

        Y – табличные значения функции в узлах сетки;

        n – количество узлов сетки.

        7.3.4.1. Линейная регрессия

        • Slope (vx,vy) – возвращает наклон линии регрессии (коэффициент k);
        • Intercept (vx,vy) – возвращает смещение по оси ординат (значение b) линии регрессии.
        • line(vx, vy) – возвращает вектор коэффициентов, стоящих при неизвестных начиная с младшей степени.

        В
        X 0.15 0.25 0.35 0.45 0.55 0.65 0.75 0.85

        Y 0.86 0.77 0.70 0.63 0.58 0.52 0.47 0.39

        ыполним линейную регрессию для функции заданной таблично. Рассмотрим таблицу данных из предыдущих примеров:

        • Составим вектор неизвестных Х:
        • Составим вектор значений функции Y(X):
        • Рассчитаем коэффициенты, стоящие при неизвестных:
        • Подставим значения коэффициентов в уравнение прямой и построим график. на графике изобразим начальные данные в виде точек и уравнение линейной регрессии:

        Коэффициенты уравнения линейной регрессии выбраны таким образом, чтобы среднеквадратическое отклонение было минимальным.

        7.3.4.2. Полиномиальная регрессия

        При выполнении полиномиальной регрессии табличная функция заменяется полиномом n-й степени. Для этой цели используются функции:

        Regress (vx,vy,n) – возвращает вектор, требуемый функцией interp(), чтобы найти полином порядка n, который наилучшим образом приближает данные vx и vy. На практике не следует использовать n>4. Функция regress() пытается одним полиномом приблизить все данные, что не дает хороших результатов для табличных функций, не связанных одной полиномиальной зависимостью;

        Loess (vx,vy,span) – возвращает вектор, требуемой функцией interp(), чтобы найти набор полиномов второго порядка, который наилучшем образом приближает данные из vx и vy. Аргумент span (span>0,) определяет, насколько большие окрестности функция loess() будет использовать при выполнении локального приближения. Вместо одного полином, как это дает функция regress(), функция loess() создает различные полиномы второго порядка в зависимости от расположения на кривой, исследуя данные в малой окрестности, определяемой параметром span (по умолчанию span=0.75);

        Interp(vs,vx,vy,x) – возвращает интерполируемое значение y, соответствующее х. Вектор vs вычисляется функцией regress() или loess().

        REDMOND

        Добавить комментарий

        Ваш адрес email не будет опубликован. Обязательные поля помечены *