From 441546edcfbb1b346c87b69c5f578d1a0e522e06 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Mon, 7 Jul 2008 07:36:34 +0000 Subject: add tag v1_8_6_269 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_6_269@17937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_6/ext/bigdecimal/sample/linear.rb | 71 +++++++++++++++++++++++++++++ ruby_1_8_6/ext/bigdecimal/sample/nlsolve.rb | 38 +++++++++++++++ ruby_1_8_6/ext/bigdecimal/sample/pi.rb | 20 ++++++++ 3 files changed, 129 insertions(+) create mode 100644 ruby_1_8_6/ext/bigdecimal/sample/linear.rb create mode 100644 ruby_1_8_6/ext/bigdecimal/sample/nlsolve.rb create mode 100644 ruby_1_8_6/ext/bigdecimal/sample/pi.rb (limited to 'ruby_1_8_6/ext/bigdecimal/sample') diff --git a/ruby_1_8_6/ext/bigdecimal/sample/linear.rb b/ruby_1_8_6/ext/bigdecimal/sample/linear.rb new file mode 100644 index 0000000000..88a62ffa71 --- /dev/null +++ b/ruby_1_8_6/ext/bigdecimal/sample/linear.rb @@ -0,0 +1,71 @@ +#!/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. +# +# USAGE: +# ruby linear.rb [input file solved] +# + +require "bigdecimal" +require "bigdecimal/ludcmp" + +# +# NOTE: +# Change following BigDecimal::limit() if needed. +BigDecimal::limit(100) +# + +include LUSolve +def rd_order(na) + printf("Number of equations ?") if(na <= 0) + n = ARGF.gets().to_i +end + +na = ARGV.size +zero = BigDecimal::new("0.0") +one = BigDecimal::new("1.0") + +while (n=rd_order(na))>0 + a = [] + as= [] + b = [] + if na <= 0 + # Read data from console. + 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 = ARGF.gets + a << BigDecimal::new(s); + as << BigDecimal::new(s); + end + printf("Contatant vector element b[%d] ? ",i); b << BigDecimal::new(ARGF.gets); + end + else + # Read data from specified file. + printf("Coefficient matrix and constant vector.\n"); + for i in 0...n do + s = ARGF.gets + printf("%d) %s",i,s) + s = s.split + for j in 0...n do + a << BigDecimal::new(s[j]); + as << BigDecimal::new(s[j]); + end + b << BigDecimal::new(s[n]); + end + end + x = lusolve(a,b,ludecomp(a,n,zero,one),zero) + printf("Answer(x[i] & (A*x-b)[i]) follows\n") + for i in 0...n do + printf("x[%d]=%s ",i,x[i].to_s) + s = zero + for j in 0...n do + s = s + as[i*n+j]*x[j] + end + printf(" & %s\n",(s-b[i]).to_s) + end +end diff --git a/ruby_1_8_6/ext/bigdecimal/sample/nlsolve.rb b/ruby_1_8_6/ext/bigdecimal/sample/nlsolve.rb new file mode 100644 index 0000000000..7f729e6aaa --- /dev/null +++ b/ruby_1_8_6/ext/bigdecimal/sample/nlsolve.rb @@ -0,0 +1,38 @@ +#!/usr/local/bin/ruby + +# +# nlsolve.rb +# An example for solving nonlinear algebraic equation system. +# + +require "bigdecimal" +require "bigdecimal/newton" +include Newton + +class Function + def initialize() + @zero = BigDecimal::new("0.0") + @one = BigDecimal::new("1.0") + @two = BigDecimal::new("2.0") + @ten = BigDecimal::new("10.0") + @eps = BigDecimal::new("1.0e-16") + end + def zero;@zero;end + def one ;@one ;end + def two ;@two ;end + def ten ;@ten ;end + def eps ;@eps ;end + def values(x) # <= defines functions solved + f = [] + f1 = x[0]*x[0] + x[1]*x[1] - @two # f1 = x**2 + y**2 - 2 => 0 + f2 = x[0] - x[1] # f2 = x - y => 0 + f <<= f1 + f <<= f2 + f + end +end + f = BigDecimal::limit(100) + f = Function.new + x = [f.zero,f.zero] # Initial values + n = nlsolve(f,x) + p x diff --git a/ruby_1_8_6/ext/bigdecimal/sample/pi.rb b/ruby_1_8_6/ext/bigdecimal/sample/pi.rb new file mode 100644 index 0000000000..2f7dd27d60 --- /dev/null +++ b/ruby_1_8_6/ext/bigdecimal/sample/pi.rb @@ -0,0 +1,20 @@ +#!/usr/local/bin/ruby + +# +# pi.rb +# +# Calculates 3.1415.... (the number of times that a circle's diameter +# will fit around the circle) using J. Machin's formula. +# + +require "bigdecimal" +require "bigdecimal/math.rb" + +include BigMath + +if ARGV.size == 1 + print "PI("+ARGV[0]+"):\n" + p PI(ARGV[0].to_i) +else + print "TRY: ruby pi.rb 1000 \n" +end -- cgit v1.2.3