algorithm - una - ley de ohm
¿Qué algoritmo utilizo para calcular el voltaje en un circuito combinado? (3)
Algunos circuitos ni siquiera se pueden analizar en términos de series y paralelos, por ejemplo, un circuito que incluye los bordes de un cubo (hay algún código en la parte inferior de esa página web que podría ser útil; no lo he visto). Otro ejemplo que no se puede analizar en serie / paralelo es una forma de pentágono / pentagrama.
Una solución más sólida que pensar en series y paralelos es usar las leyes de Kirchhoff .
- Necesita hacer variables para las corrientes en cada sección lineal del circuito.
- Aplique la ley actual de Kirchhoff (KCL) a los nodos donde se encuentran las secciones lineales.
- Aplique la ley de voltaje de Kirchhoff (KVL) a todos los ciclos que pueda encontrar.
- Use la eliminación gaussiana para resolver el sistema lineal resultante de ecuaciones.
La parte difícil es identificar ciclos. En el ejemplo que das, hay tres ciclos: a través de la batería y la resistencia izquierda, la batería y la resistencia derecha, y mediante resistencias izquierda y derecha. Para circuitos planos, no es demasiado difícil encontrar un conjunto completo de ciclos; para circuitos tridimensionales, puede ser difícil.
Realmente no necesitas todos los ciclos. En el ejemplo anterior, dos serían suficientes (correspondientes a las dos regiones delimitadas en las que el circuito divide el plano). Luego tiene tres variables (corrientes en tres partes lineales del circuito) y tres ecuaciones (suma de corrientes en el nodo superior donde se unen tres segmentos lineales, y el voltaje cae alrededor de dos ciclos). Eso es suficiente para resolver el sistema de corrientes por eliminación gaussiana, entonces puede calcular los voltajes de las corrientes.
Si arroja demasiadas ecuaciones (por ejemplo, corrientes en ambos nodos en su ejemplo y voltajes en tres ciclos en lugar de dos), las cosas seguirán funcionando: la eliminación gaussiana eliminará las redundancias y seguirá obteniendo lo único respuesta correcta. El verdadero problema es si tienes muy pocas ecuaciones. Por ejemplo, si usa KCL en los dos nodos en su ejemplo y KVL en un solo ciclo, tendrá tres ecuaciones, pero una es redundante, por lo que solo tendrá dos ecuaciones independientes, lo que no es suficiente. Así que diría que arroje todas las ecuaciones que pueda encontrar y deje que la eliminación gaussiana lo resuelva.
Y con suerte puede restringir a circuitos planos, para lo cual es fácil encontrar un buen conjunto de ciclos. De lo contrario, necesitará un algoritmo de enumeración de ciclo de gráfico. Estoy seguro de que puedes encontrar uno si lo necesitas.
Estoy tratando de calcular programáticamente los cambios de voltaje en un circuito muy grande.
* Esta pregunta puede parecer orientada a la electrónica, pero se trata más bien de aplicar un algoritmo sobre un conjunto de datos.
Para mantener las cosas simples,
aquí hay un circuito completo, con los voltajes ya calculados:
Originalmente solo me dieron el voltaje de la batería y las resistencias:
El problema que tengo es que el voltaje se calcula de manera diferente entre los circuitos en paralelo y en serie.
Una pregunta algo similar hecha en SO.
Algunas fórmulas:
When resistors are in parallel:
Rtotal = 1/(1/R1 + 1/R2 + 1/R3 ... + 1/Rn)
When resistors are in series:
Rtotal = R1 + R2 + R3 ... + Rn
Ley de Ohm:
V = IR
I = V/R
R = V/I
V is voltage
(volts)
I is current
(amps)
R is resistance
(ohms)
Cada tutorial que he encontrado en Internet consiste en personas que agrupan conceptualmente circuitos paralelos para obtener la resistencia total y luego usan esa resistencia para calcular la resistencia en serie.
Esto está bien para pequeños ejemplos, pero es difícil derivar un algoritmo para circuitos a gran escala.
Mi pregunta:
Dada una matriz de todos los caminos completos,
¿Hay alguna manera de calcular todas las caídas de voltaje?
Actualmente tengo el sistema como una estructura de datos de gráficos.
Todos los nodos están representados (y pueden ser consultados por) un número de identificación.
Entonces, para el ejemplo anterior, si ejecuto los recorridos, obtendré una lista de rutas como esta:
[[0,1,2,4,0]
,[0,1,3,4,0]]
Cada número se puede usar para derivar el nodo real y sus datos correspondientes. ¿Qué tipo de transformaciones / algoritmos necesito realizar en este conjunto de datos?
Es muy probable que partes del circuito sean compuestas, y esas secciones compuestas pueden encontrarse en paralelo o en serie con otras secciones compuestas.
Creo que mi problema es similar a esto:
http://en.wikipedia.org/wiki/Series-parallel_partial_order
Creo que el camino a seguir aquí sería algo como esto:
- Clasifica todos tus caminos en grupos de la misma longitud.
- Si bien hay más de un grupo, elija el grupo con la longitud más grande y:
2a. Encuentra dos caminos con una diferencia de artículo.
2b. "Fusionarlos" en una ruta con una longitud menor a uno: la fusión depende de los elementos reales que son diferentes.
2c. Agregue la nueva ruta al grupo relevante.
2d. Si solo hay rutas con más de una diferencia de elementos, combine los diferentes elementos para que tenga solo un elemento diferente entre las rutas.
2e. Cuando solo queda un elemento, busque un artículo de una "baja" (= la longitud es más pequeña) con las mínimas diferencias, y fusione el artículo para que coincida. - Cuando queda un grupo con más de un elemento, continúe haciendo # 2 hasta que quede un grupo con un elemento.
- Calcule el valor de ese artículo directamente.
Esto es muy inicial, pero creo que la idea principal es clara.
Cualquier mejora es bienvenida.
usa un algoritmo de flujo máximo (Dijkstra es tu amigo).
http://www.cs.princeton.edu/courses/archive/spr04/cos226/lectures/maxflow.4up.pdf
Pretende estar frente a un problema de flujo de agua (bueno, en realidad es un problema de flujo). Tienes que calcular el flujo de agua en cada segmento (la corriente). Luego puede calcular fácilmente la caída de voltaje (presión de agua) en cada resistencia.