Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Part_01_M.doc
Скачиваний:
9
Добавлен:
25.11.2018
Размер:
580 Кб
Скачать
☆
    1. Примеры выполнения заданий

      1. Пример 1a

Найти экстремаль функционала

(1.0)

Исследовать полученную экстремаль на достаточные условия экстремума. Построить график решения.

В этом примере подынтегральная функция F(x,y,y) является функцией общего вида, поэтому составим уравнение Эйлера в виде (1.5) и решим его. Затем построим график решения. Попутно исследуем на выполнение достаточных условия экстремума.

Применим для решения задачи систему программирования MATLAB. Рекомендуется после написания каждой группы команд запустить её и посмотреть результаты.

Вначале очистим память от решавшихся ранее задач. Зададим формат отображения действительных чисел с 14 знаками. Напечатаем заголовок решаемой задачи. Зададим число точек для построения графика. Опишем символические переменные.

clear all % очищаем память

format long % формат отображения чисел с 14 знаками

disp('Решаем пример 1a') % выводим заголовок задачи

syms x y Dy D2y % описали символические переменные

Решаем пример 1a

Уравнение Эйлера является дифференциальным уравнением второго порядка. Для его решения используем принятые в 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 – действительные переменные. Найдём частные производные Fy и Fy.

dFdy=diff(F,y) % вычисляем Fy

dFdy1=diff(F,Dy) % вычисляем Fy'

dFdy =

2*y

dFdy1 =

2*Dy

В уравнение Эйлера входит полная производная dFydx. Вычисляем её по формуле

. (1.0)

Вычислим частные производные Fyx, Fyy и Fyy, а затем найдём полную производную dFydx по (1.7).

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 1a' ) % заголовок

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]