Автор работы: Пользователь скрыл имя, 07 Ноября 2017 в 20:01, курсовая работа
В результате выполнения данной курсовой работы были решены два задания.
В первом задании была составлена программа Matlab для решения системы ОДУ методом Рунге-Кутты 4-5 порядка и данная задача была решена стандартным решателем Matlab функцией ode45.
Было проведено сравнение полученных результатов . Погрешности от сравнения занесены в таблицу погрешностей и был создан видеофайл формата AVI с помощью функции VideoWritter, в котором показано движение точки в декартовой системе координат.
Введение…………………………………………………………………………5
1 Численное решение системы дифференциальных уравнений……………..6
2 Условная минимизация функций нескольких переменных……………….15
Заключение……………………………………………………………………..17
Список использованных источников…………………
Текст программы приведен в Приложении А.2.
Результат выполнения программы представлен на рисунке 6.
Рисунок 6 – Результат выполнения программы
Ввод исходных данных организован с помощью файла z2.xls (рис. 7).
Рисунок 7 – Задание исходных данных в файле z2.xls
Вывод данных организован в файл z2.xls (рис. 8).
Рисунок 8 – Вывод данных в файл z2.xls
Заключение
В результате выполнения курсовой работы решена задача интегрирования системы ОДУ методом Рунге-Кутты, осуществлена условная минимизация функции нескольких переменных заданным методом. Все задачи решены с использованием программы Matlab с представлением необходимой графической и табличной информации.
Список использованных источников
1. Дьяконов В., Круглов
В. Математические пакеты
2. Кетков Ю.Л., Кетков А.Ю., Шульц М.М. MATLAB 7: программирование, численные методы - Спб.: БХВ-Петербург, 2005, 752 с.
3. Банди Б. Методы оптимизации. М. Радио и связь. 1988.
4. Формалев В.Ф., Ревизников Д.Л. Численные методы. – М.: ФИЗМАТЛИТ, 2004, 400 с.
5. Пантелеев А.В., Летова Т.А. Методы оптимизации в примерах и задачах. – М.: Высшая школа, 2005, 544 с.
Приложение А.1
Текст программы решения задачи Коши для системы ОДУ
function var24
clear all;
global T;
T = 5; % время решения задачи
Y0(1) = 0.1; % начальное значение x
Y0(2) = 0.0; % начальное значение y
Y0(3) = 0.1; % начальное значение z
h0 = 0.1; % начальный шаг интегрирования
%-----------------------------
tspan = [0 T];
options = odeset('Events',@evar,'
%стандартная функция
Matlab------------------------
[t,Y,te,ye,ie] = ode45(@dvar,tspan,Y0,options);
odeplot([],[],'done'),grid;
figure(1);
plot(t,Y(:,1)), grid on; hold on;
xlabel('Время');
ylabel('переменная x');
figure(2);
plot(t,Y(:,2)), grid on; hold on;
xlabel('Время');
ylabel('переменная y');
figure(3);
plot(t,Y(:,3)), grid on; hold on;
xlabel('Время');
ylabel('переменная z');
figure(4);
plot3(Y(:,1),Y(:,2),Y(:,3)), grid on; hold on;
% собственная функция
с апостериорным выбором шага--
[t3,Y3,te3,ye3] = RK1(@dvar,tspan,h0,Y0,0.001);
figure(1);
plot(t3,Y3(:,1),'--r'), grid on;
xlabel('Время');
ylabel('переменная x');
legend('Стандартный решатель','Разработанный решатель');
hold off;
figure(2);
plot(t3,Y3(:,2),'--r'), grid on;
xlabel('Время');
ylabel('переменная y');
legend('Стандартный решатель','Разработанный решатель');
hold off;
figure(3);
plot(t3,Y3(:,3),'--r'), grid on;
xlabel('Время');
ylabel('переменная z');
legend('Стандартный решатель','Разработанный решатель');
hold off;
figure(4);
plot3(Y3(:,1),Y3(:,2),Y3(:,3),
legend('Стандартный решатель','Разработанный решатель');
hold off;
%-----------------------------
fprintf('t=%14.7f Y(1)=%14.7f Y(2)=%14.7f
Y(3)=%14.7f\n',T/2,interp1(t,
interp1(t,Y(:,2),T/2,'linear')
fprintf('t3=%14.7f Y3(1)=%14.7f Y3(2)=%14.7f
Y3(3)=%14.7f\n',T/2,interp1(
interp1(t3,Y3(:,2),T/2,'
%создание видеофайла--------------------
videoobj = VideoWriter('var24','MPEG-4');
open(videoobj);
fig = figure(5);
axis([min(Y(:,1)) max(Y(:,1)) min(Y(:,2)) max(Y(:,2)) min(Y(:,3)) max(Y(:,3))]);
axis manual;
hold on;
for k=1:1:length(t)
plot3(Y(k,1),Y(k,2),Y(k,3),'o'
if k ~= 1
line([Y(k,1),
Y(k-1,1)],[Y(k,2),Y(k-1,2)],[
end
F = getframe(fig);
writeVideo(videoobj,F);
end
close(fig);
close(videoobj);
%-----------------------------
function [value,isterminal,direction] = evar(t,Y)
global T;
value = T - t;
isterminal = 1;
direction = -1;
function F = dvar(t,Y)
F = zeros(3,1);
F(1) =Y(1)+sqrt(abs(Y(2)))-Y(3).^2;
F(2) =sqrt(abs(tan(Y(1)+Y(2))))+4*
F(3) = Y(1)*Y(3)-2*Y(2);
function [ye] = RK(f, h, x_c, y_c)
k1 = h.*f(x_c,y_c);
k2 = h.*f(x_c + h/2, y_c + k1./2);
k3 = h.*f(x_c + h/2, y_c + k2./2);
k4 = h.*f(x_c + h, y_c + k3);
ye = y_c + (k1 + 2.*k2 + 2.*k3 + k4)./6;
function [t,y,te,ye] = RK1(f,x,h0,y0,e)
h = h0;
t(1) = x(1);
y(1,:) = y0;
k = 1;
flag = 0;
x_cur = x(1);
y_cur = y0';
while x_cur < max(x)
if flag > 1
break;
end
[ye1] = RK(f, h, x_cur, y_cur);
[ye2] = RK(f, h/2, x_cur, y_cur);
[ye3] = RK(f, h/2, x_cur + h/2, ye2);
if max(abs(ye1 - ye3)) > e
h = h/2;
continue;
end
[ye11] = RK(f, h, x_cur + h, ye1);
[ye4] = RK(f, 2*h, x_cur, y_cur);
if max(abs(ye11 - ye4)) < e
h = h*2;
continue;
end
if (x_cur + h) > max(x)
h = abs(max(x) - x_cur);
end
x_cur = x_cur + h;
y_cur = ye1;
y(k+1,:) = y_cur;
t(k+1) = x_cur;
if x_cur >= max(x)
flag = flag + 1;
end
k = k + 1;
end
t = t';
te = x_cur;
ye = y_cur';
Приложение А.2
Текст программы условной минимизации функции нескольких переменных
function z2
% Метод штрафов
clear all;
global r;
% исходные данные
x(1,:) = xlsread('z2.xls',1,'A2:A3');
r = xlsread('z2.xls',1,'B2');
C = xlsread('z2.xls',1,'C2');
e = xlsread('z2.xls',1,'D2');
%-----------------------------
% минимизация стандартной функцией
options = optimoptions(@fmincon,'
[X,Fval] = fmincon(@myfun,x(1,:),[],[],[]
xlswrite('z2.xls',Fval,2,'C2')
xlswrite('z2.xls',X',2,'C3');
%-----------------------------
k = 1; % Счетчик шагов
kmax = 1000; % Предельное число шагов
while k < kmax
[x1(k,:),fval1(k)] = fminsearch(@mysupp,x(k,:)); % нахождение безусловного минимума вспомогательной функции
PP(k) = myfine(x1(k,:)); % расчет значения функции штрафа при оптимальных х на текущей итерации
if PP(k) <= e
X1 = x1(k,:),
F1 = myfun(X1),
break % Выход из цикла в случае выполнения условия
else
k = k + 1;
r = C*r;
x(k,:) = x1(k-1,:);
end
end
xlswrite('z2.xls',F1,2,'B2');
xlswrite('z2.xls',X1',2,'B3');
function f = myfun(x)
% целевая функция
% x - аргументы целевой функции
f = 4/x(1)+9/x(2)+x(1)+x(2);
function [c,ceq] = mycon(x)
% расчет ограничений
% х - аргументы целевой функции
% ограничения типа "равенство"
ceq = [];
%-----------------------------
% ограничения типа "неравенство"
c(1) = x(1)+x(2)-6;
c(2) = -x(1)
c(2) = -x(2);
function F = mysupp(x)
% вспомогательная функция
% х - аргументы целевой функции
% r - значение параметра штрафа на текущей итерации
global r;
f = myfun(x);
P = myfine(x);
F = f + r/2*P;
function P = myfine(x)
% штрафная функция
% х - аргументы целевой функции
[c,ceq] = mycon(x);
P = sum(ceq.^2)+sum(max(0,c).^2);
Информация о работе Решение инженерных задач методами вычислительной математики