2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 правильно вычислить арктангенс?
Сообщение27.08.2007, 23:05 


16/07/07
15
Уже неделю бьюсь с краевой задачкой (численное решение неверно)
Здесь звездный контур обходится с параметром theta от 2*pi до 0.
И в матрице a наблюдаются неверные значения.
Предполагаю, что арктангенс неправильно считается.
Подскажите как правильно его вычислить.

Код:
theta=2*pi-2*pi/n:-2*pi/n:0;
x=cos(theta);
y=sin(theta);

   x1(1)=0.5*(x(n)+x(1));
...
for m=2:n-1
   x1(m)=0.5*(x(m-1)+x(m));
   y1(m)=0.5*(y(m-1)+y(m));
   x2(m)=0.5*(x(m+1)+x(m));
   y2(m)=0.5*(y(m+1)+y(m));
end
   x1(n)=0.5*(x(n-1)+x(n));
  ...
for m=1:n
for k=1:n
t1=atan2((y(m)-y1(k)), (x(m)-x1(k)) );
t2=atan2((y(m)-y2(k)) , (x(m)-x2(k)) );
t12=t1-t2;
a(m,k)=C*t12;
endfor
endfor



Справка:
Код:
-- Mapping Function:  atan2 (Y, X)
     Compute atan (Y / X) for corresponding elements of Y and X.  The
     result is in range -pi to pi.


Пробовал пересчитать все углы, оставляя их в интервале от 2*pi до 0 - непомогло.

 Профиль  
                  
 
 
Сообщение28.08.2007, 05:29 
Экс-модератор
Аватара пользователя


30/11/06
1265
Рискну предположить, что речь идет о Matlab.

 Профиль  
                  
 
 
Сообщение28.08.2007, 12:14 
Экс-модератор
Аватара пользователя


23/12/05
12063
нг писал(а):
Рискну предположить, что речь идет о Matlab.


Рискну предположить, что нет - что-то я не припоминаю в его синтаксисе 'endfor'. Вообще странно - один цикл закрыт 'end', а другой 'endfor', а в остальном - да, MatLAB.

а может ну ее эту функцию atan2() и воспользоваться atan()?

 Профиль  
                  
 
 
Сообщение28.08.2007, 12:42 


16/07/07
15
Язык Octave эквивалентен MathLab. Цикл for может закрываться как end так и endfor.

atan пробовал, не помогло.

Из физических соображений угол atan(y/x) должен меняется от 0 до 2*Pi. Но схема
Код:
for m=1:n
for k=1:n
t1=atan2((y(m)-y1(k)), (x(m)-x1(k)) );
if t1<0
t1=2*pi+t1
endif
t2=atan2((y(m)-y2(k)) , (x(m)-x2(k)) );
if t2<0
t2=2*pi+t2
endif
t12=t1-t2;
A(m,k)=С*t12;
endfor
endfor

где С-const, упорно не работает.

 Профиль  
                  
 
 Re: правильно вычислить арктангенс?
Сообщение28.08.2007, 21:37 
Модератор
Аватара пользователя


11/01/06
5702
_Dmitry_ писал(а):
Здесь звездный контур обходится с параметром theta от 2*pi до 0.
И в матрице a наблюдаются неверные значения.
Предполагаю, что арктангенс неправильно считается.

Откуда такое предположение? Может быть, ошибка в дизайне самого алгоритма для решения вашей задачи?

 Профиль  
                  
 
 
Сообщение29.08.2007, 15:35 
Экс-модератор
Аватара пользователя


23/12/05
12063
_Dmitry_ писал(а):
Из физических соображений угол atan(y/x) должен меняется от 0 до 2*Pi

А из описания функции он должен меняться от $-\pi$ до $\pi$...
_Dmitry_ писал(а):
Код:
Mapping Function:  atan2 (Y, X)
     Compute atan (Y / X) for corresponding elements of Y and X.  The
     result is in range -pi to pi.

 Профиль  
                  
 
 
Сообщение01.10.2007, 10:24 


07/08/07
97
А в чем проблема конкретно? Разрыв в значениях или некорректность?

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

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



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

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


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

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