Descargo de responsabilidad: soy un geofísico con experiencia limitada en ingeniería eléctrica. No estoy seguro de si este problema es increíblemente fácil, increíblemente complejo o completamente absurdo.
Mi objetivo: determinar la resistividad en masa de una muestra de roca utilizando redes de resistencia.
La muestra de roca debe modelarse utilizando una red de resistencias con ciertas resistencias que tienen alta resistencia (que representa roca sólida) y otras resistencias que tienen baja resistencia (que representan vías de fluido en la roca).
Supongamos que tengo una red de resistencias en una cuadrícula uniforme como se muestra a continuación. En el ejemplo que se muestra, cada segmento de línea tiene una resistencia asociada etiquetada de 1 a 24 en una cuadrícula de 3 por 3. Se conocen las resistencias de cada segmento de línea.
La longitud total de la cuadrícula es y el "área" es (en este caso es un ejemplo en 2-D, por lo que el área también es solo una longitud). La resistividad aparente de la muestra viene dada por:
Mi pregunta: ¿Cómo determino la resistencia efectiva, de la red?
He buscado en línea, pero todo lo que puedo encontrar son discusiones sobre redes infinitas , corrientes de fuente y sumidero, etc. No estoy interesado en la corriente o el voltaje.
¿Se puede resolver este problema tal como está?
Respuestas:
La idea básica es bastante simple. Usted organiza una matriz ( ) que representa "nodos" o vértices en su sistema. Cada uno de estos nodos tiene asociado un "voltaje" de valor escalar que puede modificarse o actualizarse a medida que avanza el algoritmo. También habrá dos nodos cuyo voltaje no se puede cambiar. Vamos a aplicar una especie de "batería" aquí, por lo que esos dos nodos representan los dos extremos de esta batería.V
Por separado, otras dos matrices ( y R hR v R h ) representan los bordes en el sistema, horizontal y vertical. Estos son sus valores de resistencia, supongo. No estoy seguro de cómo piensa completarlos. Pero ese es tu problema. Esta técnica asume que también puede completar estas matrices.
Dependiendo del lenguaje de computadora que use, es posible que pueda o no usar índices negativos. No importa Es solo una cuestión de tener en cuenta lo que enfrenta.
Supongamos que la longitud se divide en N L secciones y que la "longitud" A se divide en N A secciones. Luego, deberá construir una matriz con vértices ( N L + 1 ) ⋅ ( N A + 1 ) para los valores de voltaje escalar. (o más grande). También necesitará esas otras dos matrices con NL norteL UN norteUN ( NL+ 1 ) ⋅ ( NUN+ 1 ) bordes verticales y N L ⋅ ( N A + 1norteUN⋅ ( NL+ 1 ) bordes horizontales entre esos vértices.norteL⋅ ( NUN+ 1 )
Ahora. Inicializa todos los vértices con . Elija uno de los vértices a la izquierda (en el medio, preferiblemente) y anótelo como un 00 0V Valor V que NO está permitido cambiar nunca. Usa el método que quieras para esto. Elija uno de los vértices a la derecha (en el medio, preferiblemente) y cambie su valor a 10 0V , mientras que nuevamente toma nota de que su valor NO puede cambiar nunca. Una técnica que funciona aquí es simplemente dejar que cambie normalmente, pero luego reemplazar el valor en cada paso. Pero no importa cómo lo consigas, siempre que lo consigas.1V
(Existen otras técnicas por razones de eficiencia. Pero probablemente no valga la pena molestarse con ellas aquí).
Ahora para el algoritmo, que a veces se llama un tablero de ajedrez o algoritmo rojo-negro . Moviéndose a través de la matriz de voltaje de su nodo, procese cada nodo donde la suma de los dos índices, es par, realizando la siguiente asignación simple:i + j
La ecuación anterior no es más que calcular el voltaje de un nodo central que tiene cuatro resistencias conectadas a él, donde se conocen los voltajes en los otros extremos de las cuatro resistencias. El voltaje del nodo central se calcula a partir de la ecuación anterior. Como el divisor es el mismo para cada término, podrías calcular la suma de los numeradores y luego dividir una vez por el denominador.
Eso actualizará todos los nodos donde la suma es par. Ahora realiza el mismo procedimiento para todos los nodos donde la suma i + j es impar. Una vez que se hayan realizado estos dos pasos, habrá completado un ciclo.i + j i + j
Si es necesario, restablezca los dos nodos especiales (para y para 10 0V como se discutió anteriormente.) O, si protegió esos dos nodos, no hay necesidad de restablecerlos.1V
Estás listo para el próximo ciclo. Realice estos ciclos tantas veces como considere necesario para que el estado general se estabilice (y lo hará).
Cuando detiene el proceso, puede resolver fácilmente la resistencia eligiendo mirar los nodos que rodean su nodo protegido del lado izquierdo o mirar los nodos que rodean su nodo protegido del lado derecho. (Puede ser una buena idea hacer que su matriz sea lo suficientemente grande [por 1 en todas las direcciones] para que en realidad tenga cuatro nodos que rodean cualquier opción). La diferencia de voltajes entre los nodos circundantes y el nodo especial, dividido por el La resistencia en los bordes entre ellos le indica la salida / entrada actual de su nodo especial. Como se trata de un nodo de "batería", esta corriente debe ser TODA la corriente. Como el voltaje es , por definición, dividiendo 1 por la suma de estas cuatro corrientes que encuentre le indica la resistencia total.1V
Estoy mirando un código que escribí que totaliza, con muchos comentarios, solo 67 líneas. Entonces NO es difícil de escribir.
El "breve resumen" de esta idea es que aplicas un batería y luego ver como los voltajes se extienden por todo el sistema. Una vez que los voltajes se estabilizan (su criterio para eso), todo lo que tiene que hacer es mirar la corriente que entra o sale de un terminal de batería u otro. Ambos deben tener el mismo valor actual (dentro de algunos límites numéricos) por razones obvias.1V
Suponga que calcula . Esto hace referencia a los nodos que rodean V 5 , 5 . Esta bien. Suponga que luego calcula V 5 , 6 = f ( V 4 , 6 , V 6 , 6 , V 5 ,V5 , 5= f( V4 , 5, V6 , 5, V5 , 4, V5 , 6) V5 , 5 5 , 8 ) . Tenga en cuenta que en la lista de parámetros está el valor que acaba de calcular para V 5 , 5 ? Esto "mancharía" mucho las cosas. No es sonido En cambio, cada ciclo de impar / par debería "aparecer como si" ocurriera en el mismo momento. Entonces, su próximo cálculo debe ser V 5 , 7 =f ( V 4 , 7 , V 6 , 7 , V 5 , 6 , VV5 , 6= f( V4 , 6, V6 , 6, V5 , 5, V5 , 7) V5 , 5 V5 , 7= f( V4 , 7, V6 , 7, V5 , 6, V5 , 8) porque ninguna de las entradas a la función son nodos que se modificaron durante este paso. Luego te balanceas y calculas las alternativas, evitando las manchas pero ahora actualizando las alternativas. Realmente tienes que hacerlo de esta manera.
Si, es lo mismo.
Hay una conexión Creo que se llama una implementación 'sin matriz'.
Aquí hay un ejemplo. El siguiente conjunto de valores de resistencia se colocó en LTSpice para simulación:
Lo mantuve breve y simple. Como puede ver, la corriente calculada aproximada del1V 30,225mamá 30.224552mamá
Ejecuté el siguiente programa VB.NET:
El programa anterior muestra una forma de configurar las resistencias, vertical y horizontal, así como la matriz de voltaje, de modo que simplifica algunas de las pruebas para nodos y / o valores de resistencia no existentes. El código es un poco más limpio, de esta manera, aunque requiere algunos elementos de matriz más. (Simplemente he hecho que los valores de resistencia adicionales sean de valor infinito). Simplemente compare cómo configuré las matrices con la forma en que se diseñó el esquema también, y creo que podrá resolver todo exactamente detalles aquí.
También he pirateado las resistencias y los valores de los nodos, por supuesto, sin convertir esto de ninguna manera en un programa de propósito general para leer una tabla de valores. Pero esa generalidad es bastante fácil de agregar. Y este código debería hacer que todo lo que escribí sea absolutamente inequívoco.
(Bien. Una nota final más. Estaría mucho mejor dirigida a F # o cualquier compilador decente dirigido a un sistema informático masivamente paralelo. Cada cálculo en "rojo" o "negro" se puede realizar en paralelo; completamente independiente el uno del otro. F # hace que esto sea trivial. Entonces, codificado en F #, puede ejecutar esto en todos sus núcleos disponibles sin nada especial que hacer. Simplemente funciona. Solo una nota en caso de que esté recopilando MUCHOS datos de alguna manera y quiera tomar Ventaja completa de un sistema multinúcleo.)
NOTA FINAL:
La derivación es bastante simple de KCL. Coloque cuatro resistencias en la siguiente disposición:
simular este circuito : esquema creado con CircuitLab
Aplicar KCL:
Algunos jugando con álgebra obtienen el resultado que utilicé en el código.
fuente
Ciertamente, puede adoptar el enfoque de una red de resistencia 2D para modelar un problema 2D, pero eso puede ser algo complicado cuando se mueve a 3 dimensiones. Es posible que desee considerar el uso de un enfoque más tradicional (en estos días) con conductores de volumen definidos en sus dominios con una conductividad apropiada asignada a cada uno. El código gratuito de FEMM ( http://www.femm.info/wiki/HomePage ) es muy capaz y puede usarse para 2D, simetría axial y 3D. A partir de ahí, puede considerar pasar a códigos mucho más capaces como SCIrun ( https://www.sci.utah.edu/), que es un código académico para problemas de volumen de conductores de complejidad sustancial. Lo uso habitualmente para mallas de más de un millón de tetraedros. Aunque se desarrolló principalmente para el modelado biológico, debería funcionar muy bien para lo que está haciendo. Los ejemplos de problemas de avance en el kit de herramientas de avance / inverso deberían ayudarlo a continuar. También puede encontrar valiosos los problemas inversos para la tomografía de impedancia. Generalmente uso la versión 4 ya que la versión 5 todavía es un trabajo en progreso. El software también tiene una interfaz para tetgen, que es un gran código de construcción de malla.
Finalmente, si no se opone a gastar dinero, siempre hay COMSOL, que es muy fácil de usar (y bastante costoso).
fuente