82 lines
1.7 KiB
Plaintext
82 lines
1.7 KiB
Plaintext
' 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
|