6 votos

Solucionadores de ecuaciones no lineales en simuladores SPICE

Tenemos una misión en el procesamiento en Paralelo de la clase, el objetivo es implementar un No-lineal solucionador de Ecuaciones en cuda basado en Newton Raphson método y a la interfaz de este solver con una aplicación que se ocupa de conjunto de ecuaciones no lineales. Queríamos interfaz de nuestro solver con simuladores de circuitos. Hemos recogido un simulador de código abierto y cada vez que el simulador es la realización de un DC punto de funcionamiento de la simulación se va a invocar nuestro código cuda. En este punto hemos querido comparar el desempeño de nuestro solver en contra de solucionadores de problemas de aplicación en otros simuladores de circuitos, tales como

  • LTspice
  • Ngspice
  • Qucs

Y también otro software que resuelven por ejemplo, Matlab optimización de la caja de herramientas

Hemos probado estos solucionadores contra un circuito [que se debe asignar a un enorme conjunto de los lineales eqns.]

enter image description here

El circuito de netlist es generada por un script donde el número de los nodos es dado. Hemos formulado el conjunto de ecuaciones no lineales que rigen el circuito de arriba como los siguientes

enter image description here

Las incógnitas x[i] en este conjunto de ecuaciones es el voltaje de los nodos y la corriente en cada resistor

Hemos logrado escribir este como una función de matlab para la prueba de este circuito en contra de matlab solver no lineal de los algoritmos presentados en la optimización de la caja de herramientas.

function F = non_linear_diode(X)
% Len(x) is always even 2*d
d = length(X)/2;
F = zeros(1, d*2);
i = 1e-3;     % Current source magnitude
r = 50;       % Resistors value
c1 = 1e-15;   % Diodes I_s
c2 = 0.0258;  % Diodes N*V_th

F(1) = X(1) - X(2) - i*r;
F(d) = X(d) - X(d+1) - X(2*d)*r;
F(d+1) = i - c1*(exp(X(2)/c2) -1) - X(d+2);

for ii = 2:(d -1)
    F(ii) = X(ii) - X(ii+1) - X(ii+d)*r;
    F(ii+d) = X(ii+d) - c1*(exp(X(ii+1)/c2) -1) - X(ii + d + 1);
end
F(d*2) = X(2*d) - c1*(exp(X(d+1)/c2) -1);
end

También hemos escrito un script para generar Spice netlist para este problema

def gen_ckt(num):
    ret = ""
    for i in range(1, num):
        ret += 'R'+str(i)+" "+str(i)+" "+str(i+1)+" 50\n"
        ret += 'D'+str(i)+" "+str(i+1)+" 0 DI1N4004\n"

Donde DI1N4004 es nuestro diodo modelo definido en la lista de red. Cuando las pruebas de la anterior solucionadores contra el problema con 70,000 nodos es decir, 140,000 ecuaciones y de incógnitas

  • Matlab ejecuta fuera de la memoria
  • Qucs tarda una eternidad
  • Todas las especias basado en solucionadores de alguna manera de resolver este problema en menos de 2 segundos

Realmente no tenemos idea de cómo especias solucionadores de las arreglé para evitar este problema de memoria, y aún cuando las pruebas de este problema en contra de un menor número de incógnitas por ejemplo 3,000 el spice solucionadores siempre superan a las de matlab y qucs. Aunque como se menciona en [1] [2] [3] spice utiliza el amortiguado de Newton-Raphson enfoque para resolver circuitos con componentes no lineales que es el mismo para todos los solucionadores de problemas mencionados anteriormente

  • Matlab Fsolve : pata de perro método [Newton + Trust-region + empinada decente] [4]
  • Qucs : de amortiguamiento de Newton-Raphson [5]

Mis preguntas son

  • Cómo especias logró resolver un gran sistema de ecuaciones no lineales de forma rápida y sin el funcionamiento de la memoria ? es explotar el circuito de la estructura haciendo uso de los elementos repetidos ?
  • Es este ejemplo suficientemente justo ? quiero decir, ¿debemos considerar más circuitos prácticos ? y si es así ¿se puede dar un ejemplo de un circuito(s) donde DC punto de funcionamiento de la simulación podría ser el cuello de botella del tiempo de simulación ?
  • En [6] los autores mencionados ISCAS85 de referencia de los circuitos debemos considerar estos circuitos en nuestras pruebas ?
  • Es el DC punto de funcionamiento el tipo de simulación que nos debe de enfocar ? me refiero a que debemos enfocar a la interfaz de nuestro solver para otros tipos de simulaciones por ejemplo, el análisis de transitorios ?

Referencias

1 : http://www.ni.com/white-paper/5808/en/

2 : http://www.ecircuitcenter.com/SpiceTopics/Overview/Overview.htm

3 : http://www.electronicdesign.com/boards/taking-peek-under-hood-your-spice-circuit-simulation-engine

4 : https://www.mathworks.com/help/optim/ug/fsolve.html

5 : http://qucs.sourceforge.net/tech/node16.html

6 : http://www.mos-ak.org/bucharest/presetnations/Lannutti_MOS-AK_Bucharest.pdf

7voto

RWH Puntos 21

Cómo especias logró resolver un gran sistema de ecuaciones no lineales de forma rápida y sin el funcionamiento de la memoria ?

Google matriz dispersa de solver.

Una buena ESPECIA muy probable que los valores por defecto (o sabe cuándo cambiar a) una matriz dispersa de solver, desde las grandes circuitos suelen producir matrices dispersas (cada nodo se conecta a una pequeña fracción de las ramas), sería una obvia la optimización de usar (o tenemos disponible) de una matriz dispersa de solver en una de las ESPECIAS. Incluso Nagel del original de 1975, informe de Tesis de grado (?) en SPICE se describe el uso de la matriz dispersa métodos.

Matlab tiene ciertamente una matriz dispersa solver disponibles, pero es probable que tenga que invoca explícitamente.

Qucs no tienen esta capacidad, o podría no aplicarse particularmente bien, porque es bastante cruda proyecto de código abierto y sus desarrolladores no podría haber llegado al punto de que las pruebas en nada más grande que un juguete problema.

(Sombrero de punta a @jonk para el enlace a la Nagel informe)

Es este ejemplo suficientemente justo ? quiero decir, ¿debemos considerar más circuitos prácticos ?

Yo creo que quieren demostrar su solver en una amplia variedad de diferentes tipos de circuitos. Es probable que desee considerar los circuitos que se sabe que producen mal condicionado matrices. La retroalimentación positiva de los circuitos también se producen a menudo dificultades para los no-lineal que resuelven.

y si es así ¿se puede dar un ejemplo de un circuito(s) donde DC punto de funcionamiento de la simulación podría ser el cuello de botella del tiempo de simulación?

Me gustaría expec este ser común en cualquier mal condicionado circuito cuando la creación de una CA de simulación.

Es el DC punto de funcionamiento el tipo de simulación que nos debe de enfocar ? me refiero a que debemos enfocar a la interfaz de nuestro solver para otros tipos de simulaciones por ejemplo, el análisis de transitorios ?

El resto de los principales tipos de simulación (ac y transitoria) sólo requieren lineal solucionadores de problemas. El CA de simulación explícitamente se acerca pequeñas variaciones sobre el punto de funcionamiento, de manera que el circuito puede considerarse lineal por la teoría de la perturbación. El transitorio solver linearizes el circuito en cada paso de tiempo, pero la re-calcula el local lineal circuito equivalente para cada paso de tiempo. Así que si usted está tratando de demostrar una no-lineal de solver, la DC solver es el que tiene que demostrar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X