- :directory '(:absolute "tmp")
- :name
- (concatenate 'string "rlc-data-"
- (write-to-string (get-universal-time)))
- :type "dat")))
+ :directory '(:absolute "tmp")
+ :name
+ (concatenate 'string "rlc-data-"
+ (write-to-string (get-universal-time)))
+ :type "dat")))
(write-series-rlc-current-graph-stream out v r l c t-inc t-end t-start)))
(defun write-series-rlc-current-graph-stream (out v r l c t-inc t-end
(write-series-rlc-current-graph-stream out v r l c t-inc t-end t-start)))
(defun write-series-rlc-current-graph-stream (out v r l c t-inc t-end
(defun series-rlc-current-graph-data (v r l c t-inc t-end &optional (t-start 0))
(let* ((formula-list (series-rlc-current-formula v r l c))
(defun series-rlc-current-graph-data (v r l c t-inc t-end &optional (t-start 0))
(let* ((formula-list (series-rlc-current-formula v r l c))
- (formula-eval (eval formula-list))
- (formula (compile nil formula-eval))
- (n (ceiling (- t-end t-start) t-inc)))
+ (formula-eval (eval formula-list))
+ (formula (compile nil formula-eval))
+ (n (ceiling (- t-end t-start) t-inc)))
(setf (aref x-pts i) tm)
(setf (aref y-pts i) (funcall formula tm)))))
(defun series-rlc-current-time (v r l c tm)
(let* ((formula-list (series-rlc-current-formula v r l c))
(setf (aref x-pts i) tm)
(setf (aref y-pts i) (funcall formula tm)))))
(defun series-rlc-current-time (v r l c tm)
(let* ((formula-list (series-rlc-current-formula v r l c))
(defun series-rlc-current-formula (v r l c)
"Returns formula for currrent through a series RLC circuit with a step-voltage applied at time 0."
(ecase (circuit-type r l c)
(defun series-rlc-current-formula (v r l c)
"Returns formula for currrent through a series RLC circuit with a step-voltage applied at time 0."
(ecase (circuit-type r l c)
(:rc
`(lambda (tm) (* ,(/ v r) (exp (- (* tm ,(/ 1 r c)))))))
(:lc
(let ((lc-root (sqrt (* l c))))
(:rc
`(lambda (tm) (* ,(/ v r) (exp (- (* tm ,(/ 1 r c)))))))
(:lc
(let ((lc-root (sqrt (* l c))))
- (rr/4ll (when r/2l (* r/2l r/2l)))
- (v/l (when (/= 0 l) (/ v l)))
- (1/lc (when (and (/= 0 l) (/= 0 c)) (/ 1 (* l c)))))
-
- (cond
- ;; RLC over-damped
- ((> rr/4ll 1/lc)
- (let* ((root (sqrt (- rr/4ll 1/lc)))
- (p1 (+ (- r/2l) root))
- (p2 (- (- r/2l) root)))
- `(lambda (tm)
- (* ,(/ v/l (- p1 p2))
- (- (exp (* ,p1 tm)) (exp (* ,p2 tm)))))))
- ;; RLC critcally-damped
- ((= rr/4ll 1/lc)
- `(lambda (tm)
- (* tm
- ,v/l
- (exp (- (* tm ,r/2l))))))
- ;; RLC under-damped
- (t
- (let ((diff (- 1/lc rr/4ll)))
- `(lambda (tm)
- (* ,(/ v/l (sqrt diff))
- (exp (- (* tm ,r/2l)))
- (sin (* tm ,(sqrt diff))))))))))))
-
+ (rr/4ll (when r/2l (* r/2l r/2l)))
+ (v/l (when (/= 0 l) (/ v l)))
+ (1/lc (when (and (/= 0 l) (/= 0 c)) (/ 1 (* l c)))))
+
+ (cond
+ ;; RLC over-damped
+ ((> rr/4ll 1/lc)
+ (let* ((root (sqrt (- rr/4ll 1/lc)))
+ (p1 (+ (- r/2l) root))
+ (p2 (- (- r/2l) root)))
+ `(lambda (tm)
+ (* ,(/ v/l (- p1 p2))
+ (- (exp (* ,p1 tm)) (exp (* ,p2 tm)))))))
+ ;; RLC critcally-damped
+ ((= rr/4ll 1/lc)
+ `(lambda (tm)
+ (* tm
+ ,v/l
+ (exp (- (* tm ,r/2l))))))
+ ;; RLC under-damped
+ (t
+ (let ((diff (- 1/lc rr/4ll)))
+ `(lambda (tm)
+ (* ,(/ v/l (sqrt diff))
+ (exp (- (* tm ,r/2l)))
+ (sin (* tm ,(sqrt diff))))))))))))
+
+