2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Проблема с нахождением min/max [mathematica]
Сообщение13.10.2014, 21:01 
Доброго времени суток, прошу помощи в следующем: возникла проблема с решением РГР, мне нужно найти значения реакций при заданном угле и максимум/минимум при изменении угла от 0 до 360, при заданном угле считает верно, график тоже верно строит, но при нахождении значения при угле от 0 до 360, получается верное значения максимума/минимума, но пишет что угол отрицательный, хотя он от 0 должен считать, а чем может быть проблема?. Надеюсь понятно написал ...
Код:
a = 4;
b = 4;
q = 3;
Q = a*q;
\[Alpha] = 30 Degree;
F = 10;
M = 25;
function[\[Alpha]_] := Module[{},
  (*Telo A-C*)
  eq1 = Nax + F*Cos[\[Alpha]] - Ncx ==0;                                               (*Summa Fx*)
  eq2 = Nay + F*Sin[\[Alpha]] - Ncy ==0;                                                (*Summa Fy*)
  eq3 = F*Cos[\[Alpha]]*b/2 + Ncx*b ==0;                                        (*Summa MomA*)
  (*Telo B-C*)
  eq4 = -Nbx + Ncx ==0;                                                                (*Summa Fx*)
  eq5 = Nby + Ncy - Q ==0;                                                                (*Summa Fy*)
  eq6 = M - Ncy*a + Q*a/2 ==0;                                                      (*Summa MomB*)
  N[sol =Solve[{eq1, eq2, eq3, eq4, eq5, eq6}, {Nax, Nay, Ncx, Ncy, Nbx, Nby}]];                              (*Nahodim neizvestnie*)
  Na = N[Sqrt[Nax^2 + Nay^2] /. sol];             (*Opredelyaem modul reakcii Na*)
  Nb = N[Sqrt[Nbx^2 + Nby^2] /. sol];             (*Opredelyaem modul reakcii Nb*)
  Return[{Na, Nb}];
  ]
function[\[Alpha]](*Reakcii Na i Nb pri zadannom ygle \[Alpha]*)
Plot[function[\[Phi] Degree][[1]], {\[Phi], 0, 360}, AxesLabel -> {"\[Alpha]", "Na"}] 
FindMaximum[function[\[Phi]  Degree][[1]], {\[Phi], 0, 360}](*Max znachenie Na pri \[Alpha] ot 0 do 360 gradusov*)
FindMinimum[function[\[Phi] Degree ][[1]], {\[Phi], 0, 360}]

 
 
 
 Re: Проблема с нахождением min/max [mathematica]
Сообщение14.10.2014, 07:27 
Вы ищите максимум с начальной в нуле. FindMaximum ищет локальный максимум, смотрит на градиент в начальной точке и естественно идет в отрицательные значения. Постройте свой график для отрицательных углов, чтобы увидеть полную картину. Вам нужно либо выбрать начальную точку для FindMaximum ближе к максимому в области положительных углов либо просто $2 \pi$ прибавить.

 
 
 
 Re: Проблема с нахождением min/max [mathematica]
Сообщение14.10.2014, 10:36 
sithif в сообщении #918796 писал(а):
Вы ищите максимум с начальной в нуле. FindMaximum ищет локальный максимум, смотрит на градиент в начальной точке и естественно идет в отрицательные значения. Постройте свой график для отрицательных углов, чтобы увидеть полную картину. Вам нужно либо выбрать начальную точку для FindMaximum ближе к максимому в области положительных углов либо просто $2 \pi$ прибавить.

Спасибо большое, попробую :)
При прибавлении 2 Пи все равно пишет отрицательный фи :(

 
 
 
 Re: Проблема с нахождением min/max [mathematica]
Сообщение14.10.2014, 11:01 
Smoker в сообщении #918811 писал(а):
При прибавлении 2 Пи все равно пишет отрицательный фи :(

Нужно было $2 \pi$ к ващему ответу отрицательному добавить, точнее 360 градусов.

(Оффтоп)

Код:
a = 4;
b = 4;
q = 3;
Q = a*q;
\[Alpha] = Pi/6;
F = 10;
M = 25;
function[\[Alpha]_] :=
Module[{},(*Telo A-C*)
  eq1 = Nax + F*Cos[\[Alpha]] - Ncx == 0;(*Summa Fx*)
  eq2 = Nay + F*Sin[\[Alpha]] - Ncy == 0;(*Summa Fy*)
  eq3 = F*Cos[\[Alpha]]*b/2 + Ncx*b == 0;(*Summa MomA*)(*Telo B-C*)
  eq4 = -Nbx + Ncx == 0;(*Summa Fx*)
  eq5 = Nby + Ncy - Q == 0;(*Summa Fy*)
  eq6 = M - Ncy*a + Q*a/2 == 0;(*Summa MomB*)
  N[sol = Solve[{eq1, eq2, eq3, eq4, eq5, eq6}, {Nax, Nay, Ncx, Ncy,
      Nbx, Nby}]];(*Nahodim neizvestnie*)
  Na = N[Sqrt[Nax^2 + Nay^2] /. sol];(*Opredelyaem modul reakcii Na*)
  Nb = N[Sqrt[Nbx^2 + Nby^2] /. sol];(*Opredelyaem modul reakcii Nb*)
  Return[{Na, Nb}];]

Off[FindMinimum::lstol] ;

X1 = {#[[1, 1, 2]], #[[2]]} & @
   Reverse[FindMinimum[function[\[Phi] ][[1]], {\[Phi], 0}]] ;
X2 = {#[[1, 1, 2]], #[[2]]} & @
   Reverse[FindMaximum[function[\[Phi] ][[1]], {\[Phi], 0}]] ;
X3 = {#[[1, 1, 2]], #[[2]]} & @
   Reverse[FindMaximum[function[\[Phi] ][[1]], {\[Phi], Pi}]];

Show[
   Plot[function[\[Phi]][[1]], {\[Phi], -2 Pi, 2 Pi},
  AxesLabel -> {"\[Alpha]", "Na"}, Frame -> True, Axes -> False,
  PlotStyle -> Black],
   Graphics[{Blue, PointSize[Large], Point[X1]}],
   Graphics[{Red, PointSize[Large], Point[X2]}],
   Graphics[{Red, PointSize[Large], Point[X3]}]
   ]€


Еще, в вашем случае функция простая и лучше использовать Maximize[], так как у FindMaximum[] могут быть проблемы с точностью.

Код:
max = Maximize[{function[s][[1,1]],0<=s<=2Pi},s]
min = Minimize[{function[s][[1,1]],0<=s<=2Pi},s]
max[[2,1,2]] / (2 Pi) 360
min[[2,1,2]] / (2 Pi) 360

 
 
 
 Re: Проблема с нахождением min/max [mathematica]
Сообщение14.10.2014, 18:15 
Кстати вот надо бы сделать eq1, eq2 и т. д. локальными для модуля. А выражение N[sol = e1]; e2 ничем не лучше просто sol = e1; e2.

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group