martes, 8 de mayo de 2018

Influencia de errores. Tarea en la carrera de Matemática

Tonatiuh Suárez Meaney


El error de considerar el error antes del caos
Las matemáticas modelan el mundo pero no solamente. En realidad modelan las ideas, definen las estructuras y cuando una idea es definida matemáticamente, es posible explorarla con más libertad y certeza. Por ejemplo, los sistemas de conteo modelan muy bien el mundo a cierto nivel. Una res, dos reses… 10 reses. Pero no es lo mismo una res feliz que una no feliz, y la primera producirá más leche. El simple conteo de las matemáticas primitivas, no fue suficiente para explorar el mundo. Los árabes y los griegos, construyeron unas matemáticas muy fuertes que duraron varios milenios sin grandes cambios. Tuvieron tanto éxito que se pensó que eran infranqueables y que todo lo que se describía matemáticamente, era irremediablemente cierto. Pero fueron ocurriendo sorpresas. La última vez que se vio a las matemáticas como un monolito estable fue durante el renacimiento, con los desarrollos de Descartes y Galileo. Parecía la cumbre de las matemáticas. Las ciencias naturales comenzaron a utilizar las matemáticas como el sustento. Kepler definió las órbitas de los planetas, Newton desarrolló las teorías de cómo se comporta el universo y desarrollo las idas de cálculo al mismo tiempo que Leibinitz. Ya había algunas ideas que eran poco intuitivas como el del infinito acotado. En la física todo iba muy bien, hasta que la termodinámica mostró que las cosas no eran tan simples. Se comprendió que existía el error, que la física ya no podía ofrecer determinismo y las matemáticas también tenía desencantos. Sobre todo en el siglo XX cuando Einstein mostró con ideas matemáticas modernas que la gravedad existía por la curvatura del universo. Aquí vemos como el concepto de error ha evolucionado. Desde que se creía que no existía, hasta que no solo se aceptó, sino que se llegó a la conclusión, en la estadística, que lo único certero es que había error. He seguido la lógica  propuesta para el desarrollo de los temas tal como se muestra en la figura 1.

Figura 1





a)    Determinismo y el demonio de Laplace
Laplace imagina un mundo perfecto desde el punto de vista de la comprensión. El mundo no se puede calificar como perfecto o erróneo, pero si la percepción del mismo. En el mundo de Laplace, siempre podrá haber, por ejemplo, un basquetbolista perfecto que siempre atine, o bien, un billarista que siempre pueda atinar a todos los hoyos si tiene la suficiente información del medio y suficiente capacidad de cómputo. El problema para Laplace no es que las cosas sigan un programa sino acceder a él. El programa del mundo existe según este célebre científico, porque todas las cosas son causadas por algo y causan otras cosas, y además solo pueden causar un fenómeno. El estado actual del mundo depende de una cantidad gigantesca de funciones donde cada objeto tiene una función que lo controla. La posición de la partícula P(id,t=1,x(t=1),y(t=1),z(t=1)) del universo, se moverá según un programa a la posición P(id,t=2,x(t=2),y(t=2),z(t=2)). El conjunto Demonio  de todas las funciones que determinan las posiciones del mundo, sería capaz de describir el estado total del mundo y del universo con suficiente capacidad de cómputo. A la aceptación de que ese demonio puede existir, le llamamos determinismo. Una persona es determinística si cree en el destino.

