晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 sh-3ll

HOME


sh-3ll 1.0
DIR:/opt/alt/ruby34/share/gems/gems/bigdecimal-3.1.8/sample/
Upload File :
Current File : //opt/alt/ruby34/share/gems/gems/bigdecimal-3.1.8/sample/linear.rb
#!/usr/local/bin/ruby
# frozen_string_literal: false

#
# 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]
#

# :stopdoc:
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("0.0")
one  = BigDecimal("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(s)
         as << BigDecimal(s)
       end
       printf("Contatant vector element b[%d] ? ",i)
       b << BigDecimal(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(s[j])
         as << BigDecimal(s[j])
       end
       b << BigDecimal(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