Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Samoylova / vika_9

.docx
Скачиваний:
19
Добавлен:
22.03.2015
Размер:
13.63 Кб
Скачать

To get started, select MATLAB Help or Demos from the Help menu.

>> clear all

format long

disp('Решаем пример 9')

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

Решаем пример 9

>> F=2*Dy^2+2*y^2+y*cos(x)-5*x; % подинтегральная функция

>> x1=0; y1=2; x2=2; y2=2;

>> phi=2-(2-x)^2;

>> fprintf('Подынтегральная функция: F=%s\n',char(F))

fprintf('Граничные условия: y(%d)=%d; y(%d)=%d\n',x1,y1,x2,y2)

fprintf('Ограничение на правом конце: y=%s\n',char(phi))

dFdy = diff(F,y);

dFdy1 = diff(F,Dy);

d_dFdy1_dx = diff(dFdy1,x);

d_dFdy1_dy = diff(dFdy1,y);

d_dFdy1_dy1 = diff(dFdy1,Dy); % d(dF/dy')/dy'

dFy1dx = d_dFdy1_dx + d_dFdy1_dy*Dy + d_dFdy1_dy1*D2y;

Euler = simple(dFdy-dFy1dx);

deqEuler = [ char(Euler) '=0' ]; % уравнение

Sol = dsolve(deqEuler,'x'); % решаем уравнение Эйлера

if length(Sol)~=1 % решений нет или более одного

error('Нет решений или более одного решения!');

end

SolLeft = subs(Sol,x,sym(x1));

SolRight=subs(Sol,x,sym(x2));

EqLeft = [char(SolLeft) '=' char(sym(y1))];

EqRight = [char(SolRight) '=' char(sym(y2))];

Con = solve(EqLeft,EqRight); % решаем систему

C1 = Con.C1;

C2 = Con.C2;

Sol1a = vpa(eval(Sol),14);

xpl = linspace(x1,x2);

y1a = subs(Sol1a,x,xpl);

Подынтегральная функция: F=2*Dy^2+2*y^2+y*cos(x)-5*x

Граничные условия: y(0)=2; y(2)=2

Ограничение на правом конце: y=2-(2-x)^2

>> C1e = eval(C1);

C2e = eval(C2);

f{1} = 'function y = MyFunc(x)'; % заголовок

f{2} = 'C1=x(1); C2=x(2); x0=x(3); y0=x(4); y=x;';

syms C1 C2 % описали символические константы

yx1 = subs(Sol,x,sym(x1));

yx0 = subs(Sol,x,sym('x0'));

dydx = diff(Sol,x);

dphidx = diff(phi,x);

dydxx0 = subs(dydx,x,sym('x0'));

phix0 = subs(phi,x,sym('x0'));

dphidxx0 = subs(dphidx,x,sym('x0'));

f{3} = [ 'y(1)=' char(yx1) '-' char(sym(y1)) ';' ];

f{4} = [ 'y(2)=' char(yx0) '-y0;' ]; % уравнение 2

f{5} = [ 'y(3)=' char(phix0) '-y0;' ]; % уравнение 3

f{6} = [ 'dydxx0=', char(dydxx0), ';' ];

f{7} = [ 'dphidxx0=', char(dphidxx0), ';' ];

f{8} = 'y(4)=dydxx0-dphidxx0;';

disp('Текст файла MyFunc.m')

fprintf('%s\n',f{:});

fid = fopen ( 'C:\Iglin\Matlab\MyFunc.m', 'w' );

fprintf(fid,'%s\n',f{:});

fclose(fid); % закрываем файл

Текст файла MyFunc.m

function y = MyFunc(x)

C1=x(1); C2=x(2); x0=x(3); y0=x(4); y=x;

y(1)=C2+C1-1/8-2;

y(2)=exp(x0)*C2+exp(-x0)*C1-1/8*cos(x0)-y0;

y(3)=2-(2-x0)^2-y0;

dydxx0=exp(x0)*C2-exp(-x0)*C1+1/8*sin(x0);

dphidxx0=4-2*x0;

y(4)=dydxx0-dphidxx0;

??? Error using ==> fprintf

Invalid file identifier -1.

>> xinit = [ C1e; C2e; x2; y2 ] % начальное приближение

[xzero,options]=fsolve('MyFunc',xinit);

fprintf('Количество вычислений функций: %d\n',options(10))

C1 = vpa(sym(xzero(1)),14)

C2 = vpa(sym(xzero(2)),14)

x0 = xzero(3)

y0 = xzero(4)

Sol9 = vpa(eval(Sol),14); % аналитическое решение

fprintf('Уравнение экстремали:\ny=%s\n',char(Sol9))

xinit =

1.89609759105128

0.22890240894872

2.00000000000000

2.00000000000000

??? Error using ==> feval

Undefined command/function 'MyFunc'.

Error in ==> fsolve at 180

fuser = feval(funfcn{3},x,varargin{:});

Соседние файлы в папке Samoylova