Data update
This commit is contained in:
parent
4d5544505c
commit
4924dd0264
3073 changed files with 55820 additions and 4408 deletions
106
Task/Gaussian-elimination/FutureBasic/gaussian-elimination.basic
Normal file
106
Task/Gaussian-elimination/FutureBasic/gaussian-elimination.basic
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
//
|
||||
// Gaussian Elimination Estimate
|
||||
//
|
||||
// FutureBasic 7.0.34 August 2025 R.W
|
||||
//
|
||||
//--------------------------------------------------
|
||||
//
|
||||
// Test data array. I wanted it to be base 1 and not zero
|
||||
// hence the 99 which is just filler for the zeroeth element
|
||||
//
|
||||
double a(6,6) = ¬
|
||||
{99, 99, 99, 99, 99, 99, 99,¬
|
||||
99, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00,¬
|
||||
99, 1.00, 0.63, 0.39, 0.25, 0.16, 0.10,¬
|
||||
99, 1.00, 1.26, 1.58, 1.98, 2.49, 3.13,¬
|
||||
99, 1.00, 1.88, 3.55, 6.70, 12.62, 23.80,¬
|
||||
99, 1.00, 2.51, 6.32, 15.88, 39.90, 100.28,¬
|
||||
99, 1.00, 3.14, 9.87, 31.01, 97.41, 306.02 }
|
||||
|
||||
double b(6) = ¬
|
||||
{99,-0.01, 0.61, 0.91, 0.99, 0.60, 0.02 }
|
||||
|
||||
double x(6)
|
||||
double ab(6)
|
||||
double ans(6),r(6),bb(6,6), f
|
||||
int c, d, g, p1, p2, z
|
||||
//
|
||||
|
||||
int row, col
|
||||
int j, k, n = 6
|
||||
//
|
||||
// Pivot n times
|
||||
local fn pivot(num as int)
|
||||
For p1 = num to n - 1
|
||||
For p2 = p1 + 1 To n
|
||||
If abs(bb(p1,num)) < abs(bb(p2,num))
|
||||
Swap r(p1),r(p2)
|
||||
For g = 1 To n
|
||||
Swap bb(p1,g),bb(p2,g)
|
||||
Next g
|
||||
End If
|
||||
Next p2
|
||||
Next p1
|
||||
end fn
|
||||
|
||||
// The 'Gaussian' function takes two matrices,
|
||||
// 'a' and 'b', with 'a' square, and it returns
|
||||
// the determinant of 'a' and a matrix 'x'
|
||||
// such that a * x = b.
|
||||
// If 'b' is the identity, then 'x' = inverse of 'a'
|
||||
|
||||
local fn Gaussian(matrix(6,6) as double, rhs(6) as double)
|
||||
|
||||
// copy matrix
|
||||
for c = 1 to n
|
||||
r(c) = rhs(c)
|
||||
for d = 1 to n
|
||||
bb(c,d) = matrix(c,d)
|
||||
next d
|
||||
next c
|
||||
|
||||
// pivot it (hey that's what the task requires
|
||||
// don't ask me why. It doesn't
|
||||
// improve accuracy with these numbers)
|
||||
for k = 1 to n-1
|
||||
fn pivot(k)
|
||||
for row = k to n-1
|
||||
if bb(row + 1, k) == 0 then exit for
|
||||
f = bb(k, k) / bb(row+1, k)
|
||||
r(row + 1) = r(row + 1) * f - r(k)
|
||||
For g = 1 To n
|
||||
bb((row + 1), g) = bb((row + 1), g) * f - bb(k,g)
|
||||
Next g
|
||||
Next row
|
||||
Next k
|
||||
|
||||
//back substitute
|
||||
For z = n to 1 step -1
|
||||
ans(z) = r(z) / bb(z,z)
|
||||
For j = n to z + 1 step -1
|
||||
ans(z) = ans(z) - (bb(z,j) * ans(j) / bb(z,z))
|
||||
Next j
|
||||
Next z
|
||||
end fn
|
||||
|
||||
window 1,@"Gaussian Elimination"
|
||||
|
||||
print "TEST DATA USED"
|
||||
print " ax = transpose b"
|
||||
print "[1.00 |0.00 |0.00 | 0.0000 | 0.00 | 0.00] [??] [-0.01]"
|
||||
print "[1.00 |0.63 |0.39 | 0.2500 | 0.16 | 0.10] [??] [ 0.61]"
|
||||
print "[1.00 |1.26 |1.58 | 1.9800 | 2.49 | 3.13] x [??] = [ 0.91]"
|
||||
print "[1.00 |1.88 |3.55 | 6.7000 |12.62 | 23.80] [??] [ 0.99]"
|
||||
print "[1.00 |2.51 |6.32 |15.8800 |39.90 |100.28] [??] [ 0.60]"
|
||||
print "[1.00 |3.14 |9.87 |31.0100 |97.41 |306.02] [??] [ 0.02]"
|
||||
print
|
||||
|
||||
fn Gaussian(a(0,0),b(0))
|
||||
|
||||
print "Solution:"
|
||||
print "---------"
|
||||
for j = 1 to 6
|
||||
print using "###.################";ans(j)
|
||||
next j
|
||||
|
||||
HandleEvents
|
||||
Loading…
Add table
Add a link
Reference in a new issue