Swedish flagChinese (Simplified) flagEnglish flagGerman flagFrench flagSpanish flagHindi flag
Julio
27
2010
2

Encontrar un polígono que encierra óptima los complejos problemas al azar - sobre convexa

Introducción

Este verano estoy trabajando en un departamento de tecnología en Västerås. He trabajado en la misma empresa y en aproximadamente el mismo cargo durante tres veranos seguidos. El trabajo es muy técnico, divertido y desafiante. A diferencia de otros muchos puestos de trabajo de verano en una oficina, me encontré con una que tengo la responsabilidad y la oportunidad de trabajar con las tareas comunes. Específicamente con los que trabajo a desarrollar herramientas para simplificar el trabajo de cálculo utilizando la mayoría de Matlab, la programación GUI y Java. El nuevo estilo orientado a objetos de MATLAB hace que el código mucho más claro que hace unos años.

El problema

El otro día me enfrenté a un pequeño reto. Simplificado se centró en la búsqueda de un polígono que encierra un conjunto de puntos complejos que se encuentran dispersos en el plano. En un primer momento no he encontrado la función que hace esto en Matlab, que por supuesto era extraño. Por lo tanto, decidió buscar un algoritmo personalizado. En este post voy a describir mi algoritmo.

Konvext hölje

Figura 1. Ejemplos de caso convexo.

Mi Alogritm

Voy a describir mi algoritmo usando la Figura 2. Para empezar, voy a explicar la dificultad de encontrar vivienda. La cosa es que todos los puntos sin clasificar en una estructura. Si los puntos se ordenan en torno a un punto central, se puede utilizar el orden y la distancia desde el centro para resolver el problema. Se necesitan al menos O (n log (n)) para hacer una relación lineal ordenados. Mi algoritmo funciona en la lista de seleccionados y probablemente incluso más tiempo, no han obtenido ninguna prueba.

La idea es al menos para empezar con mi punto de vista en la dirección x y luego encontrar el punto en que el valor de k se convierte en el máximo. es decir, calcular:

max (K_i) = (y_min - y_i) / (x_min - x_i) para i = [todos los temas] Esto le da el punto de p_2..

Todos los puntos de menor valor y que X_min puede ser excluido. Todos los puntos con un valor de x menor que p_2 también podría ser descartado para la lectura adicional.

k_2 encuentra, encontrando el punto que minimiza:

k_1 - (y_1 - y_i) / (x_1 - x_i) para i = [todos los elementos no excluidos]

De la misma manera encontró k_a en general por:

min (k_a-1 - (y_a-1 - y_i) / (x_a-1 - x_i)) para i = [todos los elementos no excluidos]

El cálculo se hace por la parte superior del polígono hasta llegar al punto, que es máxima en la dirección x. Después de eso, el mismo algoritmo para la mitad inferior del polígono.

Algoritm för konvext hölje

Figura 2. Algoritmo para el caso convexo.

Rendimiento

El desempeño del algoritmo depende de la cantidad de puntos que terminan en polygonet. Yo linjärsök como muchos de la lista a medida que se señala en polygonet. Esto significa que la complejidad es O (N * el número de búsquedas). El número de puntos en el polygonet óptima es entre 10 y 25 dependiendo de los puntos de su oportunidad. El algoritmo es relativamente rápido.

Código

El código no es público.

Solución Matlab - convexo

Mi algoritmo hace lo mismo que la función de Matlab convhull . Convexo es así, la palabra Inglés para un polígono cerrado o un cuerpo convexo. Otro buen recurso es http://en.wikipedia.org/wiki/Convex_hull_algorithms explicando que el tiempo mínimo teórico para encontrar una concha convexa es del orden O (n log (n)).

Julio
14
2009
2

Matlab Image Resizer

He escrito un pequeño programa para matlab, la reducción de las imágenes. Esto es así porque no he encontrado que presentan de manera sencilla en alguna parte. Debe ser un buen montón de fotos en Sydney / Australia de cambio durante el año debe ser cargado. Tenemos limitaciones en nuestro acceso en el que vivimos por lo que no puede tener imágenes de 5 Mb cada uno. Después de que había terminado con el programa en un formato que ahora, vi que no tenga problemas para editar las imágenes a la vez con un programa de Office. De todos modos, el programa funciona bien.

Propósito

El programa tenía como objetivo reducir simplemente todas las imágenes en una carpeta.

¿Por qué?

Puesto que es difícil de editar y reducir el tamaño de cada imagen por separado, cuando muchos cuadros debe ser fijo.

Lo que se requiere para ejecutar el programa?

Se requiere que usted tiene una licencia para matlab tiempo de ejecución. ¿Es usted un estudiante que no habrá ningún problema, si no es por desgracia, probablemente no sea libre.

Uso

WYSIWYG.

Responsabilidad

No tomo ninguna responsabilidad por cualquier cosa que funcione.


Descargar ImageResizer

Junio
28
2009
2

Matlab Gui con guihandles

He trabajado con un programa de ordenador en Matlab. La idea detrás de esto es que debe ser fácil de usar y eficiente de hacer cálculos comunes para ciertos tipos de instalaciones. En este programa que he usado un montón de uipanel componentes gráficos, uitree y uicontrol.

Muchos autores de los tutoriales de Matlab GUI recomienda utilizar la función incorporada (o tal vez debería llamarlo una caja de herramientas (?)) Llamado de Matlab Guide. Tipo:

>> Guía

En la ventana de comandos y se abre una ventana donde se puede colocar y configurar los componentes de una figura. Esto tiene ventajas de las simples aplicaciones rápidamente. Sin embargo, el gran problema si desea escribir software legítimo. Esto se debe a que es difícil seguir la pista de los objetos gráficos. Se incluyen en la cifra exportada con la figura sufijo.

