Resistance network calculator: Difference between revisions

Added 11l
m (Thundergnat moved page Resistance Network Calculator to Resistance network calculator: Follow normal task title capitalization policy)
(Added 11l)
Line 58:
 
assert 180 == network(4,0,3,"0 1 150|0 2 50|1 3 300|2 3 250")
 
=={{header|11l}}==
{{trans|Python}}
 
<lang 11l>F gauss(&m)
V (n, p) = (m.len, m[0].len)
L(i) 0 .< n
V k = max(i .< n, key' x -> abs(@m[x][@i]))
swap(&m[i], &m[k])
V t = 1 / m[i][i]
L(j) i + 1 .< p
m[i][j] *= t
L(j) i + 1 .< n
t = m[j][i]
L(k) i + 1 .< p
m[j][k] -= t * m[i][k]
L(i) (n - 1 .< -1).step(-1)
L(j) 0 .< i
m[j].last -= m[j][i] * m[i].last
R m.map(row -> row.last)
 
F network(n, k0, k1, s)
V m = [[0.0] * (n+1)] * n
V resistors = s.split(‘|’)
L(resistor) resistors
V (aa, bb, rr) = resistor.split(‘ ’)
V (a, b, r) = (Int(aa), Int(bb), (1 / Int(rr)))
m[a][a] += r
m[b][b] += r
I a > 0
m[a][b] -= r
I b > 0
m[b][a] -= r
m[k0][k0] = 1
m[k1].last = 1
R gauss(&m)[k1]
 
F is_equal(a, b)
R abs(a - b) < 1e-6
 
assert(is_equal(10 , network(7, 0, 1, ‘0 2 6|2 3 4|3 4 10|4 5 2|5 6 8|6 1 4|3 5 6|3 6 6|3 1 8|2 1 8’)))
assert(is_equal(3/2 , network(3*3, 0, 3*3-1, ‘0 1 1|1 2 1|3 4 1|4 5 1|6 7 1|7 8 1|0 3 1|3 6 1|1 4 1|4 7 1|2 5 1|5 8 1’)))
assert(is_equal(13/7, network(4*4, 0, 4*4-1, ‘0 1 1|1 2 1|2 3 1|4 5 1|5 6 1|6 7 1|8 9 1|9 10 1|10 11 1|12 13 1|13 14 1|14 15 1|0 4 1|4 8 1|8 12 1|1 5 1|5 9 1|9 13 1|2 6 1|6 10 1|10 14 1|3 7 1|7 11 1|11 15 1’)))
assert(is_equal(180 , network(4, 0, 3, ‘0 1 150|0 2 50|1 3 300|2 3 250’)))
print(‘OK’)</lang>
 
=={{header|Go}}==
1,453

edits