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




Получить символьное решение дифференциального уравнения в ML проще, чем получить решение численными методами. Оно может быть найдено с помощью функции dsolve (expr, cond, var), в которой выражение expr описывает обыкновенное дифференциальное уравнение, cond – начальное условие, var – независимая переменная (её имя не должно начинаться с D). Если она не задана, то по умолчанию независимой переменной считается t.

Существуют правила записи дифференциального уравнения. Для обозначения операции дифференцирования используется символ D. Производная n- го порядка указывается как Dn, т.е. D = dy / dt, a D2 = d2 y / dt2.

Решим уравнение dy / dx=(y+1)/ x

Если решается одно уравнение, то то результат будет содержать константы (постоянные) интегрирования, которые обозначаются C1, C2…

>> dsolve ('Dy=(y+1)/ x', 'x')

ans =

C2* x – 1 % С2 – постоянная интегрирования

Решим уравнение t*(1+t^2)*dx/dt = x+x*t^2-t^2 с начальным условием
x(1) =- pi/4

>> dsolve('t*(1+t^2)*Dx=x+x*t^2-t^2', 'x(1) =-pi/4')

ans =

-t* atan (t)

Решим уравнение 5y(x)+xy'(x)=x^2y(x), y(0)=2

%диф ур 5y(x)+xy'(x)=x^2y(x), y(0)=2

disp('решение диф ур')

dsolve('5*y+x*Dy=x62*y','y(0)=2')

Получим:

решение диф ур

ans =

2*exp((t*(x62 - 5))/x)

 

В случае уравнения второго порядка 4y''+16y'+15y=4e-3x/2 при начальных условиях у(0)=3, y’(0)=-5.5 (количество начальных условий соответствует порядку уравнения).

>> dsolve ('4*D2y+16*Dy+15*y=4*exp(-3*x/2)','y(0)=3','Dy(0)=-5.5','x')

ans =

2/exp((3*x)/2) + 2/exp((5*x)/2) + x/exp((3*x)/2) - exp(x)/exp((5*x)/2)

Можно получить в другом виде (числовом):

Vpa(ans,4)

ans =

2.0/exp(1.5*x) + 2.0/exp(2.5*x) - (1.0*exp(x))/exp(2.5*x) + x/exp(1.5*x)

Для решения системы дифференциальных уравнений в параметрах функции dsolve () указывают несколько уравнений и несколько начальных условий. Найдем решение системы x'=x+2y, y'=3x-4y с начальными условиями х(0)=1 и у(0)=2.

>> [x y]=dsolve('Dx=x+2*y','Dy=3*x-4*y','x(0)=1','y(0)=2')

x =

(10*exp (2*t)) / 7 – 3 / (7*exp (5*t))

y =

(5*exp (2*t)) / 7 + 9 / (7*exp (5*t))

Вычисление пределов

Число b называется пределом последовательности у1, у2, …уn, …, если по мере возрастания номера n член уn неограниченно приближается к b. Предел обозначается .

Для нахождения предела символьного выражения fun в точке х, стремящейся к а предусмотрена функция limit (fun, x, a).

Fun – символьная функция, х - переменная, a - точка, в которой ищется предел.

Например, предел функции (х-1)/(х+5)

Надо задать символьную переменную

>> syms x

Построим график

>> f=(x-1)/(x+5)

f =

(x-1)/(x+5)

>> ezplot(f,-10,10)

>> grid

В качестве точки предела используем inf (бесконечность)

>> limit (f, x, inf) % Предел при

ans =

>> limit (f, x,-inf) % Предел при

ans =

>> limit (f, x, -5) % Предел при

ans =

NaN

>> limit (f, x, 5) % Предел при

ans =

2/5

Определение производной

Символьное дифференцирование выполняет функция diff (fun, var, n). Она находит производную функции fun по переменной var, n – порядок производной.

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

>> f=sin(x)/x

f =

Sin(x)/x

>> diff (f) % То же самое, что diff (f, x, 1)

ans =

cos(x) / x- sin(x) / x^2

>> diff (f, 2) % Вторая производная

ans =

-sin(x)/x-2*cos(x)/x^2+2*sin(x)/x^3

Пример нахождения производных разных порядков для функции двух переменных

>> syms x y

>> f1=sin(x)-log(y)

f1 =

Sin(x)-log(y)

>> a=diff (f1, x) % Производная 1 порядка по х

a =

cos(x)

>> subs(a, 1.5) % Значение 1 производной при х=1.5

ans =

0.0707

>> diff(f1, x, 2) % Производная 2 порядка по х

ans =

-sin(x)

>> diff (f1, y) % Производная 1 порядка по у

ans =

-1/y

>> b=diff (f1, y, 2) % Производная 2 порядка по у

b =

1/y^2

>> subs (b, 2) % Значение 2 производной при у=2

ans =

0.2500

Вычисление интеграла

Средства символьной обработки дают возможность находить неопределенный и определенный интеграл.

Нахождение неопределенного интеграла функции f(x) сводится к нахождению первообразной функции F(x) в наиболее общем виде , т.е. такой функции, что . Символьное вычисление неопределенного интеграла в ML выполняется с помощью функции int (fun,var), где fun – подынтегральная функция, var – переменная интегриривания. Если параметр var не указан, а в fun несколько переменных, то интеграл вычисляется по переменной, наиболее близкой по алфавиту к х. Например, найдем интеграл от функции sin(x)-log(y)

>> syms x y

>> f1=sin(x)-log(y);

>> int (f1, x) % Интеграл от функции ( sin(x)-log(y)) dx по х

ans =

-cos(x)-log(y)*x

>> int (f1, y) % Интеграл от функции ( sin(x)-log(y))dу по у

ans =

sin(x)*y-y*log(y)+y

Определенный интеграл вычисляются с помощью этой же функции int (), но в обращении к ней добавляются ещё 2 параметра – пределы интегрирования. Найдем интеграл

>> I=int ('tan(z)', 0, pi/4) % Переменную интегрирования не указываем, т.к. она единственная в функции

I =

1/2*log(2)

>> vpa (I, 5) % Результат в вещественном виде

ans =

.34658



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-21 Нарушение авторских прав и Нарушение персональных данных


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