Samoylova / vika_3
.docxTo get started, select MATLAB Help or Demos from the Help menu.
>> clear all
format long
disp('Решаем пример 3')
syms x y Dy D2y D3y D4y % описали переменные
Решаем пример 3
>> F=D2y^2-4*Dy*D2y+Dy^2+2*y*sin(x);
>> x1=0; y1=2; Dy1=1; x2=1; y2=0; Dy2=-1;
>> fprintf('Подынтегральная функция: F=%s\n',char(F))
fprintf('Граничные условия слева: y(%d)=%d; y''(%d)=%d\n',x1,y1,x1,Dy1)
fprintf('Граничные условия справа: y(%d)=%d; y''(%d)=%d\n',x2,y2,x2,Dy2)
Подынтегральная функция: F=D2y^2-4*Dy*D2y+Dy^2+2*y*sin(x)
Граничные условия слева: y(0)=2; y'(0)=1
Граничные условия справа: y(1)=0; y'(1)=-1
>> dFdy = diff(F,y)
dFdy1 = diff(F,Dy)
dFdy2 = diff(F,D2y)
dFdy =
2*sin(x)
dFdy1 =
-4*D2y+2*Dy
dFdy2 =
2*D2y-4*Dy
>> d_dFdy1_dx = diff(dFdy1,x);
d_dFdy1_dy = diff(dFdy1,y);
d_dFdy1_dy1 = diff(dFdy1,Dy);
d_dFdy1_dy2 = diff(dFdy1,D2y);
dFy1dx = d_dFdy1_dx + d_dFdy1_dy*Dy + d_dFdy1_dy1*D2y + d_dFdy1_dy2*D3y
dFy1dx =
2*D2y-4*D3y
>> d_dFdy2_dx = diff(dFdy2,x);
d_dFdy2_dy = diff(dFdy2,y);
d_dFdy2_dy1 = diff(dFdy2,Dy);
d_dFdy2_dy2 = diff(dFdy2,D2y);
dFy2dx = d_dFdy2_dx + d_dFdy2_dy*Dy + d_dFdy2_dy1*D2y + d_dFdy2_dy2*D3y;
d_dFdy2dx_dx=diff(dFy2dx,x);
d_dFdy2dx_dy=diff(dFy2dx,y);
d_dFdy2dx_dy1 = diff(dFy2dx,Dy); % d((dFy'')/dx)/dy'
d_dFdy2dx_dy2 = diff(dFy2dx,D2y); % d((dFy'')/dx)/dy''
d_dFdy2dx_dy3 = diff(dFy2dx,D3y); %d((dFy'')/dx)/dy'''
d2Fy2dx2 = d_dFdy2dx_dx + d_dFdy2dx_dy*Dy + d_dFdy2dx_dy1*D2y + d_dFdy2dx_dy2*D3y + d_dFdy2dx_dy3*D4y
d2Fy2dx2 =
-4*D3y+2*D4y
>> Euler = simple(dFdy-dFy1dx+d2Fy2dx2)
deqEuler = [char(Euler) '=0']; % составили уравнение
fprintf('Уравнение Эйлера-Пуассона:\n%s\n',deqEuler)
Euler =
2*sin(x)-2*D2y+2*D4y
Уравнение Эйлера-Пуассона:
2*sin(x)-2*D2y+2*D4y=0
>> Sol = dsolve ( deqEuler, 'x' ) % решаем уравнение
if length(Sol)~=1 % решений нет или более одного
error('Нет решений или более одного решения!');
end
Sol =
exp(-x)*C2+exp(x)*C1-1/2*sin(x)+C3*x+C4
>> dydx = diff(Sol,x) % нашли производную
slY=subs(Sol,x,sym(x1)); % подставляем x1 в y(x)
slDY=subs(dydx,x,sym(x1)); % подставляем x1 в y'(x)
srY=subs(Sol,x,sym(x2)); % подставляем x2 в y(x)
srDY=subs(dydx,x,sym(x2)); % подставляем x2 в y'(x)
elY = [char(vpa(slY,14)) '=' char(sym(y1))] % приравниваем y1
elDY = [char(vpa(slDY,14)) '=' char(sym(Dy1))] % приравниваем Dy1
erY = [char(vpa(srY,14)) '=' char(sym(y2))] % приравниваем y2
erDY = [char(vpa(srDY,14)) '=' char(sym(Dy2))] % приравниваем Dy2
Con = solve(elY,elDY,erY,erDY); % решаем систему уравнений
C1 = Con.C1
C2 = Con.C2
C3 = Con.C3
C4 = Con.C4
Sol3 = vpa(eval(Sol),14); % подставляем C1-C4
fprintf('Уравнение экстремали:\ny(x)=%s\n',char(Sol3))
dydx =
-exp(-x)*C2+exp(x)*C1-1/2*cos(x)+C3
elY =
C2+C1+C4=2
elDY =
-1.*C2+C1-.50000000000000+C3=1
erY =
.36787944117144*C2+2.7182818284590*C1-.42073549240395+C3+C4=0
erDY =
-.36787944117144*C2+2.7182818284590*C1-.27015115293407+C3=-1
C1 =
6.3238534064715820077926323269381
C2 =
-20.717584736547729344151948995542
C3 =
-25.541438143019311351944581322480
C4 =
16.393731330076147336359316668604
Уравнение экстремали:
y(x)=-20.717584736548*exp(-1.*x)+6.3238534064716*exp(x)-.50000000000000*sin(x)-25.541438143019*x+16.393731330076
>> xpl = linspace(x1,x2); % задаём массив аргументов
y3=subs(Sol3,x,xpl); % вычисляем значения функции
plot ( xpl, y3, '-r' ) % рисуем
title ( '\bfExample 3' ) % заголовок
xlabel('x') % метка оси OX
ylabel('y(x)') % метка оси OY