Se trata de una idea muy física. Pero precisamente en el siglo XIX ocurrieron sismas en la ciencia, como el de la termodinámica y a comprensión de la entropía y la irreversibilidad. Es decir, del proceso natural que hace que el universo tienda al desorden y por otro lado, existen procesos que no pueden regresar a su estado original. A todos nos ha pasado, arreglamos nuestra computadora, ordenamos los archivos, no dejamos nada en el escritorio. En una semana eso es un desorden. En la naturaleza también. Eso es porque suceden cosas siempre y esas cosas en realidad, no siguen un programa tan detallado. Las cosas pueden seguir un programa pero no con un nivel de exactitud discreto. Esto se aceptó cuando de aceptó que Dios sí juega a los dados. En realidad, con lo que juega Dios es con los datos. Fisher y otros matemáticos, desarrollaron la formalización de la estadística. Otros estadísticos como Borel, permitieron establecer que establecer probabilidades no era en realidad un juego tan burdo como se había llegado a pensar. Así la estadística clásica en la que se estudia como un dado solo puede caer en uno de sus lados, avanzó a un nivel de comprensión mayor: “no tenemos todos los eventos, pero si se pudieran computar todos los eventos, con exactitud, cada estado tendría estas proporciones”. Este brinco es el que hace pasar a la estadística de un conjunto de habilidades para apostadores a una ciencia que permite predecir y conocer lo que aun no sucede. Esto es porque todo lo que puede suceder ha de suceder, en un universo utópico donde no existiera el tiempo, todo lo sucedible estaría sucediendo, por lo tanto sería en las proporciones que marca la estadística a cada evento. Esto es gracias a que no existe el demonio de Laplace.

El gran aprendizaje de todo esto es que los distintos fenómenos tienen escalas diferentes. Que las reglas del macromundo no son necesariamente las mismas del micromundo. Eso lo hizo comprender al mundo Shrödinger con su paradoja del gato.

b)   El principio de incertidumbre de Heissenberg
Este principio se basa en las teorías de la nueva física. Establece que no es posible conocer al mismo tiempo la posición y la velocidad de una partìcula. En realidad, aunque trate del micromundo, es una principio bastante intuitivo. Si bien el principio de incertidumbre de Heinssenberg es de la física cuántica también aplica en las teorías ondulatorias. Se me ha ocurrido el siguiente ejemplo. Si sacamos una fotografía de un barco en un gran oleaje, a una gran velocidad podremos tener aun en movimiento una imagen muy nítida como la

Figura 2.

La fórmula de Heissenberg nos dice

Donde  es la incertidumbre de posición y  la de momento que involucra a la de momento.  del lado derecho de la inecuación, es una constante, por lo tanto entre  sea mayor,  será menor. Y si  es cero  es infinito, y viceversa. Por eso, si el desenfoque es total en el barco, no sabremos nada de su posición absolutamente, y si el enfoque es total, no sabremos nada de la velocidad.

En el macro mundo, podemos tener dos cámaras, una a una velocidad y otra a otra y podemos conocer la posición y la velocidad. Pero en el mundo cuántico no se pueden usar dos cámaras no por la capacidad tecnológica sino por las características del micromundo.

a)    Edward N. Lorenz, atractores extraños y la teoría del Caos.
Gracias al desarrollo de la ciencia cuántica se llegó a la teoría del caos.  El caos es la dependencia sensible a las condiciones iniciales. Una forma muy simple de conocerla es como  El caos no significa desorden sino cambio sensible.

La teoría del caos, establece que un sistema está compuesto de subsistemas, dentro de los cuales, hay nuevamente subsistemas y así sucesivamente. Dentro de cada sistema los agentes se comportan de tal modo que el comportamiento de uno modifica el estado del subsistema. Esta relación se da en grados diversos. Siempre hay interacción de un integrante al menos con otro integrante.

Lorenz estipuló su efecto mariposa en un artículo llamado: Puede una mariposa en Brasil ocasionar una tormenta en Florida? Es decir, se preguntaba que pequeñas cosas podrían generar grandes eventos. No se trata de una gota que desborde el vaso, la analogía va más allá. Una lectura popular de esto es que las cosas pequeñas desencadenan cosas grandes por lo que es impredecible lo que pueda ocurrir. Sin embargo, dice casi lo contrario, lo que dice es que las posiciones iniciales son irrelevantes en el comportamiento posterior, el cual girará independientemente de la partícula alrededor de un atractor extraño, como lo muestra la gráfica 3. Cuando dos partículas son dejadas en determinado ambiente simulado, al principio tienen camions muy caóticos y luego comienzan a seguir rutas similares.  

Figura 3.




