Recientemente usé Matlab para hacer experimentos de simulación con datos tridimensionales de diversos modelos. Muchos de ellos requieren ajuste de datos tridimensionales. Matlab trae un toolbox de ajuste (cftool) que es realmente potente. Usar el toolbox para el ajuste de datos ahorra mucho trabajo. Para modelos originales con conjuntos de datos suficientes, cftool puede ajustar con precisión los resultados que queremos. Por supuesto, no hablamos de Matlab; este artículo no tiene nada que ver con Matlab en absoluto. ~~He hablado demasiado, comencemos.


1. Prototipo de datos

Primero importamos una tabla de datos completa. Podemos ver que se trata de una matriz con y=9, x=15, de tamaño 9x15. Cada elemento de la matriz corresponde a un valor z. La segunda imagen son los datos que extrajimos de las posiciones correspondientes en la primera imagen. Es una matriz válida de tamaño 3x5.

De esta manera, hemos creado virtualmente datos con una tasa de incompletitud de alrededor del 90% a partir de los datos originales. Nuestro posterior ajuste por interpolación realizará los cálculos correspondientes sobre estos datos incompletos.


2. Ajuste por interpolación

1. Introducción de conceptos

Te dan dos números, (129, 192), y te piden insertar linealmente un valor entre ellos. En realidad hay muchas formas de insertar, por ejemplo, interpolación lineal en el plano bidimensional: B2 = (A1 + A2) / 2, o interpolación lineal en el espacio tridimensional. Nosotros usamos lo siguiente.

A: 192 129

B :192 157 129

2. Ajuste de primer orden

Tras la introducción de conceptos anterior, realizamos la interpolación de primer orden sobre nuestros datos incompletos. Consulte la siguiente fórmula:

Los recuadros negros son datos de vértices válidos. Usamos un algoritmo para recorrer cualquier par de vértices. Mientras uno de ellos sea un dato válido (los de recuadro negro; esto es muy importante, muy importante, muy importante: las cosas importantes se dicen tres veces), se inserta un dato (dato de recuadro azul). Por ejemplo, entre los vértices adyacentes en la fila 129 y 192 se interpola 157, y entre los vértices adyacentes 129 y 267 se interpola 186. El resultado se muestra en la siguiente figura.

¿Ha terminado la interpolación de primer orden? No, mire los datos anteriores. Después de la primera ronda de interpolación, los nuevos vértices adyacentes aún necesitan interpolación. Como mi matriz de datos no es grande, después de la segunda ronda ya no puedo encontrar puntos en blanco adyacentes en los datos. Si la matriz de datos fuera muy grande, en la implementación del algoritmo, nuestro código en este punto podría escribirse en forma recursiva, y solo después de completar toda la interpolación se comienza a desapilar (efecto a continuación).

>3. Ajuste de segundo orden

Nuestro ajuste de segundo orden se ajusta completamente según los resultados del ajuste de primer orden. Mi diseño de segundo orden consiste en interpolar un dato de recuadro verde a través de cuatro vértices válidos (los recuadros negros son vértices válidos; las cosas importantes se dicen una vez). AD es diagonal, BC es diagonal. Consulte la siguiente fórmula:

Nota: después de la interpolación no se realiza el ajuste de primer orden. El ajuste de primer orden requiere el soporte de datos de recuadro negro; cualquier par de datos azules o verdes no lo necesita.

Para que se vea mejor, quité el contenido de primer orden. Si el resultado del ajuste de primer orden no es el modelo que muestro a continuación, es necesario realizar una conversión de modelo. Cómo hacerlo exactamente, piénselo usted mismo o déjeme un mensaje (para el contenido central, mensaje privado).

4. Ajuste de tercer orden

La interpolación de tercer orden es básicamente igual que la de segundo orden. La única diferencia es: cualquier cuatro vértices (sin limitarse a recuadros negros), inserte según la fórmula anterior. Se obtiene la segunda figura.

5. Eliminar puntos auxiliares

Finalmente, les digo a todos: arriba, excepto los recuadros negros que son datos válidos, los recuadros de otros colores son datos auxiliares, similares a las líneas auxiliares que se trazan para resolver problemas de geometría. Ahora eliminémoslos. El resultado después de la eliminación se muestra a continuación.

6. Comparar desviación con el prototipo de datos

Desviación media del 7%, desviación máxima del 22%. Relativamente hablando, el grado de ajuste es bastante bueno. No olvide que solo tengo el 10% de los datos y necesito ajustar el 90% de los datos.

7. Salida de resultados

8. Resumen

El 95% del tiempo se dedica a buscar soluciones, y el 5% del tiempo a escribir las soluciones en código. Después de leer este artículo, ¿se puede resolver fácilmente el ajuste de superficies?

(Este algoritmo se basa en modelos simétricos y regulares; aún no se ha probado su adaptabilidad a modelos irregulares). ¡Dé un like antes de irse!

Autor: showlo

Enlace: https://zhuanlan.zhihu.com/p/24275757

Fuente: Zhihu