I'm trying to solve a problem related to dependant voltage sources. I need to provide two answers which either I can't obtain or don't understand why I have obtained it.

Problem I need to solve

What I have done

This is a summary of what I have done, the details are in the section 'Details'.

For calculating the Norton resistance

In summary, I have obtained the correct Norton resistance by using the following KVL equation, and I have obtained the correct result:

V0 - v1 - v2 - v3 + Au = 0

What I don't understand is why Au is added instead of being substracted, since its polarity is the opposite as V0. As far as I understand, the correct KVL would be:

V0 - v1 - v2 - v3 - Au = 0

With which I obtain a Norton resistance that is wrong. Why is Au being added instead of subtracted?

Norton current

My second question is about the Norton current. What I have done is calculating the Port B voltage (the node just after R2), and divide it by the Norton resistance, that is:

Vportb = It / (R3 + Ru), where It is the total current across the loop and Ru is the Au equivalent resistance.

And then:

Inorton = Vportb / Rnorton

I obtain the wrong result at this point. What am I missing?


The details about what I have done are below (the language used is SageMath):

# Declare known constants
V0 = 5
A = 2
R1 = 1
R2 = 3
R3 = 5

# 'i' is the unknown total current across the loop
# v1, v2 and v3 are the voltage drops in R1, R2 and R3 respectively
i = var('i')
v1 = i * R1
v2 = i * R2
v3 = i * R3

# v1 is the votlage drop in R1
u = V0 - v1

# Au --> dependant voltage source shown in the schema
Au = A * u

# (1) Use KVL
KVL1 = V0 - v1 - v2 - v3 + Au == 0
# Shouldn't the above be -Au?

# total current across the loop (solve the KVL equation)
_i = float(solve(KVL1, i)[0].rhs())
print("Total current = %f" % _i)

# voltage across 'u'
_u = V0 - (_i * R1)
print("Voltage across 'u' = %f" % _u)

# Dependant voltage as if it was a resistor
Ru = A * _u / _i

# Norton ressistance
Rn = float(1 / ((1/(R3 + Ru)) + (1/(R1+R2))))
print("Norton ressitance = %f" % Rn)

# Voltage across port B
VB = _i * (R3 + Ru)

# Norton current: voltage across Port B / Norton resistance
In = VB / Rn
print("Norton current: %f" % In)

############### Results ###############
> Total current = 1.363636
> Voltage across 'u' = 3.636364
> Norton resistance = 2.883721
> Norton current: 4.886364

EDIT - One solution found, but still there are things that I don't understand

Reading the comments, I have found the problem but, still, there are several things I don't understand. What I have done now is:

I have removed this part:

# Dependant voltage as if it was a resistor
Ru = A * _u / _i

And I have applied KCL, so add the current through the two branches (R1-R2 and Au-R3):

I1 = V0 / (R1 + R2)
I2 = 2 * _u / R3
print(I1 + I2)

I still don't understand why treating the dependant voltage source, once I know _u, as a resistor, is not correct.

In addition, I still don't understand how the wrong KVL equation can give me the right answer while the 'supposed correct one' is causing a failure in my results.

Finally, _i is supposed to be the total current across the loop, but it is 1.363636, which does not match with my other result. This is the thing that most disturbs me, it seems that my KVL eq., which takes into account Au, has given me the current generated only by V0.

  • \$\begingroup\$ I'm not familiar with the language you used. (C-like, without ; line endings and where you can just state equations as in F# and not have them executed "in order." So a functional language. But one I don't know.) The basic solution is to find the unloaded port B voltage and then inject an amp and find the new port B voltage. From that, you get what you need. But given my unfamiliarity with the language, I don't want to try and tell you where you coded incorrectly. Your results should be \$I_\text{N}=\frac{11}{4}\:\text{A}\$ and \$R_\text{N}=\frac{20}{7}\:\Omega\$. \$\endgroup\$
    – jonk
    Commented May 27, 2019 at 19:50
  • \$\begingroup\$ The 'unloaded' port B voltage is what I have calculated as _u? What do you mean when you say 'inject an amp'? Why specifically one amp? Could you provide equations? Thanks. BTW the language I'm using is SageMath, which relies on Python. \$\endgroup\$
    – Martel
    Commented May 27, 2019 at 21:00
  • \$\begingroup\$ Thanks. I use sympy, myself. I'm just unfamiliar with "print()" in this context. Yes. I can provide equations. You can use the numerical solver in Sage or else use the symbolic solver in sympy. And there are several different ways of solving. By "injecting" I just mean that you place a current source across port B of one amp. (Making it one amp makes the final computation easier to do in your head.) \$\endgroup\$
    – jonk
    Commented May 27, 2019 at 21:07

2 Answers 2


Here's your schematic:


simulate this circuit – Schematic created using CircuitLab

Using nodal (KCL) I get:

$$\begin{align*} \frac{V_u}{R_1}+\frac{V_u}{R_2}&=\frac{V_0}{R_1}+\frac{V_+}{R_2}\\\\ \frac{V_+}{R_2}+\frac{V_+}{R_3}&=\frac{V_u}{R_2}+\frac{A\cdot V_u}{R_3} \end{align*}$$

Solve with sympy:

var('vu vplus r1 r2 r3 A v0')

Please note that equation 3 adds an amp of current injected into Port B. (You can see the +1 at the end as the only modification to equation 2.)

From the above, we know that \$V_\text{TH}=\frac{55}{7}\:\text{V}\$ and that \$R_\text{TH}=\frac{\Delta V}{\Delta I}=\frac{\frac{75}{7}\:\text{V}-\frac{55}{7}\:\text{V}}{1\:\text{A}-0\:\text{A}}=\frac{20}{7}\:\Omega\$. Converting to Norton is \$I_\text{N}=\frac{V_\text{TH}}{R_\text{TH}}=\frac{11}{4}\:\text{A}\$ and \$R_\text{N}=R_\text{TH}=\frac{20}{7}\:\Omega\$.


Your second KVL equation is correct, not your first.

I'm not 100% clear why you got a wrong Norton resistance using the correct equation and a right one using the wrong equation, but I can see a couple things that don't make sense in your analysis.

# Dependant voltage as if it was a resistor
Ru = A * _u / _i

For calculating the Norton resistance, you want to calculate the change in port voltage, when the port current changes, not the voltage due to the loop current for the open-circuit output case (which is what your _i variable represents).

The effective resistance of the VCVS won't be the same when it responds to signals on the output port as when it responds to currents in the loop you calculated KVL over.

# Norton ressistance
Rn = float(1 / ((1/(R3 + Ru)) + (1/(R1+R2))))
print("Norton ressitance = %f" % Rn)

Since the calculation you made to determine Ru isn't correct for determining the response to the port voltage, this can't be either.

Hint: Try transforming just the VCVS and R3 into a Norton equivalent, and Vs, R1, and R2 into a Norton equivalent (you will have to find a way to express the VCVS control variable \$u\$ in terms of the parameters of the new circuits). Now you'll have two Norton circuits connected in parallel, which are easy to combine.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.