Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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). С другой стороны из геометрического представления метода можно записать: Следовательно Откуда тогда и так далее. Решение будет заключаться в последовательном применении формул: где i = 1, 2, 3, …, n Результат будет представлен функцией заданной таблицей. Модифицированный метод Эйлера. Графическая интерпретация. Определяем (рис.2.11.2) точку и вычисляем значение функции в этой точке Значение функции y1 в точке x1 определяем, как точку пересечения касательной, вычисленной в точке (x1/2,y1/2) и проведенной к функции y=y(x) в точке (x0,y0), с вертикальной прямой проходящей через точку x1. Рис.2.11.2. Модифицированный метод Эйлера. произвольную точку определим Система дифференциальных уравнений где x — независимая переменная, а y 1(x), y 2(x),..., yn (x) — неизвестные функции, n — порядок системы. Обозначив или Решением системы называется вектор-функция , которая определена и непрерывно дифференцируема на интервале (a, b) и удовлетворяет системе, т.е. для всех справедливо Дифференциальные уравнения 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; просмотров: 153; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.147.146 (0.009 с.) |