Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Методы решения обыкновенных дифференциальных уравненийСодержание книги
Поиск на нашем сайте Общий вид обыкновенного дифференциального уравнения, устанавливающего связь между независимой переменной x неизвестной функцией y и ее производными y’,y”,…,y(n), может мыть представлен следующим образом: Порядок наивысшей производной, входящей в уравнение, называется порядком этого уравнения. Решение дифференциального уравнения (интегрированием) является некоторая функциональная зависимость y=y(x), которая при подстановке в уравнение обращает его в тождество. Общее решение дифференциального уравнения записывается в виде: y=y(x,c1,c2,…,cn), где c1,c2,…,cn произвольные постоянные. Решение, полученное из общего решения при фиксированных значениях, называется частным решением уравнения. Постоянные c1,c2,…,cn можно определить, задав n условий. Если эти условия заданы как совокупность значений искомой функции и всех ее производных до (n-1) порядка включительно в некоторой точке x0, то задача решения уравнения называется задачей Коши, а заданные условия: y(x0)=y0, y’(x0)=y’0, y”(x0)=y”0,…, yn-1(x0)=yn-10 называются начальными условия. Если же условия заданы при нескольких значениях x, то задача решения дифференциального уравнения будет называться граничной или краевой задачей. Рассмотрим дифференциальное уравнение первого порядка: Последнее уравнение называется дифференциальным уравнением, разрешенным относительно производной. Значение производной равно тангенсу угла наклона касательной к графику функции в точке (x,y). Функцию f(x,y) будем называть правой частью дифференциального уравнения. Общим решением уравнения будет являться семейство функций y=y(x,c1) различающихся значение постоянной c1. Задаем одно начальное условие y(x0)=y0, которое определяет значение c1и конкретное частное решение – задача Коши. Для простейшего дифференциального уравнения y’=3x2. Общее решение имеет вид y=x3+c, а подставив в общее решение начальное условие x0=1, y0=2 вычислим с=1 и определим частное решение как: y=x3+1 Метод Эйлера. Дано дифференциальное уравнение y’=f(x,y), удовлетворяющее начальному условию y(x0)=y0. Требуется найти решение на отрезке [a,b]. Разобьем (рис.2.11.1) отрезок интегрирования на n равных частей: x0=a, x1= a+h, x2=x1+h,…,xi=xi–1+h,…,xn=b, тогда величина шага интегрирования будет равна:
Рис.2.11.1. Метод Эйлера. Значение функции y1 в точке x1 можно определить как точку пересечения касательной проведенной к функции y=y(x) в точке (x0,y0) с вертикальной прямой проходящей через точку x1. Тангенс угла наклона касательной есть значение производной в точке (x0,y0) и задается правой частью дифференциального уравнения, т.е. tg(β)=f(x0,y0). С другой стороны из геометрического представления метода можно записать: Модифицированный метод Эйлера. Графическая интерпретация. Определяем (рис.2.11.2) точку
Рис.2.11.2. Модифицированный метод Эйлера.
произвольную точку определим
Система дифференциальных уравнений Обозначив Решением системы называется вектор-функция Дифференциальные уравнения n-ого порядка Приводим к системе дифференциальных уравнений Программа. Дифференциальное уравнение. Метод Эйлера. function DATA global xn n x0 y0; xn=3; n=140; x0=1; y0=-2; end
function [ dfdx ] = f(x,y) dfdx=-y/x; end
function [ y ] = Eiler(x,y,h) y=y+h*f(x,y); end
function [ x,y ] = fun_Dif_Ur_Eiler(x0,y0,xn,n) h=(xn-x0)/n; for i=1:n+1 if i==1 x(i)=x0; y(i)=y0; else x(i)=x(i-1)+h; y(i)=Eiler(x(i-1),y(i-1),h); end %if end %for i end % function
function GLAV_Dif_Ur_Eiler global xn n x0 y0 x y; DATA; [ x,y ] = fun_Dif_Ur_Eiler(x0,y0,xn,n); REPORT; end % function
function REPORT global xn n x0 y0 x y; disp('Diffferencialnoye uravneniye Euler'); disp(' '); disp('Arguments'); disp(['x0 = ' num2str(x0,'%10.5f') ]); disp(['y0 = ' num2str(y0,'%10.5f') ]); disp(['xn = ' num2str(xn,'%10.5f') ]); disp(['n = ' num2str(n,'%10.5f') ]); disp('Results'); disp(' i x fx '); disp(' ______________________________') i=0; for i=1:length(x) xx=x(i); ffx=y(i); disp(sprintf('%10.3f\t%10.3f\t %10.3f',i,xx,ffx)); end %for plot(x,y,'r.'); grid on; xlabel('x'); ylabel('y'); title('Diffferencialnoye uravneniye Euler'); end % function
Программа. Дифференциальное уравнение. Модифицированный метод Эйлера function DATA global xn n x0 y0; xn=3; n=14; x0=1; y0=-2; end
function [ dfdx ] = f(x,y) dfdx=-y/x; end
function [ y ] = Modif_Eiler(x,y,h) xnew=x+h/2; ynew=y+h*f(x,y)/2; y=y+h*f(xnew,ynew); end
function [ x,y ] = fun_Dif_Ur_Modif_Eiler(x0,y0,xn,n) h=(xn-x0)/n; for i=1:n+1 if i==1 x(i)=x0; y(i)=y0; else x(i)=x(i-1)+h; y(i)=Modif_Eiler(x(i-1),y(i-1),h); end %if end %for i end % function
function GLAV_Dif_Ur_Modif_Eiler global xn n x0 y0 x y; DATA; [ x,y ] = fun_Dif_Ur_Modif_Eiler(x0,y0,xn,n); REPORT; end % function
function REPORT global xn n x0 y0 x y; disp('Diffferencialnoye uravneniye Modif Euler'); disp(' '); disp('Arguments'); disp(['x0 = ' num2str(x0,'%10.5f') ]); disp(['y0 = ' num2str(y0,'%10.5f') ]); disp(['xn = ' num2str(xn,'%10.5f') ]); disp(['n = ' num2str(n,'%10.5f') ]); disp('Results'); disp(' i x fx '); disp(' ______________________________') i=0; for i=1:length(x) xx=x(i); ffx=y(i); disp(sprintf('%10.3f\t%10.3f\t %10.3f',i,xx,ffx)); end %for plot(x,y,'r.'); grid on; xlabel('x'); ylabel('y'); title('Diffferencialnoye uravneniye Modif Euler'); end % function
Программа. Дифференциальное уравнение. Метод усовершенствованный Эйлера. function DATA global xn n x0 y0; xn=3; n=14; x0=1; y0=-2; end
function [ dfdx ] = f(x,y) dfdx=-y/x; end
function [ y ] = Usov_Eiler(x,y,h) arg1=f(x,y); arg2=f(x+h,y+h*f(x,y)); y=y+h*(arg1+arg2)/2; end
function [ x,y ] = fun_Dif_Ur_Usov_Eiler(x0,y0,xn,n) h=(xn-x0)/n; for i=1:n+1 if i==1 x(i)=x0; y(i)=y0; else x(i)=x(i-1)+h; y(i)=Usov_Eiler(x(i-1),y(i-1),h); end %if end %for i end % function
function GLAV_Dif_Ur_Usov_Eiler global xn n x0 y0 x y; DATA; [ x,y ] = fun_Dif_Ur_Usov_Eiler(x0,y0,xn,n); REPORT; end % function
function REPORT global xn n x0 y0 x y; disp('Diffferencialnoye uravneniye Usov Euler'); disp(' '); disp('Arguments'); disp(['x0 = ' num2str(x0,'%10.5f') ]); disp(['y0 = ' num2str(y0,'%10.5f') ]); disp(['xn = ' num2str(xn,'%10.5f') ]); disp(['n = ' num2str(n,'%10.5f') ]); disp('Results'); disp(' i x fx '); disp(' ______________________________') i=0; for i=1:length(x) xx=x(i); ffx=y(i); disp(sprintf('%10.3f\t%10.3f\t %10.3f',i,xx,ffx)); end %for plot(x,y,'r.'); grid on; xlabel('x'); ylabel('y'); title('Diffferencialnoye uravneniye Usov Euler'); end % function
Программа. Дифференциальное уравнение. Метод Рунге-Кутта. function DATA global xn n x0 y0; xn=3; n=14; x0=1; y0=-2; end
function [ dfdx ] = f(x,y) dfdx=-y/x; end
function [ y ] = Dif_Ur_Runge_Kutt(x,y,h) k0=f(x,y); k1=f(x+h/2,y+h*k0/2); k2=f(x+h/2,y+h*k1/2); k3=f(x+h,y+h*k2); y=y+h*(k0+2*k1+2*k2+k3)/6; end
function [ x,y ] = fun_Dif_Ur_Runge_Kutt(x0,y0,xn,n) h=(xn-x0)/n; for i=1:n+1 if i==1 x(i)=x0; y(i)=y0; else x(i)=x(i-1)+h; y(i)=Dif_Ur_Runge_Kutt(x(i-1),y(i-1),h); end %if end %for i end % function
function GLAV_Dif_Ur_Runge_Kutt global xn n x0 y0 x y; DATA; [ x,y ] = fun_Dif_Ur_Runge_Kutt(x0,y0,xn,n); REPORT; end % function
function REPORT global xn n x0 y0 x y; disp('Diffferencialnoye uravneniye Runge Kutt'); disp(' '); disp('Arguments'); disp(['x0 = ' num2str(x0,'%10.5f') ]); disp(['y0 = ' num2str(y0,'%10.5f') ]); disp(['xn = ' num2str(xn,'%10.5f') ]); disp(['n = ' num2str(n,'%10.5f') ]); disp('Results'); disp(' i x fx '); disp(' ______________________________') i=0; for i=1:length(x) xx=x(i); ffx=y(i); disp(sprintf('%10.3f\t%10.3f\t %10.3f',i,xx,ffx)); end %for plot(x,y,'r.'); grid on; xlabel('x'); ylabel('y'); title('Diffferencialnoye uravneniye Runge Kutt'); end % function
Программа. Дифференциальное уравнение. Сравнение погрешностей методов при одинаковом числе шагов. function DATA global xn n x0 y0; xn=3; n=4; x0=1; y0=-2; end
function [ dfdx ] = f(x,y) dfdx=-y/x; end
function [ y ] = Eiler(x,y,h) y=y+h*f(x,y); end
function [ y ] = Modif_Eiler(x,y,h) xnew=x+h/2; ynew=y+h*f(x,y)/2; y=y+h*f(xnew,ynew); end
function [ y ] = Usov_Eiler(x,y,h) arg1=f(x,y); arg2=f(x+h,y+h*f(x,y)); y=y+h*(arg1+arg2)/2; end
function [ y ] = Dif_Ur_Runge_Kutt(x,y,h) k0=f(x,y); k1=f(x+h/2,y+h*k0/2); k2=f(x+h/2,y+h*k1/2); k3=f(x+h,y+h*k2); y=y+h*(k0+2*k1+2*k2+k3)/6; end
function [ x,yE, yME, yUE, yRK ] = fun_Dif_Ur(x0,y0,xn,n) h=(xn-x0)/n; for i=1:n+1 if i==1 x(i)=x0; yRK(i)=y0; yE(i)=y0; yME(i)=y0; yUE(i)=y0; else x(i)=x(i-1)+h; yRK(i)=Dif_Ur_Runge_Kutt(x(i-1),yRK(i-1),h); yE(i)=Eiler(x(i-1),yE(i-1),h); yME(i)=Modif_Eiler(x(i-1),yME(i-1),h); yUE(i)=Usov_Eiler(x(i-1),yUE(i-1),h); end %if end %for i end % function
function GLAV_Dif_Ur global xn n x0 y0 x yE yME yUE yRK; DATA; [ x,yE, yME, yUE, yRK ] = fun_Dif_Ur(x0,y0,xn,n); REPORT; end % function
function REPORT global xn n x0 y0 x yE yME yUE yRK; disp('Diffferencialnoye uravneniye '); disp(' '); disp('Arguments'); disp(['x0 = ' num2str(x0,'%10.5f') ]); disp(['y0 = ' num2str(y0,'%10.5f') ]); disp(['xn = ' num2str(xn,'%10.5f') ]); disp(['n = ' num2str(n,'%10.5f') ]); disp('Results'); disp(' i x yE yME yUE yRK '); disp(' ________________________________________________') i=0; for i=1:length(x) xx=x(i); ffxE=yE(i); ffxME=yME(i); ffxUE=yUE(i); ffxRK=yRK(i); disp(sprintf('%10.3f\t%10.3f\t %10.3f\t%10.3f\t %10.3f\t%10.3f',i,xx,ffxE,ffxME,ffxUE,ffxRK)); end %for plot(x,yE,'r+',x,yME,'b+',x,yUE,'gx',x,yRK,'k+'); grid on; xlabel('x'); ylabel('y'); title('Diffferencialnoye uravneniye yE r+,yME b+,yUE gx,yRK k+ '); end % function
Программа. Система дифференциальных уравнений. Метод Рунге-Кутта. function DATA global xn n x0 y0; xn=4; n=30; x0=1; y0=[-2;1;2;-3;3]; end
function [ dfdx ] = f(x,y) dfdx=[-y(1)/x+y(2); y(2)/x-y(3); y(3)/x; y(4)-y(1)/x; y(5)/x]; end
function [ x,y ] = fun_Dif_Ur_Runge_Kutt(x0,y0,xn,n) h=(xn-x0)/n for i=1:n+1 if i==1 x(i)=x0; y(:,i)=y0; else x(i)=x(i-1)+h; y(:,i)=Dif_Ur_Runge_Kutt(x(i-1),y(:,i-1),h); end %if end %for i end % function
function [ y ] = Dif_Ur_Runge_Kutt(x,y,h) k0=f(x,y); k1=f(x+h/2,y+h.*k0/2); k2=f(x+h/2,y+h.*k1/2); k3=f(x+h,y+h.*k2); y=y+h.*(k0+2*k1+2*k2+k3)/6; end
function GLAV_Dif_Ur_Runge_Kutt global xn n x0 y0 x y; DATA; [ x,y ] = fun_Dif_Ur_Runge_Kutt(x0,y0,xn,n); REPORT; end % function
function REPORT global xn n x0 y0 x y; disp('Diffferencialnoye uravneniye Runge Kutt'); disp(' '); disp('Arguments'); disp('______________') disp('Arguments x0 '); x0 disp('______________') disp('Arguments y0 '); y0 disp('______________') disp('Arguments xn '); xn disp('______________') disp(['n = ' num2str(n,'%10.5f') ]); disp('Results'); disp(' x 0 fx '); disp(' _____________________________________________'); i=0; lx1=length(x); z=zeros(lx1,1); x_fx=[x' z y'] for i=1:length(y(:,1)) switch i case 1 ssr='-'; case 2 ssr='-.'; case 3 ssr='--'; case 4 ssr='.'; otherwise ssr='*--'; end%switch plot(x,y(i,:),ssr); hold on end%for i grid on; xlabel('x'); ylabel('y '); title('--1 -.-.2 - - -3...4 - * -5 Diffferencialnoye uravneniye Runge Kutt'); end % function
МАТЛАБ. СБОРНИК ЗАДАЧ
|
||||||||||
|
Последнее изменение этой страницы: 2021-03-09; просмотров: 203; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.006 с.) |