Aunque el efecto mariposa tuvo nombre por la anécdota de la mariposa, también es válido asociarlo al nombre de las gráficas de los atractores extraños que tienen forma de mariposa, es decir la gráfica de muchas partículas en sus ambientes, que reportan los mismos trayectos una vez que se han desprendido de los recorridos iniciales.


a)    El problema no. 2 de Hilbert y el teorema de incompletitud de Gödel
Mientras que la misma ciencia avanzaba poniendo las cosas en su lugar, las matemáticas hacían lo propio, más o menos en caminos paralelos. Por ejemplo, Hilbert imaginó un mundo que no era esférico ni elíptico, sino hiperbóreo. Einstein no sólo lo imaginó sino que lo modeló obteniendo como resultado respuestas a la gravitación. Por ejemplo, que la gravitación existe porque el mundo es en realidad curvo, una de las mayores sorpresas de la ciencia. Sin embargo, la suerte de Hilbert no fue tan buena en otras cosas. Por ejemplo, creía en unas matemáticas que fueran perfectamente cifrables y que nunca pudieran permitir contradicciones. Esto por el pavor que comenzó a existir entre los matemáticos cuando surgieron las paradojas, como la de Russell:

¿La clase de todas las clases que no se contienen a si mismas, se contiene a si misma?

Esta paradoja tiene muchas versiones, veamos algunas:

¿El barbero que afeita a todos los barberos que no se afeitan a ellos mismos se afeita a él mismo?

¿El político que vota por todos los políticos que no votan por ellos mismos, vota por sí mismo?
Etc.

Se dice que esa paradoja se la envió Russell en una hoja a Firedge que estaba por formalizar una teoría de conjuntos en un libro por salir. Al recibir la hoja Friedge pidió que detuvieran la prensa. Había descubierto que su teoría se derrumbaba.

La recursión como la de la paradoja ha sido el lado flaco de los grandes formalizadores. Russell soñó con unas matemáticas completamente rigurosas a pruebas de paradojas. Comenzó el camino junto con Wittgenstain quien desde la filosofía decía primero que era imposible comunicarnos pues mientras que unos entendían una cosa cuando se referían a un objeto, otros entendían otra. Pero su pensamiento evolucionó a tal grado que se le conoce como Wittgenstein II porque dijó después que si era posible comunicarnos, siempre y cuando tuviéramos un sistema perfecto capaz de definir cualquier proposición. A eso dedicó muchos años de su vida. La paradoja la “resolvió” modificando la teoría, estableciendo el concepto de “capas” y declarando que no puede haber conjuntos que no se contengan a si mismos. Sin embargo, esto no fue satisfactorio para los matemáticos, pues no se comprendía el problema, sino simplemente se modificaban las definiciones para que con ellas no existiera el problema.

De cualquier forma Hilbert permanecía optimista. En una conferencia listo los 20 problemas que en el siglo XX serían los más importantes de las matemáticas y estaba seguro de que encontrarían solución. El problema 2 era una afronta directa a las ideas de Gôdel pues se refiere a si es posible demostrar que dos proposiciones en un sistema no se pueden contradecir.

El teorema de Gödel tiene mucho que ver con la máquina de Turing y también con la recursión. De hecho, junto con el problema de Hilbert, son interpretaciones del mismo problema. Ya se ha visto en el curso anteriormente la máquina de Turing. A final de cuentas, lo que importa es si existe un algoritmo universal para resolver cualquier problema. Turing resuelve que no. El teorema de Godel nos dice que en un sistema habrá proposiciones contradictorias.

Lo que hizo Gödel es mucho más generalizado a las estructuras. Lo que dice es, imaginemos una aritmética con un número finito de operaciones y de signos para representar todos sus números. Por ejemplo la siguiente tira:

0
1
2
3
4
5
6
7
8
9
+
-
/
*
=
< 
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
G

