- •1. Блок Clock (Годинник)
- •Блок Constant (Константа)
- •3.Блок Fcn (Функція)
- •4.Блок Transfer Fcn (Передавальна функція)
- •5.Блок Gain (Підсилювач)
- •6.Блок Integrator (Інтегратор)
- •7 . Блок Produkt (Множення та ділення)
- •Блок Saturation (Насичення/Обмеження)
- •Практичне заняття №1.
- •Практичне заняття №2.
- •Практичне заняття №3.
- •Практичне заняття №4.
- •Практичне заняття №5.
- •Практичне заняття № 10
- •Практичне заняття № 11
- •Xlabel('X') % метка оси ox
- •Xlabel('X') % метка оси ox
Практичне заняття № 10
Розв`язати задачу:
Розв`язання
Складемо рівняння Ейлера:
.
де у нашому випадку
.
Знайдемо похідні:
Підставимо знайдені похідні в рівняння Ейлера:
Розв’яжемо диференціальне рівняння. Для цього складемо характеристичне рівняння та знайдемо його корені:
Загальний розв’язок має вигляд:
Підставляючи граничні умови, маємо систему рівнянь для визначення сталих :
Розв’язавши систему, отримуємо значення сталих:
Підставляючи знайдені сталі в загальний розв’язок рівняння Ейлера, маємо рівняння екстремалі:
Побудуємо графік екстремалі:
Варіанти завдань:
Практичне заняття № 11
Розв`язати задачу:
Розв`язання
Складемо рівняння Ейлера-Пуассона:
.
де у нашому випадку
.
Знаходьмо похідні:
Підставляємо знайдені похідні в рівняння Ейлера-Пуассона:
Отримали диференціальне рівняння, що допускає зниження порядку. Знайдемо його розв’язок послідовним інтегруванням:
Загальний розв’язок має вигляд:
Підставляючи граничні умови, маємо систему рівнянь для визначення сталих :
Розв’язавши систему отримуємо значення сталих:
Підставляючи знайдені сталі в загальний розв’язок рівняння Ейлера-Пуассона, маємо рівняння екстремалі:
Побудуємо графік екстремалі:
Варіанти завдань:
Для нахождения экстремалей функционала также можно задействовать систему MATLAB. Приведем несколько примеров.
Пример 1.
Знайти екстремаль функціоналу
Побудувати графік розв’язку.
У цьому прикладі підінтегральна функція є функцією загального вигляду, складемо рівняння Ейлера у вигляді і розв’яжем його. Потім побудуємо графік розв’язку.
Застосуємо для розв’язку задачі систему програмування MATLAB. Рекомендується після написання кожної групи команд запустити її і подивитися результати.
Спочатку очистимо пам'ять від завдань що розв'язувалися раніше. Задамо формат відображення дійсних чисел з 14 знаками. Надрукуємо заголовок розв'язуваної задачі. Задамо число точок для побудови графіка. Опишемо символічні змінні.
clear all % очищаем память
format long % формат отображения чисел с 14 знаками
disp('Решаем пример 1') % выводим заголовок задачи
syms x y Dy D2y % описали символические переменные
Решаем пример 1
Рівняння Ейлера є диференціальним рівнянням другого порядку. Для його розв’язку використовуємо прийняті в MATLAB позначення похідних: Dy для y' і D2y для y''. Вводимо подинтегральную функцію і граничні умови.
F=x^2+y^2+Dy^2; % вводим подынтегральную функцию
x1=-1; % вводим граничные условия
y1=1;
x2=1;
y2=2;
fprintf('Подынтегральная функция: F=%s\n',char(F))
fprintf('Граничные условия: y(%d)=%d; y(%d)=%d\n',x1,y1,x2,y2)
Подынтегральная функция: F=x^2+y^2+Dy^2
Граничные условия: y(-1)=1; y(1)=2
Підінтегральна функція F – символічне вираження, граничні умови x1, y1, x2 і y2 – дійсні змінні. Знайдемо частинні похідні і .
dFdy=diff(F,y) % вычисляем Fy
dFdy1=diff(F,Dy) % вычисляем Fy'
dFdy =
2*y
dFdy1 =
2*Dy
У рівняння Ейлера входить повна похідна . Обчислюємо її за формулою
Обчислимо частинні похідні, а потім знайдемо повну похідну:
d_dFdy1_dx = diff(dFdy1,x) % ¶ (Fy')/ x
d_dFdy1_dy=diff(dFdy1,y) % ¶ (Fy')/ y
d_dFdy1_dy1 = diff(dFdy1,Dy) % ¶ (Fy')/ y'=Fy'y' - условие Лежандра
dFy1dx = d_dFdy1_dx + d_dFdy1_dy*Dy + d_dFdy1_dy1*D2y % d(Fy')/dx
d_dFdy1_dx =
0
d_dFdy1_dy =
0
d_dFdy1_dy1 =
2
dFy1dx =
2*D2y
Складемо ліву частину диференціального рівняння Ейлера і спростимо її. Для розв'язання диференціального рівняння потрібно представити його у вигляді стрічкової змінної. Перетворимо символічну змінну Euler в рядок і додамо в кінці рівності нуль.
Euler = simple(dFdy-dFy1dx) % левая часть уравнения Эйлера
deqEuler = [ char(Euler) '=0' ]; % составили уравнение
fprintf('Уравнение Эйлера: %s\n',deqEuler)
Euler =
2*y-2*D2y
Уравнение Эйлера: 2*y-2*D2y=0
Команда dsolve дозволяє знаходити як спільний розв’язок диференціального рівняння, так і окремий його розв’язок, що задовольняє заданим початковим або граничним умовам. Знайдемо спочатку загальний розв’язок рівняння Ейлера, а потім підставимо в нього граничні умови. Розв’язуємо рівняння Ейлера і перевіряємо, чи є розв’язок єдиним. Якщо ні, припиняємо роботу програми.
Sol = dsolve(deqEuler,'x') % решаем уравнение Эйлера
if length(Sol)~=1 % решений нет или более одного
error('Нет решений или более одного решения!');
end
Sol =
(C1*exp(x)^2+C2)/exp(x)
Програма буде працювати далі, якщо розв’язок існує і єдиний. Сформуємо тепер рівняння для граничних умов. Підставимо в знайдений аналітичний розв’язок Sol граничні точки x1 і x2, перетворені в символічні змінні. Потім перетворимо ці символічні вираження в рядки, і прирівняємо їх відповідно y1 і y2.
SolLeft = subs(Sol,x,sym(x1)); % подставляем x1
SolRight = subs(Sol,x,sym(x2)); % подставляем x2
EqLeft = [char(SolLeft) '=' char(sym(y1))] % приравняли y1
EqRight = [char(SolRight) '=' char(sym(y2))] % приравняли y2
EqLeft =
(C1*exp(-1)^2+C2)/exp(-1)=1
EqRight =
(C1*exp(1)^2+C2)/exp(1)=2
Розв’язуємо отриману систему рівнянь - знаходимо значення довільних постійних C1 і C2. Підставимо знайдені константи в аналітичне рішення Sol. Обмежимо отримане рішення 14 знаками - цього цілком достатньо для побудови графіка розв’язку.
Con = solve(EqLeft,EqRight); % решаем систему уравнений
C1=Con.C1 % присваиваем полученные решения
C2=Con.C2 % символическим константам C1 и C2
Sol1a = vpa(eval(Sol),14); % подставляем C1, C2, вычисляем с 14 знаками
fprintf('Уравнение экстремали:\n%s\n',char(Sol1a))
C1 =
(-2*exp(1)+exp(-1))/(exp(-1)^2-exp(1)^2)
C2 =
exp(1)*exp(-1)*(-exp(1)+2*exp(-1))/(exp(-1)^2-exp(1)^2)
Уравнение экстремали:
(.69877023730776*exp(x)^2+.27331117318808)/exp(x)
Задамо масив аргументів для побудови графіка функції і обчислимо значення функції. Побудуємо графік, підпишемо заголовок і координатні осі.
xpl = linspace(x1,x2); % задаём массив абсцисс
y1a = subs(Sol1a,x,xpl); % вычислили ординаты
plot ( xpl, y1a, '-r' ) % рисуем график
title ( '\bfExample 1' ) % заголовок