home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.programming      Programming issues that transcend langua      57,431 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 56,914 of 57,431   
   Dmitry A. Kazakov to Ben Bacarisse   
   Re: Another little puzzle   
   09 Jan 23 11:22:58   
   
   From: mailbox@dmitry-kazakov.de   
      
   On 2023-01-09 04:25, Ben Bacarisse wrote:   
   > "Dmitry A. Kazakov"  writes:   
   >   
   >> On 2023-01-08 21:41, Ben Bacarisse wrote:   
   >>   
   >>> But   
   >>> the problem is /finding/ a specific average -- the point (or angle) that   
   >>> minimises the sum of squares of the distances (or angles) from that   
   >>> average point (or angle).   
   >>   
   >> That is not a programming problem. It is a problem space's one. You   
   >> must go to the corresponding part of science or engineering or   
   >> economics etc and formulate it there in terms of that space.   
   >   
   > I don't follow.  It's a mathematical problem for which an algorithm is   
   > sought.   
      
   Firstly, this is comp.programming group. Secondly, if algorithm is   
   sought then there must be a mathematical formulation of what a numeric   
   solution is sought for.   
      
   (Finding a minimum is an optimization problem, there are thousands of   
   algorithms already)   
      
   > I don't see any connection to some science or engineering   
   > space.  If it /came/ from some scientific study, it has already been   
   > turned into what the programmer needs come up with.   
   >   
   >> Average is just such formulation of finding a representative member   
   >> from some set having some specific properties. E.g. least squares in   
   >> physics usually has the meaning of least energy etc. So, it goes in   
   >> this order (not in reverse):   
   >>   
   >> 1. You need the least energy representative.   
   >> 2. An average gives you that.   
   >> 3. You measure the inputs.   
   >>   
   >> After that you ask yourself given these measures how to compute the   
   >> average? And only now it becomes a programming issue.   
   >   
   > So if I asked you for code to calculate the arithmetic mean of an array   
   > of numbers you would ask for all this first, declaring it not yet a   
   > programming issue?   
      
   Then I would ask you, if this is a solution, what was the problem?   
      
   > I really don't see where all this comes from.   
      
    From an average (:-)) customer who does not mind his business.   
   Customers have programming ideas, wrong ideas, ideas they express in   
   terms they have no idea of (:-)). It takes time and tact to bring the   
   customer back to the field of his expertise and get from him what he   
   actually needs in order to solve his actual problem.   
      
   >>> The fact that it makes no odds (as everyone knows) whether we consider   
   >>> angles (often called central angles in this context) or great circle   
   >>> distances is not the issue.  It's finding the average that minimises the   
   >>> sum of squares of differences that's the issue.   
   >>   
   >> Minimum of squares (Euclidean norm) is represented by the mathematical   
   >> mean.   
   >   
   > This problem obviously uses a different norm.   
      
   I see nothing obvious in an unstated problem.   
      
   >>> You say you need a formula, so I'll try...  Let P_n be a collection of n   
   >>> unit vectors specifying n points on a unit sphere.  Find the unit vector   
   >>> A that minimises   
   >>>     Sum_{i=1,n} ( arctan( |A x P_n|  /  A . P_n ) )^2   
   >>> (arctan is the "all quadrant" version that is often called atan2 in   
   >>> programming languages.)   
   >>   
   >> 1. atan2 has two arguments (the adjacent and the opposite legs);   
   >   
   > Obviously I can't guess how much I can safely assume so I expected there   
   > might be questions.  arctan(p / q) is usually coded as atan2(p, q).   
   >   
   >> 2. What is "A";   
   >   
   > The unit vector that is being sought -- the result of the algorithm.  It   
   > represents a point on the unit sphere that is the desired average of the   
   > input points.   
   >   
   >> 3. What operations(?) "x" and "." denote?   
   >   
   > x denotes the cross product, and . the dot product.   
   >   
   > Do you agree that this is not a trivial problem?  If not, please give   
   > the trivial algorithm!   
      
   If I correctly understood your explanation (and with a few obvious   
   corrections):   
      
       Sum atan2 (|A x Pi|, A · Pi)  --> min   
      i=1..n                       {A | A on the circle}   
      
   |A x Pi| = |A| |Pi| |sin θi|  (θi is the angle between the vectors A and Pi)   
      
   A · Pi = |A| |Pi| cos θi   
      
   atan2 (|A x Pi|, A · Pi) = atan2 (|sin θi|, cos θi) = θi'   
      
   Where θi' is θi with lower semicircle mapped to the upper one (for   
   whatever reason).   
      
   (If mapping was unintended you must have taken the direction of the   
   cross product for the sign for |A x Pi|)   
      
   On a circle varying the angle between A and (R, 0), where R is the   
   radius, you find that the mean of the angles between Pi and (R, 0)   
   yields the minimum.   
      
   > To my mind "find the point on the sphere that minimises the sum of the   
   > squares of the great-circle distances between that point and the input   
   > points" is clearer than the formula I gave because the formula says too   
   > much.   
      
   If you mean the circumference, then that is trivially proportional to   
   the angle.   
      
   --   
   Regards,   
   Dmitry A. Kazakov   
   http://www.dmitry-kazakov.de   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca