Para comprender mejor cómo funcionan los simuladores iterativos, como circuitJS para un ejemplo, decidí utilizar un filtro de paso bajo RC simple.
El voltaje en el que estoy interesado es el que se encuentra en el condensador, se puede calcular con la siguiente fórmula:
\ $ V_C = V_ {E} (1-e ^ {- \ frac {t} {RC}}) \ $
O puede ser aproximado por este algoritmo ... que he codificado juntos:
VC = 0;
for(int i=0;i<N;++i){
VC += time_step*(VE-VC)/(R*C);
}
time_step sería el tiempo en segundos entre las actualizaciones del simulador. Con este algoritmo, t es el producto de time_step y N . Es un simple filtro LP digital de primer orden.
Así que implementé ese algoritmo en las hojas de Google para ver qué tan bueno era. Y fue bastante correcto.
Estossonlosdatosqueseutilizaron:
Comopuedesver,noesunajusteperfecto.
Sinembargo,simodificoelalgoritmounpocoaesto:
VC=0;for(inti=0;i<N;++i){VC+=alpha*time_step*(VE-VC)/(R*C);}
yestablezcaalfaen0,824,queprovienedelarelaciónentreelvalorcorrectoyelvaloriterativoent=10µs.Entoncesobtengounacoincidenciaperfectacon0errores.
Calculéalfa=0.824de\$\frac{RC}{\text{time_base}}(1-e^{\frac{-\text{time_base}}{RC}})\$conR=25,C=1,time_base=10
¿Porquénecesitoagregaresamultiplicacióndecorrección" alpha " cuando estoy iterando?
Información adicional: a medida que time_base se reduce a 0, alfa va a 1. En otras palabras, a medida que paso a través de pasos cada vez más finos en el tiempo, menor será el error.