Архив разработки (10 Кб, Maple)
Содержание
- Исходные функции
- Нахождение локального минимума методом половинного деления
- Нахождение локальных максимумов и глобального максимума методом половинного деления
- Нахождение минимума функции двух переменных методом наискорейшего спуска
- Нахождение максимумов и минимумов функции одной переменной средствами Maple 7
- Нахождение минимума функции двух переменных средствами Maple 7
- Вывод
1. Исходные функции
а) Функция одной переменной:
> restart;
> f1:= 12*surd(6*(x-1)^2, 3)/((x+1)^2+8);
"График исходной функции одной переменной:";
plot(f1(x),x=-5..5);
б) Функция двух переменных:
> f:= 1.2*x1^2 + 1.8 * x2^2 - 4 * x1 - 4 * x2;
"График исходной функции двух переменных:";
plot3d( 1.2*x1^2 + 1.8 * x2^2 - 4 * x1 - 4 * x2,x1=-7..7,x2=-7..7);
2. Нахождение локального минимума методом половинного деления
> restart;
Исходные функции
f:=12*surd(6*(x-1)^2, 3)/((x+1)^2+8):
f1:=12*surd(6*(cl[i]-1)^2, 3)/((cl[i]+1)^2+8):
f2:= 12*surd(6*(cr[i]-1)^2, 3)/((cr[i]+1)^2+8):
Oтрезкu локализации
a1:=-1: b1:=2:
Точность шагов
prec:=0.001:
Задание левой и правой начальной точки, а также области
i:=1:
l[i]:=a1:
r[i]:=b1:
Area[i]:=r[i]-l[i]:
while Area[i]>2.4*prec do
cl[i]:=(l[i] + r[i])/2 - prec:
cr[i]:=(l[i] + r[i])/2 + prec:
Oпределение новых точек
l[i+1]:=`if`(f1 > f2,cl[i],l[i]):
Oпределяем новую область
r[i+1]:=`if`(f1 <= f2,cr[i],r[i]):
Oпределяем новую область
Area[i+1]:=r[i+1]-l[i+1]:
Oпределяем х как возможное решение
x:=(r[i+1]+l[i+1])/2:
rezx1:=x:
rezy1:=f:
i:=i+1;
end do:
"Первый локальный минимум, он же глобальный, поскольку единственный:";
"Абсцисса:";
rezx1;
"Ордината:";
rezy1;
3. Нахождение локальных максимумов и глобального максимума методом половинного деления
> restart;
Исходные функции
f:=12*surd(6*(x-1)^2, 3)/((x+1)^2+8):
f1:=12*surd(6*(cl[i]-1)^2, 3)/((cl[i]+1)^2+8):
f2:= 12*surd(6*(cr[i]-1)^2, 3)/((cr[i]+1)^2+8):
Oтрезкu локализации
a1:=-3: b1:=0:
a2:=1: b2:=4:
Точность шагов
prec:=0.001:
i:=1:
l[i]:=a1:
r[i]:=b1:
Area[i]:=r[i]-l[i]:
while Area[i]>2.4*prec do
cl[i]:=(l[i] + r[i])/2 - prec:
cr[i]:=(l[i] + r[i])/2 + prec:
l[i+1]:=`if`(f1 < f2,cl[i],l[i]):
r[i+1]:=`if`(f1 >= f2,cr[i],r[i]):
Area[i+1]:=r[i+1]-l[i+1]:
x:=(r[i+1]+l[i+1])/2:
rezx1:=x:
rezy1:=f:
i:=i+1;
end do:
"Первый локальный максимум:";
"Абсцисса:";
rezx1;
"Ордината:";
rezy1;
i:=1:
l[i]:=a2:
r[i]:=b2:
Area[i]:=r[i]-l[i]:
Вычисление второго максимума
while Area[i]>2.4*prec do
cl[i]:=(l[i] + r[i])/2 - prec:
cr[i]:=(l[i] + r[i])/2 + prec:
l[i+1]:=`if`(f1 < f2,cl[i],l[i]):
r[i+1]:=`if`(f1 >= f2,cr[i],r[i]):
Area[i+1]:=r[i+1]-l[i+1]:
x:=(r[i+1]+l[i+1])/2:
rezx2:=x:
rezy2:=f:
i:=i+1;
end do:
"Второй локальный максимум";
"Абсцисса:";
rezx2;
"Ордината:";
rezy2;
"Глобальный максимум";
"Абсцисса:";
xgl:=`if`(rezy1>rezy2,rezx1,rezx2):xgl;
"Ордината:";
ygl:=`if`(rezy1>rezy2,rezy1,rezy2):ygl;
4. Нахождение минимума функции двух переменных методом наискорейшего спуска
> restart;
f:= 1.2*x1^2 + 1.8 * x2^2 - 4 * x1 - 4 * x2:
Определяем производные по двум переменным
df1:=diff(f,x1);
df2:=diff(f,x2);
x1prec:=solve(df1,x1):
x2prec:=solve(df2,x2):
Начальное приближение
X1[1]:=-1:
X2[1]:=-1:
prec:=0.01:
i:=1:
x1rez:=0:
x2rez:=0:
while x1rez=0 do
x1:=X1[i]:
x2:=X2[i]:
x1rez:=`if`(df1<prec,(`if`(df1>-prec,X1[i],0)),0):
x2rez:=`if`(df2<prec,(`if`(df2>-prec,X2[i],0)),0):
X1[i+1]:=`if`(df1>0,X1[i]-prec,X1[i]+prec):
X2[i+1]:=`if`(df2>0,X2[i]-prec,X2[i]+prec):
i:=i+1:
end do:
"Точные значения:";
x1:=x1prec;
x2:=x2prec;
"Точка минимума:";
x1:=x1rez;
x2:=x2rez;
"Значение функции в минимуме:";
f;
5. Нахождение максимумов и минимумов функции одной переменной средствами Maple 7
> restart;
f1:= 12*surd(6*(x-1)^2, 3)/((x+1)^2+8):
"Минимум функции одной переменной:";
minimize(f1,x=-5..5,location);
"Первый максимум";
maximize(f1,x=-2.0..0,location);
"Второй максимум";
maximize(f1,x=1..5,location);
6. Нахождение минимума функции двух переменных средствами Maple 7
> restart;
f:= 1.2*x1^2 + 1.8 * x2^2 - 4 * x1 - 4 * x2:
"Минимум функции 2-х переменных:";
minimize(1.2*x1^2 + 1.8 * x2^2 - 4 * x1 - 4 * x2,location);
7. Вывод
|
Значения, найденные средствами Maple 7
|
Найденные методом половинного деления
|
Разница в результатах
Вычислений
|
min
|
(1 , 0)
|
(1.000093628 , 0.003746629028)
|
0.000093628 , 0.003746629028
|
1 max
|
(-2.0 , 5.039684200)
|
(-2.000093628 , 5.039684194)
|
0.000093628 , 0.000000006
|
2 max
|
|
(3.000093628 , 1.442249569)
|
0.000093628 , 0.000000001
|
Знaчения, найденные методом наискорейшего спуска
|
Значения, найденные средствами Maple 7
|
у= -5,55554
|
|
x1, x2 и y различаются на 0.003333333, 0.001111111 и 0.000015555, соответственно.
Проверка методами Maple 7 (аналитическими методами) выявила ошибки численных методов от тысячных до миллионных долей. Это свдетельствует о достаточной точности реализации методов половинного деления и наискорейшего спуска.
Наверх
|