Ahora, podemos numerar cualquier aseveración con un número Hexagesimarl.
Por ejemplo 1<8 es la proposición numero 2G8 que es cierta, pero también se pueden numerar las faltas, por ejemplo 3<1 es la número 4G0. 1+1=2, es 2B2. No hay ninguna proposición que no se pueda numerar con una proposición.
También se deberá desprender de alguna proposición alguna otra, por ejemplo si 3>1, también será cierto que 9>1, es decir 4G0->AG1.

Godel fue capaz de demostrar que ciertas proposiciones, inlcuirian su negación recursiva por lo que no es posible un sistema autoconsistente y siempre va a faltarle una parte.

Las consecuencias del teorema son muchas. Por un lado nos lelvand a pensar que las máquinas no pueden pensar, pues siempre hay en los procedimientos automatizados una incompletitud que tiene que ser cubierta del exterior.

En resumen el concepto de error ha cambiado, pero no tanto para pensar, que las máquinas realizaran el pensamiento por los humanos.

Referencias
Piñeiro Gustavo Ernesto (2012) Los teoremas de incompletitud Dodel: la intuición tiene su lógica. National Geographic.
Arean Luis Fernando (2014). ¿Existen problamas irresulubles? Matemáticas, complejidad y computación. El mundo es matemático. National Geographic.

Videos

El demonio de Laplace. http://webcache.googleusercontent.com/search?q=cache:http://seneca.fis.ucm.es/parr/QM/km0qm/laplace.htm


https://www.youtube.com/watch?v=STIzCV1aRyg


miércoles, 13 de septiembre de 2017

Poner comas luego de los números para preparar una geocodificacion en Google

A veces necesitamos tener la información de una dirección en formato "Google" para que pueda ser geocodificada.
Google entiende la información de direcciones muy bien cuando tiene este formato:

calle numero, colonia, municipio, estado, país

Por ejemplo

Hidalgo 28, Centro, Cuauhtemoc, CDMX, México

Pero a veces puede estar de la siguiente forma, o muchas otras:

Hidalgo 28 Centro, Cuauhtemoc, CDMX, México
Hidalgo Num 28 Centro, Cuauhtemoc, CDMX, México

Etc.

Esto requiere un proceso de limpieza.

El siguiente código permite que estando la información en Excel, insertemos la necesaria coma, es decir:
CIRCUITO LAS MISIONES 219

Pase a

CIRCUITO LAS MISIONES 219, 


El código es este

Sub InsertarComasLuegoDeNumero()
'
    Palabra = ActiveCell.Value
    largo = Len(Palabra)
    
    PrimerNumero = "NO"
    NuevaPalabra = ""
    
    Numeros = 0
    For n = 1 To largo
     letra = Mid$(Palabra, n, 1)
           If letra = "0" Or letra = "1" Or letra = "2" Or letra = "3" Or letra = "4" Or letra = "5" Or letra = "6" Or letra = "7" Or letra = "8" Or letra = "9" Then
            Numeros = Numeros + 1
             If Numeros = 1 Then
              NuevaPalabra = NuevaPalabra + ", "
             End If
           End If
         NuevaPalabra = NuevaPalabra + letra
    Next
    
    ActiveCell.Value = NuevaPalabra
        
    ActiveCell.Offset(1, 0).Range("A1").Select
    
End Sub



Evidentemente si lo quisieramos hacer para un solo renglón no tendría ningun caso, pero supongamos que lo queremos hacer para muchos renglones, digamos 100, solo encerramos el codigo en un for-next, como sigue:



Sub InsertarComasLuegoDeNumero()
'
for m=1 to 100

    Palabra = ActiveCell.Value
    largo = Len(Palabra)
    
    PrimerNumero = "NO"
    NuevaPalabra = ""
    
    Numeros = 0
    For n = 1 To largo
     letra = Mid$(Palabra, n, 1)
           If letra = "0" Or letra = "1" Or letra = "2" Or letra = "3" Or letra = "4" Or letra = "5" Or letra = "6" Or letra = "7" Or letra = "8" Or letra = "9" Then
            Numeros = Numeros + 1
             If Numeros = 1 Then
              NuevaPalabra = NuevaPalabra + ", "
             End If
           End If
         NuevaPalabra = NuevaPalabra + letra
    Next
    
    ActiveCell.Value = NuevaPalabra
        
    ActiveCell.Offset(1, 0).Range("A1").Select

next
    
End Sub

viernes, 28 de febrero de 2014

Cuadrículas para estimación fractal

Puede ser importante obtener la dimensión fractal de un objeto geográfico. Por ejemplo, la dimensión fractal de un contorno urbano se relaciona con la dispersión urbana, y la dispersión a su vez se relaciona con el precio de suelo, la corrupción del gobierno local, el tiempo promedio de desplazamiento en la ciudad, etc.

No abundaremos en lo que es un fractal, pero recordemos que uno de los métodos para estimar la dimensión fractal es el de conteo de cajas. Esto es, para un objeto dado, trazamos distintas rejillas de distintas dimensiones. Con cajas grandes el objeto quedará incluido con pocas cajas y con cajas pequeñas con muchas. La ilustración resume el asunto:


En términos generales, la dimensión fractal será la pendiente de la recta que resulte de relacional el logaritmo del tamaño del lado de cada grid con el logaritmo del número de cuadros que ocupa el grid.

Aquí lo que es importante es como generar dichos grids. Para una tabla en MapInfo de poligonos que pueden ser ciduades o otra característica, se tiene el siguiente programa, donde CiudadesMasDe100MilHabs es una capa que contiene contornos de ciduades y MapaDeCuadrados un layer vacio donde se depositarán los grids. Nivel es el número de cuadrados de los grids. Este se puede ir cambiando o bien automatizar dicho cambio.


Dim MaximaCaja As Object
Dim X1,X2,Y1,Y2,LadoMaximo As Float
Dim CuadradoDibujado As OBject
Dim LadoMayor As Float
Dim Columna, Renglon As Integer
Dim Q As Integer
Dim Lag As Float
Dim Nivel As Integer

Select Obj From CiudadesMasDe100MilHabs Where RowId=1

For Q=1 to 79
Select Obj From CiudadesMasDe100MilHabs Where RowId=Q
Nivel=4

MaximaCaja=MBR(Selection.Obj)
X1=ObjectGeography(MaximaCaja,1)
Y1=ObjectGeography(MaximaCaja,2)
X2=ObjectGeography(MaximaCaja,3)
Y2=ObjectGeography(MaximaCaja,4)

LadoMayor=Maximum(Abs(X2-X1),Abs(Y2-Y1))
Lag=LadoMayor/Nivel
X2=X1+Lag
Y2=Y1+lag

For Columna=0 To Nivel
For Renglon=0 To Nivel

Create Region Into Variable CuadradoDibujado 0
Alter Object CuadradoDibujado Node Add ((X1+Renglon*Lag),(Y1+Columna*Lag))
Alter Object CuadradoDibujado Node Add ((X1+Renglon*Lag),(Y2+Columna*Lag))
Alter Object CuadradoDibujado Node Add ((X2+Renglon*Lag),(Y2+Columna*Lag))
Alter Object CuadradoDibujado Node Add ((X2+Renglon*Lag),(Y1+Columna*Lag))

Insert Into MapaDeCuadros (Obj) Values (CuadradoDibujado)

Next
Next
Next

miércoles, 6 de noviembre de 2013

Macro para rellenar espacios vacíos

En muchos programas no es lo mismo un espacio vacío que un cero. Por ejemplo en JMP pueden ocurrir algunos problemas de cálculo si en vez de cero hay vacíos. Abajo se muestra un ejemplo de una encuesta que ha sido capturada con espacios en vez de ceros.


La sencilla macro que desarrollaremos aquí es para limpiar esos espacios y colocarles un cero.
Supongamos como haríamos nosotros el trabajo y luego encarguémoslo al robot.
Lo que haríamos sería ir desde la primer columna que carece de ceros una por una de las casillas hacia abajo llenando las vacias con cero. O sea, esto

Do While AComparar <> "FIN"


    ActiveCell.Offset(1, 0).Range("A1").Select
    AComparar = ActiveCell.Value
   
    If AComparar = "" Then
       
        ActiveCell.Value = 0
   
    End If
   

