Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Численное решение дифференциального уравнения первого порядка методом Эйлера

Санкт-Петербургский государственный морской технический университет

Факультет морского приборостроения

Кафедра корабельных автоматизированных комплексов и информационно-управляющих систем

 

Курсовой проект по информатике

На тему:

“Численные методы оптимизации”

 

 

Выполнил:

Студент первого курса

Грязнов Сергей Вадимович

 

Научный руководитель:

Потапов Андрей Анатольевич

 

Санкт-Петербург 2014

 

Нахождение минимума функции одной переменной методом квадратичной аппроксимации…………………………………………………………................ 3

 

Нахождение минимума функции двух переменных методом последовательного приближения……………………………………………………………………… 5

 

Нахождение минимума функции нескольких переменных методом покоординатного спуска…………………………………………………………. 8

 

Численное решение дифференциального уравнения первого порядка методом Эйлера……………………………………………………………………………. 11

 

Численное решение дифференциального уравнения второго порядка методом Эйлера……………………………………………………………………………. 13

 

Вычисление факториала методом рекурсии…………………………………... 15

 

Линейная аппроксимация таблично заданной функции одного аргумента………………………………………………………………………… 16

 

Нахождение минимума функции одной переменной методом квадратичной аппроксимации

Program А8;
var
x1,x2,x3,xshtr,xm,Fm,a1,a2: real;
function
f(x:real):real;
begin
f:=x*x;
end;
begin

Ex:=0.001;
Ef:=0.001;
dx:=1;
x1:=5;
while abs(Fm-F(xshtr))>Ef do
begin
while abs(xm-xshtr)>Ex do
begin
x2:=x1+dx;
if F(x1)>F(x2) then x3:=x1+2*dx else x3:=x1-dx;
if F(x1)<F(x2)
then if F(x1)<F(x3)
then
begin
Fm:=F(x1);
xm:=x1;
end
else
begin
Fm:=F(x3);
xm:=x3;
end
else if F(x2)<F(x3)
then
begin
Fm:=F(x2);
xm:=x2;
end
else
begin
Fm:=F(x3);
xm:=x3;
end;
a1:=(F(x2)-F(x1))/(x2-x1);
a2:=(1/(x3-x2))*((F(x3)-F(x1))/(x3-x1)-(F(x2)-F(x1))/(x2-x1));
xshtr:=(x2+x1)/2-(a1/(2*a2));
if (F(xm)<F(xshtr)) then x1:=xm else x1:=xshtr;
end;
end;
writeln('xmin=',xm);
end.

 

Нахождение минимума функции двух переменных

Методом последовательного приближения

 

 

 

 

Program А9;

Var

L,x,y,x1,y1,x0,y0,dx,dy,Ex,Ey,E,sign:real;

function f(x,y:real):real;

begin

f:=sqr(x)+sqr(y);

end;

begin

L:=1;

sign:=-1;

x0:=100;

y0:=100;

E:=0.0001;

Ex:=0.0001;

Ey:=0.0001;

while L>E DO

begin

dx:=0.1;

y:=y0;

x:=x0;

while abs(dx)>Ex DO

begin

x1:=x+dx;

if f(x1,y)<f(x,y) then

x:=x1

else

dx:=-dx/2;

end;

writeln(x,y,f(x,y));

dy:=0.1;

y:=y0;

while abs(dy)>Ey DO

begin

y1:=y+dy;

if f(x,y1)<f(x,y) then

y:=y1

else

dy:=-dy/2;

end;

writeln(x,y,f(x,y));

L:=sqrt(sqr(x1-x0)+sqr(y1-y0));

y0:=y1;

x0:=x1;

end;

writeln(x1,y1,f(x1,y1));

readln;

end.

Нахождение минимума функции нескольких переменных методом покоординатного спуска

 

 

Program A10;
type
vector=array[1..N] of real;
var
x0,x,x2:vector;
dx,S,L:real;
i,j:integer;
function
F(x:vector):real;
var
SFunct:real;
iFunct:integer;
begin
SFunct:=0;
for iFunct:=1 to N do SFunct:=SFunct+sqr(x[i]*x[i]);
F:=SFunct+1000;
end;
begin

N:=3;
e:=0.001;
ex:=0.001;
dx0:=1;

for i:=1 to N do x0[i]:=-10;
L:=10;
while abs(L)>=E do
begin
for i:= 1 to N do x[i]:=x0[i];
i:=1;
while i<=N do
begin
dx:=dx0;
while abs(dx)>=Ex do
begin
for j:= 1 to N do x2[j]:=x0[j];
x2[i]:=x0[i]+dx;
if F(x0)>F(x2)
then
begin
x0[i]:=x2[i];
end
else
begin
dx:=-dx/2;
end;
end;
i:=i+1;
end;
S:=0;
for i:=1 to N do
begin
S:=S+(x0[i]-x[i])*(x0[i]-x[i]);
end;
L:=sqrt(S);
end;
for i:=1 to N do writeln('xmin[',i,']=',x0[i],' ');
end.

 

Численное решение дифференциального уравнения первого порядка методом Эйлера

 

 

Program A11;
var
t,t0,tp,V,V0,V1,F,m:real;
begin

dtp=0.5;
dt=0.0001;
tmax=5.0;
t0:=0;
V0:=0;
F:=1;
m:=1;
tp:=0;
t:=t0;
V:=V0;
while t<tmax do
begin
V1:=F/m;
V:=V+V1*dt;
t:=t+dt;
if t>=tp then
begin
writeln('t=',t,' V=',V);
tp:=tp+dtp;
end;
end;
end.

 

 



<== предыдущая лекция | следующая лекция ==>
Неординарные услуги в отелях мира | Понятие универсальные учебных действий и их классификация в соответствии с ФГОС НОО
Поделиться с друзьями:


Дата добавления: 2017-04-15; Мы поможем в написании ваших работ!; просмотров: 825 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

2437 - | 2356 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.