Colocar los componentes de sí mismo

He escrito mi programa sin utilizar la guía. Es fácil crear e implementar los componentes. Como se puede ver a continuación, requiere un poco de orden un montón de codificación. Imagínese cómo fornido códigos para los juegos como póquer y otras aplicaciones donde hay una diversidad de actividades. De todos modos, volver a escribir programas sin utilizar la guía. Esto se hace mediante la especificación de hantag a la forma de la ventana que se crearán y la posición de la ventana. Por supuesto, otros parámetros como el color o de devolución de llamada configurado, al igual que en la guía. He escrito mis programas como objetos de Matlab y se utiliza la estrategia de externalizar los componentes del constructor llamando a una operación de outsourcing, cuyo nombre tentativo gui init. Puedo guardar mis objetos internos de la clase en una estructura que se apoderó de la manija de todos los componentes. Esta estructura se inicia cuando me pongo los componentes.

  classdef aClassName <HandleEasy
    propiedades
       handleToGui;
    Final
    métodos
       obj = function aClassName (varargin)
          ...
          obj.initGui ();
          ...
       Final
       ...
       función de la figura = initGui (Obj)
          Obj.handleToGui.fig = cifra (...);
          Obj.handleToGui.otherComponentName = ...
          ...
       Final
    Final
 final classdef% 

Matlab guihandles función

Matlab tiene una función llamada guihandles. Es muy conveniente en muchos aspectos, y voy a explicar por qué. La razón es que usted no tiene que preocuparse por la adición de los componentes directamente en una estructura cuando se los pone porque guihandles (parenteral), ofrece una estructura de mangos a todos los niños (hijos) que están en la figura. Al llamar a esto, usted puede iniciar handleToGui después de todos los componentes establecidos. Esto se convierte entonces en una estructura con un campo de Ames dado el nombre de la etiqueta (Tag) los componentes se han dado.

Problemas con la función de Matlab guihandles

Sin embargo, existe un riesgo con esta que creo que Matlab no han pensado. Por otra parte, es lo que yo y otros han utilizado el muy sin cuidado. El hecho es que las asas gui proporciona una manija para todos los widgets en la figura. Si usted tiene diferentes clases de diferentes partes de su aplicación, como una clase separada que se encarga de un determinado tipo de plottyta en una parte del programa y de otra clase que realiza una tarea similar en otro lugar que puede destruir uno al otro, si ambos están utilizando guihandles. Guihandles en subcomponentes permite las asas para el personaje principal (incluyendo otros subcomponentes que están en él). Si los otros subcomponentes tienen el mismo nombre de etiqueta de un componente, que se confunde cuando se invoca el componente de lo que cree que es su componente.

No utilice la función de Matlab guihandles

Programación orientada a objetos para mí es un método de programación para crear una buena estructura. Esto al permitir que cada objeto (clase) hacen su trabajo interno y sólo se comunican a través de interfaces específicas con el medio ambiente. Guihandles variables globales le da es muy peligroso. El concepto de que el mundo busca en otras palabras, para el acoplamiento de baja, alta cohesión y módulos bien definidos.

Escrito por David Gustafsson, en: Programación | Tags: , , ,
Junio
19
2009
2

Matlab programación

He trabajado con un programa de Matlab durante mi trabajo de verano. La fuerza de Matlab es que es un lenguaje muy sencillo que es un nivel más alto de abstracción que, por ejemplo, Java. Para ello hay que añadir que el lenguaje es muy sencillo cuando se trata de realizar cálculos, resolver ecuaciones diferenciales, cálculo numérico, simulaciones, etc. Una desventaja, lo que resulta de un alto nivel de abstracción, sin embargo, es que va bastante lento. Usted tiene que pensar cuidadosamente acerca de cuando se codifica.

Matlab construido a partir de 2008a la versión de java. Es posible ejecutar la mayoría de las funciones de Java por la función de Matlab (también hay otras funciones en el mismo género):

  javaMethodEDT ("clase u objeto de la clase ',' methodName, ..., Params) 

A partir de 2008 la versión de Matlab, también se pueden crear clases y objetos, lo que simplifica y crea estructura misma. La sintaxis es bastante lejos de java y mucho se hereda de las versiones anteriores de Matlab, que al principio hace que sea un poco incómodo. Yo en una serie de artículos que presentan algunos consejos y trucos para la programación Matlab.

  • Voy a ir a través de la interfaz gráfica de usuario en la forma de incluir a los árboles y los controles. Estos son manejados por las funciones Matlab uicontrol y uitree, que es una reescritura de los componentes de Java, JTree y JButton, JTextField, etc. En este contexto, tomo la subcontratación de componentes, que se puede hacer manualmente y con guía de Matlab software incorporado.
  • Voy a volver a los métodos de Matlab obtener y establecer, que es un poco complicado pero muy bueno cuando se trabaja con objetos.
  • Voy a través de las funciones de MATLAB para guardar objetos y explicar por qué es más sabio para guardar los datos en forma de estructuras de datos.
  • Por último, también la intención de plantear las llamadas devoluciones de llamada y la función ode45, que es útil en la solución de ecuaciones diferenciales. Ode45 pueden utilizarse entre otras cosas para simular sistemas dinámicos de diversos tipos. Un ejemplo es el comportamiento de la red en diferentes condiciones.

Me veo ahora como un buen programador de Matlab con la experiencia de dos proyectos. Para más información sobre mí y mi misión, por favor póngase en contacto con el david@techonomics.se . Tengo f de impuestos y la factura por cesión o cobran por hora.

El tema es una modificación de Aero 2.0 - Blogglista.se - La traducción es realizada por N2H