Loop

Al final de la columna podemos acotarla con un "FIN", así:
De esta forma cuando el cursor llegue a esa celda le podremos decir que detenga o cambie el proceso.
Si corremos el código anterior veremos que el cursor se detiene al llegar a "FIN". Pero falta decirle que suba. Esto es así:

  Selection.End(xlUp).Select
   ActiveCell.Offset(0, 1).Range("A1").Select

El cursor sube todo hacia arriba por celdas no vacias, pero como ya las rellenamos todas llegará al tope, y luego se hace una celda a la derecha. 

Ahora, solo falta que al llegar de nuevo arriba, repita la operación, lo cual se logra insertando un FOR NEXT con el número de columnas que queremos procesar, por ejemplo 5. Pero hay que decirle al robot que hemos cambiado el valor de la celda activa. El programa queda así:


Sub SustituyeNadaPorCero()
'
' SustituyeNadaPorCero Macro
'
For N = 1 To 5

'
Do While AComparar <> "FIN"


    ActiveCell.Offset(1, 0).Range("A1").Select
    AComparar = ActiveCell.Value
    
    If AComparar = "" Then
        
        ActiveCell.Value = 0
    
    End If
    

Loop

  AComparar = "Algo"
  Selection.End(xlUp).Select
  ActiveCell.Offset(0, 1).Range("A1").Select
    
Next

End Sub


Y el resultado, el siguiente:


Ya no contiene vacíos.


jueves, 17 de octubre de 2013

Programa MapBasic para estimacion de distancias promedio

Antes que hablar de distancia media, cabe mencionar que la media es un promedio, lo mismo que la mediana y la moda. Un promedio es un estadígrafo que me da una aproximación de una sola variable al conjunto. Así, promedio no es sinónimo de media. La distancia promedio es un indicador de concentración.

La distancia media se define como el promedio de todos los promedios de distancias de cada punto contra los otros. En términos numéricos:


Si P es un conjunto de puntos p1,p2…pn, tales que existen en un plano de tal modo que hay una xi y una yi tales que son coordenadas de pi, entonces la distancia promedio de pi a P será para un j



Y la distancia promedio total será





La distancia promedio nos dará una idea, en un espacio isomorfo de que puntos tienen la cercanía óptima en el conjunto. Tiene diversas aplicaciones. Por ejemplo, si los puntos son escuelas, y se desea que una de las escuelas sea un centro de zona, la que tenga menor distancia promedio será aquella en la que la suma de los viajes es menor.



En el cálculo de la distancia promedio hay dos opciones, contar o no la distancia de cada punto contra si mismo. Normalmente no se cuenta.
El algoritmo para programación geográfica en MapBasic es el que sigue. Algoritmos muy similares pueden escribirse en Avenue, Autolisp u otros lenguajes de objetos geográficos. Para correrlo debe haber una tabla de puntos en MapInfo que contengan una columna llamada DistanciaPromAlRest donde se almacenarán los datos de distancia promedio.
Dim Fin, NumeroDePuntos, M As Integer
Dim X,Y,SUMA,Distancia,DistanciaPromedio As Float
Dim PuntoAEvaluar As Object                        ‘es posible definir variables
                                               ‘objeto, las comillas son remakes
                                               ‘que permiten ignorar el comentario
                                               ‘siguiente como en este caso

Fin=TableInfo(Puntos,8)’ la variable fin es el número de renglones en la tabla
Select * From Puntos Where RowId=1                 ‘selecciona el primer registro de
                                               ‘ la tabla


For NumeroDePuntos =1 To FIN                       ‘se inicia un ciclo para recorrer
                                                    ‘todos los objetos de la tabla, son
                                                    ‘puntos sobre los cuales se medirá
                                                    ‘ la distancia al resto

Select Obj From Puntos Where RowId=NumeroDePuntos ‘selecciona el renglón que va en el ciclo

