Resistor mesh: Difference between revisions
Content added Content deleted
(added FreeBASIC) |
|||
Line 458: | Line 458: | ||
endfunction |
endfunction |
||
</lang> |
</lang> |
||
=={{Header|FreeBASIC}}== |
|||
<lang freebasic>' version 01-07-2018 |
|||
' compile with: fbc -s console |
|||
#Define n 10 |
|||
Dim As UInteger nn = n * n |
|||
Dim As Double g(-nn To nn +1, -nn To nn +1) |
|||
Dim As UInteger node, row, col |
|||
For row = 1 To n |
|||
For col = 1 To n |
|||
node += 1 |
|||
If row > 1 Then |
|||
g(node, node) += 1 |
|||
g(node, node - n) = -1 |
|||
End If |
|||
If row < n Then |
|||
g(node, node) += 1 |
|||
g(node, node + n) = -1 |
|||
End If |
|||
If col > 1 Then |
|||
g(node, node) += 1 |
|||
g(node, node -1) = -1 |
|||
End If |
|||
If col < n Then |
|||
g(node, node) += 1 |
|||
g(node, node +1) = -1 |
|||
End If |
|||
Next |
|||
Next |
|||
Dim As UInteger ar = 2, ac = 2 |
|||
Dim As UInteger br = 7, bc = 8 |
|||
Dim As UInteger a = ac + n * (ar -1) |
|||
Dim As UInteger b = bc + n * (br -1) |
|||
g(a, nn +1) = -1 |
|||
g(b, nn +1) = 1 |
|||
Print : Print "Nodes a: "; a, " b: "; b |
|||
' solve linear system using Gauss-Seidel method with pivoting |
|||
Dim As UInteger i, j, k |
|||
Dim As Double y |
|||
Do |
|||
For j = 1 To nn |
|||
For i = j To nn |
|||
If g(i, j) <> 0 Then Exit For |
|||
Next |
|||
If i = nn +1 Then |
|||
Print : Print "No solution" |
|||
Exit Do |
|||
End If |
|||
For k = 1 To nn +1 |
|||
Swap g(j, k), g(i, k) |
|||
Next |
|||
y = g(j, j) |
|||
For k = 1 To nn +1 |
|||
g(j, k) = g(j, k) / y |
|||
Next |
|||
For i = 1 To nn |
|||
If i <> j Then |
|||
y = -g(i, j) |
|||
For k = 1 To nn +1 |
|||
g(i, k) = g(i, k) + y * g(j, k) |
|||
Next |
|||
End If |
|||
Next |
|||
Next |
|||
Print |
|||
Print "Resistance ="; Abs(g(a, nn +1) - g(b, nn +1)); " Ohm" |
|||
Exit Do |
|||
Loop |
|||
' empty keyboard buffer |
|||
While Inkey <> "" : Wend |
|||
Print : Print "hit any key to end program" |
|||
Sleep |
|||
End</lang> |
|||
{{out}} |
|||
<pre>Nodes a: 12 b: 68 |
|||
Resistance = 1.60899124173073 Ohm</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |