Как решить уравнение в scilab

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

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

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

Мы рассмотрим способы исследования сложных механических систем, моделируемых дифференциальными уравнениями. Рассмотрим способы конструирования управления нескольких видов для механической системы с двумя степенями свободы. А также, проведем визуализацию процесса стабилизации движения.

Дифференциальные уравнения n-го порядка

Дифференциальным уравнением n-го порядка называется соотношение вида

Решением дифференциального уравнения является функция \( x(t) \), которая обращает это уравнение в тождество. Дифференциальные уравнения имеют бесконечное множество решений.

Чтобы однозначно определить решение некоторой задачи, необходимо задавать начальные условия. Количество таких условий должно совпадать с порядком уравнения. А решение, найденное для таких условий называется решением задачи Коши.

6.2 Пример решения оду в Scilab

Для решения обыкновенных дифференциальных уравнений (ОДУ) в Scilab используется
функция y = ode([type], y0, t0, t, func).
Разберём, что обозначает каждый из параметров у этой функции.

type — необязательный строковый параметр, с помощью которого можно выбрать метод решения ОДУ. Обычно этот параметр опускается.
t0скаляр начальный момент отрезка интегрирования. Обычно \( t0 = 0 \).
y0 — начальные условия. Отметим, что \(y0 \) это вектор, размерность которого совпадает с порядком ОДУ. Так, для ОДУ 2-го порядка необходимо задать значения в начальный момент времени для функции и её производной, т.е. использовать запись \(y0 = [0.1, 0.3]\).
tвектор, задающий узлы сетки, в которых ищем решение. Как правило, вектор t задается следующим образом t=t0:d:tmax, где \(t0\) — начальный момент отрезка интегрирования, \(d\) — шаг дискретизации, \(tmax\) — конечный момент отрезка интегрирования.
func — пользовательская функция, определяющая правую часть уравнения.
yвектор решений.

Рассмотрим использование функции ode() на примере решения следующей задачи.

Найти угловую скорость \( \omega(t) \) твердого тела вокруг неподвижной оси, если заданы начальная угловая скорость тела \( \omega_0=1 \) и угловое ускорение \( \varepsilon(t) = 2+0.5sin(t) \). Найти значение \( \omega(t) \) в момент времени \( t_1=1.3 \). Построить график функций.

Рисунок 9. Сравнение графиков угловой скорости точки, по функции, найденной аналитическим и численным интегрированием. Красным кружком обозначено значение скорости точки в момент времени t=1.3c.

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

В нашем случае по условию задачи указаны следующие параметры для функции ode():
\(t0=0 \) начальный момент времени,
\(y0 = 1\) начальное условие одно, т.к. порядок уравнения равен 1, это начальная угловая скорость тела \( \omega_0=1 \)
t=t0:h:tmaxвектор, задающий узлы сетки.

Результат работы программы представлен на рис.9, исходный код на листинге 15.

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

Функция \( f = 2t — 0,5cos(t) + 1,5 \) единственное решение дифференциального уравнения, удовлетворяющее заданным начальным условиям, то есть, функция \(f\) решение задачи Коши.

6.3 Cистемы дифференциальных уравнений

Для решения систем ОДУ в Scilab используется та же функция y = ode([type], y0, t0, t, func). Однако важным требованием является запись исследуемой системы в нормальной форме Коши.

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

\begin x_1′ = f_1(t,x_1. x_n) \\ x_2′ = f_2(t,x_1. x_n) \\ . \\ x_n’ = f_n(t,x_1. x_n) \end

Решением системы ОДУ является вектор x(t), который обращает это уравнение в тождество. Размерность вектора равна количеству уравнений в системе.

Стоит отметить, что дифференциальное уравнение n-ой степени может быть представлено в виде системы из n-уравнений первой степени, что позволяет решать задачу Коши для полученной системы ОДУ.

6.4 Примеры поиска решения систем ОДУ в Scilab

Решение системы ОДУ

Рассмотрим решение задачи Коши для системы уравнений

\begin x’ = cos(xy) \\ y’ = sin(x+ty) \end

на интервале \( [0; 10]\) и с начальными условиями \(x(0)=0, y(0)=0 \).

Для поиска решения данной задачи, нам необходимо привести исходную систему к нормальному виду Коши. Для этого введём новые переменные \( (z1, z2) \) и сделаем необходимые переобозначения в исходной системе:

Рассмотрим решение задачи Коши для системы уравнений

\begin z_1 = x \\ z_2 = y \end \begin z_1′ = cos(z_1 z_2) \\ z_2′ = sin(z_1 + t z_2) \end

Код программы, реализующей поиск решения системы дифференциальных уравнений представлен на листинге 16. Обратите внимание, как происходит обращение к компонентам вектора решения \( z(t) \).

Для наглядной реализации сформировано графическое решение на рис. 10.

Рисунок 10. Графическое решение задачи Коши с помощью функции ode().

Решение системы ОДУ в матричной форме

Рассмотрим решение задачи Коши для системы уравнений, заданных в матричном виде

на интервале \( [0; 10] \) и начальными условиями \( y_1(0)=1, y_2(0)=0 \).

Код программы, реализующей поиск решения системы дифференциальных уравнений представлен на листинге 17. Обратите внимание, как происходит обращение к компонентам вектора решения \(y(t)\).

Для наглядной реализации сформировано графическое решение на рис. 11.

Рисунок 11. Графическое решение задачи Коши с помощью функции ode().

Решение ДУ 2-го порядка путём сведения к системе уравнений

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

Груз находится на пружине жёсткости \( c=12 \) H/м, масса груза \( m=68.7 \) кг. Определить закон движения груза, если на него действует сила \( F=100.5sin(2t) + <2\pi \over 3>\) H.

По 2-му закону Ньютона, движение груза описывается с помощью дифференциального уравнения 2-й степени, которое имеет вид:

и начальными условиями \( x(0)= 0, ;\ \dot(0)= 0 \).

Как известно, ОДУ второго порядка сводится к системе в нормальной форме Коши, состоящей из двух уравнений первой степени. Введём новые переменные \( (z_1, z_2) \) и сделаем необходимые переобозначения в исходной системе:

\begin z_1 = x \\ z_2 = \dot \end \begin \dot_1 = z_2 \\ \dot_2 = <1 \over m>(-cz_1 + F(t)) \end

Код программы, реализующей поиск решения системы дифференциальных уравнений представлен на листинге 18. Обратите внимание, как происходит обращение к компонентам вектора решения \( y(t) \).

Для наглядной реализации сформировано графическое решение на рис. 12. Компонента \( z_1 \) представляет собой координату груза, а компонента \( z_2 \) — скорость груза.

Рисунок 12. Графики движения груза на пружине для компонент \( z_1 и z_2 \) соответственно.

Вычисление интегралов, решение уравнений и систем

Краткие теоретические сведения

В Scilab вычисление определенного интеграла методом трапеций реализовано функцией

где x –вектор значений аргумента подынтегральной функции на отрезке интегрирования, y –вектор значений, полученных при вычислении подынтегральной функции для элементов вектора x.

Например, для вычисления нужно выполнить следующий набор команд:

Фрагмент программы x=2:0.01:5.3 y =2*x./(sin(x)+1.5) integral = inttrap(x,y)disp(integral)Результат 30.436962

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

Integrate(fun, x, a, b, ,er1 ,er2),

где fun– подынтегральная функция в символьном виде, x – переменная интегрирования в символьном виде, a, b –пределы интегрирования, er1,er2 –абсолютная и относительная погрешности интегрирования (необязательные параметры).

Например, для вычисления нужно задать:

Фрагмент программы z=integrate(‘2*x./(sin(x)+1.5)’, ‘x’, 2, 5.3)disp(z)Результат 30.437056

Универсальная команда интегрирования:

[integral,err]=intg(a, b, name ,er1,er2),

где a, b –пределы интегрирования, name – имя подынтегральной функции (может быть задана с помощью внешней функции), er1,er2 –абсолютная и относительная погрешности интегрирования (необязательные параметры). Функция intgвозвращает значение интеграла (integral) и погрешность вычислений (err).

