summaryrefslogtreecommitdiff log msg author committer range
path: root/ext/bigdecimal/sample/linear.rb
diff options
 context: 12345678910152025303540 space: includeignore mode: unifiedssdiffstat only
Diffstat (limited to 'ext/bigdecimal/sample/linear.rb')
-rw-r--r--ext/bigdecimal/sample/linear.rb46
1 files changed, 46 insertions, 0 deletions
 diff --git a/ext/bigdecimal/sample/linear.rb b/ext/bigdecimal/sample/linear.rbnew file mode 100644index 0000000000..f93404fb6f--- /dev/null+++ b/ext/bigdecimal/sample/linear.rb@@ -0,0 +1,46 @@+#!/usr/local/bin/ruby++#+# linear.rb+#+# Solves linear equation system(A*x = b) by LU decomposition method.+# where A is a coefficient matrix,x is an answer vector,b is a constant vector.+#+require "bigdecimal"+require "ludcmp"++include LUSolve++def rd_order+ printf("Number of equations ?")+ n = gets().chomp.to_i+end++zero = BigDecimal::new("0.0")+one = BigDecimal::new("1.0")++while (n=rd_order())>0+ a = []+ as= []+ b = []+ printf("\nEnter coefficient matrix element A[i,j]\n");+ for i in 0...n do+ for j in 0...n do+ printf("A[%d,%d]? ",i,j); s = gets+ a <<=BigDecimal::new(s);+ as<<=BigDecimal::new(s);+ end+ printf("Contatant vector element b[%d] ? ",i);b<<=BigDecimal::new(gets);+ end+ printf "ANS="+ x = lusolve(a,b,ludecomp(a,n,zero,one),zero)+ p x+ printf "A*x-b\n"+ for i in 0...n do+ s = zero+ for j in 0...n do+ s = s + as[i*n+j]*x[j]+ end+ p s-b[i]+ end+end