2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Проблема с нахождением min/max [mathematica]
Сообщение13.10.2014, 21:01 


24/11/13
18
Доброго времени суток, прошу помощи в следующем: возникла проблема с решением РГР, мне нужно найти значения реакций при заданном угле и максимум/минимум при изменении угла от 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 


08/03/11
186
Вы ищите максимум с начальной в нуле. FindMaximum ищет локальный максимум, смотрит на градиент в начальной точке и естественно идет в отрицательные значения. Постройте свой график для отрицательных углов, чтобы увидеть полную картину. Вам нужно либо выбрать начальную точку для FindMaximum ближе к максимому в области положительных углов либо просто $2 \pi$ прибавить.

 Профиль  
                  
 
 Re: Проблема с нахождением min/max [mathematica]
Сообщение14.10.2014, 10:36 


24/11/13
18
sithif в сообщении #918796 писал(а):
Вы ищите максимум с начальной в нуле. FindMaximum ищет локальный максимум, смотрит на градиент в начальной точке и естественно идет в отрицательные значения. Постройте свой график для отрицательных углов, чтобы увидеть полную картину. Вам нужно либо выбрать начальную точку для FindMaximum ближе к максимому в области положительных углов либо просто $2 \pi$ прибавить.

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

 Профиль  
                  
 
 Re: Проблема с нахождением min/max [mathematica]
Сообщение14.10.2014, 11:01 


08/03/11
186
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 
Заслуженный участник


27/04/09
28128
Кстати вот надо бы сделать eq1, eq2 и т. д. локальными для модуля. А выражение N[sol = e1]; e2 ничем не лучше просто sol = e1; e2.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group