2015-06-03 9 views
11

Sto provando a calcolare in modo programmato le variazioni di tensione su un circuito molto grande.Quale algoritmo devo usare per calcolare la tensione su un circuito combinato?

* Questa domanda può sembrare orientata verso l'elettronica, ma è più sull'applicazione di un algoritmo su un insieme di dati.

Per semplicità,
ecco un circuito completo, con le tensioni già calcolati:

enter image description here

sto origine solo dato la tensione della batteria e le resistenze:

enter image description here

Il problema che ho è che viene calcolata la tensione in modo diverso tra circuiti paralleli e in serie.
A somewhat similar question asked on SO.

Alcune formule:

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

legge di Ohm:

V = IR
I = V/R
R = V/I

V is voltage(volts)
I is current(amps)
R is resistance(ohms)

Ogni tutorial che ho trovato su internet è costituito da persone concettualmente raggruppamento circuiti insieme in parallelo per ottenere la resistenza totale, e quindi usando quella resistenza per calcolare la resistenza in serie.

enter image description here

Questo va bene per piccoli esempi, ma è difficile ricavare un algoritmo fuori di esso per i circuiti su larga scala.

La mia domanda:
Data una matrice di tutti i percorsi completi,
c'è un modo per me per calcolare tutte le gocce di tensione?

Attualmente ho il sistema come struttura di dati del grafico.
Tutti i nodi sono rappresentati (e possono essere consultati) con un numero di identificazione.

Così, per l'esempio precedente, se corro gli attraversamenti, io tornare un elenco di percorsi come questo:

[[0,1,2,4,0] 
,[0,1,3,4,0]] 

Ogni numero può essere utilizzato per ricavare il nodo reale ed è dati corrispondenti. Che tipo di trasformazioni/algoritmi devo eseguire su questo insieme di dati?


E 'molto probabile che porzioni del circuito saranno composti, e quelle sezioni composti possono trovarsi essendo in parallelo o in serie con altre sezioni composti.

Penso che il mio problema è simile a questo:
http://en.wikipedia.org/wiki/Series-parallel_partial_order

+1

Il circuito è composto da parallelo o serie? o può contenere il circuito del ponte? –

+3

Si consiglia di consultare la legge di Kirchhoff: http://en.wikipedia.org/wiki/Kirchhoff%27s_circuit_laws può essere utilizzato per derivare un insieme di equazioni lineari da risolvere. – Henry

+0

@PhamTrung Buona domanda. Niente ponti Puramente parallelo e serie. –

risposta

0

Penso che il modo di andare qui sarebbe qualcosa di simile a questo:

  1. Ordina tutti i percorsi in gruppi della stessa lunghezza.
  2. Mentre ci sono più gruppi, scegliere il gruppo con la lunghezza maggiore e:
    2a. Trova due percorsi con una differenza di articolo.
    2b. "Unisci" in un percorso con la lunghezza minore di uno - l'unione dipende dagli elementi reali che sono diversi.
    2c. Aggiungi il nuovo percorso nel gruppo pertinente.
    2d. Se ci sono solo percorsi con più di una differenza di elemento, unisci i diversi elementi in modo da avere solo un elemento diverso tra i percorsi.
    2e. Quando rimane un solo oggetto, trova un oggetto da un "inferiore" (= la lunghezza è più piccola) con le differenze minime e unisci l'oggetto da abbinare.
  3. Quando c'è un gruppo rimasto con più di un elemento, continua a fare # 2 finché non rimane un gruppo con un oggetto.
  4. Calcolare direttamente il valore di quell'elemento.

Questo è molto iniziale, ma penso che l'idea principale sia chiara.
Qualsiasi miglioramento è benvenuto.

2

utilizzare un algoritmo di flusso massimo (Dijkstra è tuo amico).

http://www.cs.princeton.edu/courses/archive/spr04/cos226/lectures/maxflow.4up.pdf

fai finta di essere di fronte ad un problema di flusso di acqua (beh, in realtà si tratta di un problema di flusso). Devi calcolare il flusso di acqua su ogni segmento (la corrente). Quindi è possibile calcolare facilmente la caduta di tensione (pressione dell'acqua) su ogni resistenza.

+0

questo non è vero, l'algoritmo maxflow è diverso perché non c'è alcuna caduta di tensione considerata attraverso i vertici, quindi le capacità dei bordi sono fisse, ma nel circuito elettrico le capacità dei bordi cambiano con caduta di tensione. la conduttanza di per sé non definisce la capacità di un bordo, ma insieme alla caduta di tensione può darvi un flusso esatto nel bordo. Puoi dare una riduzione e dimostrare che è uguale al problema del flusso massimo? –

3

Alcuni circuiti non possono nemmeno essere analizzati in termini di serie e parallelo, ad esempio un circuito che include lo edges of a cube (c'è del codice in fondo a quella pagina che potrebbe essere utile, non l'ho guardato). Un altro esempio che non può essere analizzato in serie/parallelo è una forma pentagon/pentagramma.

Una soluzione più robusta di pensare a serie e parallelo è utilizzare Kirchhoff's laws.

  1. È necessario creare variabili per le correnti in ciascuna sezione lineare del circuito.
  2. Applicare la legge corrente di Kirchhoff (KCL) ai nodi in corrispondenza delle sezioni lineari .
  3. Applicare la legge di tensione di Kirchhoff (KVL) a tutti i cicli che si possono trovare.
  4. Utilizzare l'eliminazione gaussiana per risolvere il sistema di equazioni lineare risultante .

La parte difficile è l'identificazione dei cicli. Nell'esempio fornito, ci sono tre cicli: batteria e resistore sinistro, batteria e resistore destro e resistori sinistro e destro. Per i circuiti planari non è troppo difficile trovare un set completo di cicli; per i circuiti tridimensionali, può essere difficile.

In realtà non sono necessari tutti i cicli. Nell'esempio sopra, due sarebbero sufficienti (corrispondenti alle due regioni delimitate in cui il circuito divide il piano). Quindi si hanno tre variabili (correnti in tre parti lineari del circuito) e tre equazioni (somma delle correnti nel nodo superiore in cui si incontrano tre segmenti lineari e la tensione scende attorno a due cicli). Questo è sufficiente per risolvere il sistema per le correnti con l'eliminazione gaussiana, quindi è possibile calcolare le tensioni dalle correnti.

Se si introducono troppe equazioni (ad esempio, le correnti su entrambi i nodi nell'esempio e le tensioni su tre cicli invece di due), le cose continueranno a funzionare: l'eliminazione gaussiana eliminerà solo le ridondanze e continuerete a ottieni la risposta unica e corretta. Il vero problema è se hai poche equazioni. Ad esempio, se utilizzi KCL sui due nodi nel tuo esempio e KVL attorno a un solo ciclo, avrai tre equazioni, ma una è ridondante, quindi avrai solo due equazioni indipendenti, il che non è sufficiente. Quindi direi di lanciare in ogni equazione che puoi trovare e lasciare che l'eliminazione gaussiana risolva il problema.

E si spera che si possa restringere ai circuiti planari, per i quali è facile trovare un bel set di cicli. Altrimenti avrete bisogno di un algoritmo di enumerazione del ciclo grafico. Sono sicuro che puoi trovarne uno se ne hai bisogno.

Problemi correlati