PuntoAEvaluar= Selection.Obj ‘se define un objeto a examinar

   X=ObjectGeography(PuntoAEvaluar,1)          ‘se extraen las coordenadas del
                                                    ‘punto
   y=ObjectGeography(PuntoAEvaluar,2)

   Suma=0                                      ‘Se inicia acumulador donde se
                                               ‘añade distancia total

   For M=1 To FIN
       Select * From Puntos Where RowId=M          ‘Se inicia ciclo para medir la
                                               ‘distancia al segundo punto

       Distancia=Distance(X,Y,CentroidX(Selection.Obj),CentroidY(Selection.Obj),"cm")
                                               ‘se estima la distancia

       Suma=Suma+Distancia                     ‘se suma la distancia
   Next

DistanciaPromedio=Suma/FIN                     ‘se promedia

Update Puntos
   Set DistanciaPromAlResto = DistanciaPromedio    ‘se almacena
   Where Rowid = NumeroDePuntos


Next


Si interpolamos el resultado sale algo como lo siguiente:


Programa en MapBasic para convertir distancia euclidiana a distancia Manhattan

En muchas ocasiones en problemas de cartografía numérica, tenemos un archivo con líneas. Pueden referirse por ejemplo a líneas de deseo de una encuesta origen destino. La apariencia es esta:


Es muy probable que estemos interesados no en conocer la distancia euclidiana o la loxodrómica sino la distancia Manhattan. A veces por la contabilidad cartográfica no es posible conocer el trayecto exacto de un objeto, pero si puntos origen destino. Entonces la distancia entre estos puntos es una aproximación al recorrido real. En la figura de abajo se muestra como representamos normalmente el recorrido entre dos puntos. 


Sin embargo el recorrido real puede ser como el que se muestra abajo. Cabe mencionar que entre más cercanos sean los puntos se tenderá a mayor tensión de línea, es decir, a tener una línea más  cercana a la recta euclidiana.


Una aproximación que no refleja el recorrido exacto pero tampoco es tan generalizado como el euclidiano, es la distancia Manhattan, que por definición es la distancia resultante entre dos puntos de sumar los lados que resultan del tríángulo que tiene esa distancia por hipotenusa en un ángulo recto con lados paralelos a los ejes cartesianos.



Además esta distancia tiene la propiedad de que será igual en cualquier trayecto a base de ángulos rectos que se haga. Tal como se muestra en la figura de abajo. Será lo mismo caminar del punto superior al inferior con cualquier combinación, siempre y cuando el trayecto forme ángulos rectos.


Bien, ahora, como se cálcula la distancia?. Simplemente hay que extraer el objeto, estimar las coordenadas del punto origen (X1,Y1) y las del punto destino (X2,Y2) , y estimar las ditancias de los lados.

Si tenemos un archivo en MapInfo de rectas, llamado "Lineas" con una columna llamada Manhhatan, solamente vamos extrayendo cada recta. Y obtenemos la distancia del punto X1,Y1 al punto X2,Y1 que es el lado paralelo a las X, y luego, de X1,Y1 a X1,Y2. Y se suman.

He aquí el programa para correr en MapBasic:

Dim Fin,N As Integer
Dim X1,X2,Y1,Y2,DistH,DistV,Hipo,Manhatan As Float
Dim Tp As String
Dim MyLine As Object
Dim Tabla As String
Tabla="Lineas"
Fin=TableInfo(Tabla,8)

For N=1 To Fin
Select Obj From Tabla Where RowId=N Into Provi
MyLine=Provi.Obj

X1=ObjectGeography(MyLine,1)
X2=ObjectGeography(MyLine,3)
Y1=ObjectGeography(MyLine,2)
Y2=ObjectGeography(MyLine,4)

DistH=Distance(X1,Y1,X2,Y1,"km")
DistV=Distance(X1,Y1,X1,Y2,"km")
Hipo=Sqr(DistH*DistH+DistV*DistV)
Manhatan=DistH+DistV
Print N
Print Manhatan

UpDate Tabla
Set DistanciaManhattan=Manhatan
Where RowId=N


Next