Внешнюю функцию можно задать командой

deff(‘переменная=имя функции(параметр)’, ‘символьное представление функции’) Например, deff(‘y=F(x)’, ‘y=2*x./(sin(x)+1.5)’).или

function переменная = имя функции(параметр-аргумент функции)

операторы, вычисляющие значение функции

endfunctionНапример, function y=f(t) y=t^2/sqrt(3+sin(t)) endfunctionилиfunction y=f(t),y=t^2/sqrt(3+sin(t)),endfunction

Ниже приводится пример вычисления интеграла .

Фрагмент программы function y=f(x) y=2*x./(sin(x)+1.5)endfunctionz=intg(2,5.3,f), disp(z)Результат 30.437056

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

где x0 –начальное приближение корня, f– функция, описывающая левую часть уравнения f(x)=0.

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

Фрагмент программы deff(‘y=F(x)’, ‘y=sin(2*x)-cos(3*x.^2)-sin(3*x)’)root=fsolve(7,F)disp(root)Результат 6.9755674

Для решения полиномиальных уравнений вида используется функция

где а – вектор коэффициентов перед неизвестными полинома размерностью n+1(n – порядок полинома).

Результатом работы этой функции будет вектор корней полинома размерностью n.

Пример решения полиномиального уравнения приведен ниже.

Фрагмент программы v=[3 1 -10 -8]R=roots(v)disp(R)Результат 2. -1.3333333 — 1.

Для уравнения два корня – комплексные.

Фрагмент программы v=[3 1 -10 8]R=roots(v)disp(R)Результат — 2.2935835 0.9801251 + 0.4494650i 0.9801251 — 0.4494650i

Функция rootsможет также принимать в качестве параметра полином, созданный функциейpolyи представляющий собой левую часть уравнения :

где a –вектор коэффициентов полинома записанных в обратном порядке, x — символьная переменная, f1– символьная переменная, принимающая значения ‘c’ или ‘r’ (roots или coeff).

Например, чтобы создать полином , нужно использовать команду

Фрагмент программы p=poly([3 -2 1 0 4],’x’,’c’)disp(p)Результат

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

Фрагмент программы p=poly([-8 -10 1 3],’x’,’c’)R=roots(p)disp(R)Результат 2. — 1.3333333 — 1.

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

— применение операции левого матричного деления;

— использование обратной матрицы.

Если задана система линейных алгебраических уравнений вида:

где А – матрица коэффициентов перед неизвестными системы, В – вектор свободных членов, то решение системы может быть найдено в виде:

То же самое решение может быть получено с помощью обратной матрицы, например:

Например, решить систему уравнений

Фрагмент программы A=[3 1;-3 5]; B=[-4 ;36]; X=inv(A)*B, disp(X)илиX1=A\B , disp(X1)Результат — 3.1111111 5.3333333

Для решения систем нелинейных уравнений можно использовать функцию

где x0 –вектор начальных приближений для неизвестных, f –функция, определяющая систему

Например, решение системы можно выполнить следующим образом:

Фрагмент программы function [y]=fun(x) y(1)=2*x(1)+x(2)-6 y(2)=x(1)^2+x(2)^2-14endfunctionX0=[1;1]R=fsolve(X0,fun)disp(R)Результат 1.2338096 3.5323808

Задание 1. Вычисление определенного интеграла

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

Шаг 1. Создадим вектор X, значения которого будут изменяться от 2,1 до 4,3 с шагом 0.01.

Шаг 2. Создадим вектор Y, каждое значение которого вычисляется по формуле .

Шаг 3. Применим команду inttrap(X, Y).

Шаг 4. Используем функцию integrate,задав подынтегральную функцию в символьном виде.

Шаг 5. Определим внешнюю функцию с помощью команды deffили конструкции function

Шаг 6. Выведем результаты, используя команду disp.

ПрограммаРезультат выполнения
X =2.1:0.01:4.3 Y =sin(X)/1.5 integral_1 = inttrap(X,Y)integral_2=integrate(‘sin(x)/1.5’, ‘x’, 2.1, 4.3)disp(integral_1)disp(integral_2)— 0.0693640 — 0.0693646
deff(‘y=F(x)’,’y=sin(x)/1.5′); integral_3=intg(2.1,4.3,F)function y=f(x) y=sin(x)/1.5endfunctionintegral_4=intg(2.1,4.3,f)disp(integral_3)disp(integral_4)— 0.0693646 — 0.0693646

Индивидуальные задания приведены в таблице 3.4.

Задание 2. Поиск корней уравнения, графическая интерпретация

Постановка задачи. Найти корень уравнения для заданного начального приближения. Выполнить графическую интерпретацию результата.

Шаг 1. Определим внешнюю функцию с помощью команды deffили конструкции function

Шаг 2. Найдем корень уравнения с помощью функции fsolve,подставив в качестве первого параметра заданное начальное приближение.

Шаг 3. Выведем результат, используя команду disp.

Шаг 4. Выполним графическую интерпретацию результата. Для этого зададим аргумент функции из левой части уравнения таким образом, чтобы найденный корень попадал в диапазон между первым и последним элементом вектора. Построим график функции из левой части уравнения с помощью plot.Построим также линию y=0 и отметим точку с абсциссой, равной корню, и ординатой, равной значению функции для корня.

ПрограммаРезультат выполнения
deff(‘y=F(x)’, …’y=sin(x)-cos(x.^2)-sin(2*x)’)root=fsolve(1,F)disp(root)x=0.5:0.01:2.5plot(x,F(x),’-b’,root,F(root),’xr’,x,0,’-k’)1.1695683

Индивидуальные задания приведены в таблице 3.5

ВариантУравнениеНачальноеприближение
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

Задание 3. Поиск корней полиномиального уравнения, графическая интерпретация

Постановка задачи. Найти все корни полиномиального уравнения. Выполнить графическую интерпретацию для одного из найденных действительных корней.

Шаг 1. Создадим вектор коэффициентов полинома в левой части уравнения (или полином с помощью poly)

Шаг 2. Найдем корни уравнения с помощью функции roots.

Шаг 3. Выведем результат, используя команду disp.

Шаг 4. Выполним графическую интерпретацию результата. Для этого зададим аргумент функции из левой части уравнения таким образом, чтобы выбранный действительный корень попадал в диапазон между первым и последним элементом вектора. Построим график функции из левой части уравнения с помощью plot.Построим также линию y=0 и отметим точку с абсциссой, равной корню, и ординатой, равной значению функции для корня.

ПрограммаРезультат выполнения
v=[2 0 4 -6 -3]R=roots(v)disp(R)root=R(3)x=0.5:0.01:2y=2*x.^4+4*x.^2-6*x-3F_root=2*root^4+4*root^2-6*root-3plot(x,y,’-b’,root,F_root,’xr’,x,0,’-k’)— 0.4129576 + 1.7282075i — 0.4129576 — 1.7282075i 1.2164706 — 0.3905555

Индивидуальные задания приведены в таблице 3.6.

ВариантУравнение
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.

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

Постановка задачи. Решить систему линейных уравнений.

Шаг 1. Создадим матрицу коэффициентов при неизвестных

Шаг 2. Создадим вектор свободных членов.

Шаг 3. Умножим матрицу, обратную к матрице коэффициентов, на вектор свободных членов (или применим операцию левого матричного деления).

Шаг 4. Выведем результат, используя команду disp.

ПрограммаРезультат выполнения
A=[3 1 1;-3 5 6;1 -4 -2]; B=[-4 ;36;-19]; X=inv(A)*B disp(X)— 3. 3. 2.

Индивидуальные задания приведены в таблице 3.7.

Система уравненийСистема уравнений
1. 2.
3. 4.
5. 6.
7. 8.
9. 10.
11. 12.
13. 14.
15. 16.

Статьи к прочтению:

Метод Крамера за 3 минуты. Решение системы линейных уравнений — bezbotvy

Похожие статьи:

Приближенное вычисление интегралов Приближённое вычисление определённого интеграла основано на геометрическом смысле интеграла и сводится к приближённому…

Задание: графически и численно решить систему нелинейных алгебраических уравнений, на примере поиска точек пересечения двух функций. Исходные данные:…

Сопромат .in.ua

изучаем сопротивление материалов

Некоторые варианты решения системы уравнений

Решение online

На странице “Решение системы линейных уравнений“ вы можете решить систему до 10 уравнений online.

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

Из линейной алгебры нам известно, что для системы линейных уравнений A*x=b решением 1 есть x=A -1 *b, если детерминант матрицы A не равен нулю. Здесь A -1 – обратная матрица коэффициентов СЛАУ .

Решим систему из двух уравнений.

В ячейках (A1:B2) вводим данные.
Детерминант матрицы: MDETERM(A1:B2)

Затем получаем обратную мартицу A -1 :
=

Умножаем полученную обратную матрицу на столбик з правою частью систем уравнений:
=

Осталось проверить проверить правильность решения, подставив полученные неизвестные в систему уравнений.

Пример решения системы линейных уравнений в Scilab

Scilab — мощный открытый пакет прикладных математических программ (система компьютерной математики) для инженерных и научных расчётов.

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

Более подробно с пакетом можно ознакомится на домашней странице Scilab или в википедии

Пример

Решим систему из двух уравнений вида A*x=b

Задаем матрицу коэффициентов: —>A=[1,2;3,4] A = 1. 2. 3. 4. Задаем вектор свободных коэффициентов: —>b=[2;1] b = 2. 1.

Определяем детерминант матрицы: —>det(A) ans = — 2 Так как определитель матрицы отличен от нуля, решение СЛАУ существует.

Решение СЛАУ методом обратной матрицы —>x=A\b x = — 3. 2.5 Запись A\b соответствует математической операции A -1 b. Записи x=A\b эквивалентна запись x=inv(A)*b

Эту систему уравнений также можно решить с помощью специальной функции linsolve (эта функция решает уравнение вида Ax+b=0, поэтому поменяем знак вектора b) x=linsolve(A,-b) x = — 3. 2.5 и получили ответ: x0= -3; x1= 2.5;

Проверяем A*x-b ans = 1.0D-14 * 0.2220446 0.3552714 результирующий вектор близок к нулю, то есть система решена верно.
Существуют и другие способы решения системы линейных уравнений в среде Scilab.

Пример решения системы линейных уравнений в среде программирования R

R — язык программирования для статистической обработки данных и работы с графикой, а также свободная программная среда вычислений с открытым исходным кодом.

Пример

Решаем систему Ax=b (из двух уравнений)

A A [,1] [,2] [1,] 1 2 [2,] 3 4 > b b [1] 2 1 > x x [1] -3.0 2.5 и получили ответ: x1= -3; x2= 2.5;

Проверка: > A %*% x [,1] [1,] 2 [2,] 1

Определитель матрицы: > det(A) [1] -2

Решение системы линейных уравнений Ax=b в Euler Math Toolbox

Домашняя страница Euler Math Toolbox . В пакет интегрирована система компьютерной алгебры Maxima. Система напоминает Matlab, но имеет собственный стиль, и немного иной синтаксис.
Домашняя страница автора René Grothmann

Пример

This is Euler Math Toolbox, Version 5.8. >A:=[1,2;3,4] 1 2 3 4 >b:=[2;1] 2 1 >x:=A\b -3 2.5 Получили ответ: x0= -3; x1= 2.5;

Определитель матрицы: >det(A) -2

Проверка: умножим A на x (операция умножения обозначается точкой «.») >A.x 2 1

Решить указанную систему можно также с помощью следующего выражения (inv(A) — обратная матрица) >x:=inv(A).b -3 2.5

1 Этот способ решения называется — решение СЛАУ методом обратной матрицы


источники:

http://csaa.ru/vychislenie-integralov-reshenie-uravnenij-i-sistem/

http://sopromat.in.ua/examples/nekotorye-varianty-resheniya-sistemy-uravnenii