设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6356|回复: 20
打印 上一主题 下一主题

复数脚本 V1.9 修正log10、log bug 新增unpolar

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
142
在线时间
264 小时
注册时间
2006-11-22
帖子
1057
跳转到指定楼层
1
发表于 2008-5-31 07:03:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
修正log10、log bug
只经过初步测试…指数只能整数…- -

方法


self + other
self - other
self * other
self / other  
self ** other
算术运算符。分别表示和(加)、差(减)、积(乘)、商(除)、幂(乘方)。
self == other
判断相等。
abs
绝对值。
polar
极式。
unploar
a = Complex(1,2).polar
p Complex(a[0],a[1]).unpolar # => Complex(1,2)

Math:
csc
sec
cot
sincostan的倒数。
qu
二次方程
fact
阶乘。
cbrt
立方根。
to_rad
度数转弧度。
to_deg
弧度转度数。
nCr
…这东西中文叫?
sqrt
exp
log
log10
sin
cos
tan
sinh
cosh
tanh
asin
acos
atan
asinh
acosh
atanh
扩展复数运算。

Object:
Complex(re,im)
建立一个复数。

Numeric:
to_c

  1. class Complex
  2.   attr(:re)
  3.   attr(:im)
  4.   def initialize(re, im)
  5.     @re = re
  6.     @im = im
  7.   end
  8.   def +(other)
  9.     if other.class == Complex
  10.       return Complex(@re+other.re, @im+other.im)
  11.     else
  12.       return Complex(@re+other, @im)
  13.     end
  14.   end
  15.   def -(other)
  16.     if other.class == Complex
  17.       return Complex(@re-other.re, @im-other.im)
  18.     else
  19.       return Complex(@re-other, @im)
  20.     end
  21.   end
  22.   def *(other)
  23.     if other.class == Complex
  24.       return Complex(@re*other.re-@im*other.im, @im*other.re+@re*other.im)
  25.     else
  26.       return Complex(@re*other, @im*other)
  27.     end
  28.   end
  29.   def /(other)
  30.     if other.class == Complex
  31.       a = (@re*other.re+@im*other.im)/(other.re**2+other.im**2)
  32.       b = (@im*other.re-@re*other.im)/(other.re**2+other.im**2)
  33.       return Complex(a, b)
  34.     else
  35.       return Complex(@re/other, @im/other)
  36.     end
  37.   end
  38.   def **(other)
  39.     times = other
  40.     if @im == 0
  41.       return @re**other
  42.     else
  43.       if times >= 2
  44.         result = self*self
  45.         times -= 2
  46.         result**times
  47.       end
  48.       return result
  49.     end
  50.   end
  51.   def ==(other)
  52.     a = @re == other.re
  53.     b = @im == other.im
  54.     if a == true and b == true
  55.       return ture
  56.     else
  57.       return false
  58.     end
  59.   end
  60.   def abs
  61.     return Math.sqrt(@re**2+@im**2)
  62.   end
  63.   def polar
  64.     z = Math.sqrt(@re**2 + @im ** 2)
  65.     theta = Math.atan(Float(@im)/Float(@re))
  66.     return z, theta
  67.   end
  68.   def unpolar
  69.     r = @re
  70.     theta = @im
  71.     return Complex(r*Math.cos(theta), r*Math.sin(theta))
  72.   end
  73.   def coerce(numeric)
  74.     if numeric.class != Complex
  75.       return numeric.to_c, self
  76.     end
  77.   end
  78.   def +@
  79.     return self
  80.   end
  81.   def -@
  82.     return Complex(-@re,-@im)
  83.   end
  84. end
  85. class Object
  86.   def Complex(re,lm)
  87.     return Complex.new(re,lm)
  88.   end
  89. end
  90. class Numeric
  91.   def to_c
  92.     return Complex(self, 0)
  93.   end
  94. end
  95. #==============================================================================
  96. # ■ Math
  97. #------------------------------------------------------------------------------
  98. #  支持浮点运算的模块。
  99. #==============================================================================

  100. module Math
  101.   #--------------------------------------------------------------------------
  102.   # ● 恒量
  103.   #--------------------------------------------------------------------------
  104.   I = Complex(0,1)
  105.   #--------------------------------------------------------------------------
  106.   # ● Csc
  107.   #--------------------------------------------------------------------------
  108.   def self.csc(x)
  109.     return 1/self.sin(x)
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● Sec
  113.   #--------------------------------------------------------------------------
  114.   def self.sec(x)
  115.     return 1/self.cos(x)
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● Cot
  119.   #--------------------------------------------------------------------------
  120.   def self.cot(x)
  121.     return 1/self.tan(x)
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 二次方程一
  125.   #--------------------------------------------------------------------------
  126.   def self.qu(a, b, c)
  127.     y1 = (-1*b + self.sqrt(b*b - 4*a*c)) / 2*a
  128.     y2 = (-1*b - self.sqrt(b*b - 4*a*c)) / 2*a
  129.     if y1 == y2
  130.       return y1
  131.     else
  132.       return y1,y2
  133.     end
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 阶乘
  137.   #--------------------------------------------------------------------------
  138.   def self.fact(numb)
  139.     if numb == 0
  140.       return 1
  141.     end
  142.     if numb.is_a?(Integer)
  143.       for i in 1...numb
  144.         numb *=  i
  145.       end
  146.       return numb
  147.     else
  148.       result = self.sqrt(2*PI*numb) * (numb/E)**numb * (1+1/12*numb+1/288*numb**2-139/51840*numb**3-571/2488320*numb**4)
  149.       return result
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 立方根
  154.   #--------------------------------------------------------------------------
  155.   def self.cbrt(x)
  156.     return self.exp(self.log(x)/3)
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 度数转弧度
  160.   #--------------------------------------------------------------------------
  161.   def self.to_rad(x)
  162.     r = x*(PI/180)
  163.     return r
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 弧度转度数
  167.   #--------------------------------------------------------------------------
  168.   def self.to_deg(x)
  169.     d = x*(180/PI)
  170.     return d
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● nCr
  174.   #--------------------------------------------------------------------------
  175.   def self.nCr(n, r)
  176.     return (self.fact(n))/(self.fact(r)*self.fact(n-r))
  177.   end
  178. end
  179. #==============================================================================
  180. # ■ Math
  181. #------------------------------------------------------------------------------
  182. #  扩展复数运算。
  183. #==============================================================================
  184. class << Math
  185.   alias old_sqrt sqrt
  186.   alias old_exp exp
  187.   alias old_log log
  188.   alias old_log10 log10
  189.   alias old_sin sin
  190.   alias old_cos cos
  191.   alias old_tan tan
  192.   alias old_sinh sinh
  193.   alias old_cosh cosh
  194.   alias old_tanh tanh
  195.   alias old_asin asin
  196.   alias old_acos acos
  197.   alias old_atan atan
  198.   alias old_asinh asinh
  199.   alias old_acosh acosh
  200.   alias old_atanh atanh
  201.   #--------------------------------------------------------------------------
  202.   # ● 平方根
  203.   #--------------------------------------------------------------------------
  204.   def sqrt(z)
  205.     if z.class == Complex
  206.       r = z.abs
  207.       x = z.re
  208.       return Complex(old_sqrt((r + x) / 2), old_sqrt((r - x) / 2))
  209.     else
  210.       if z < 0
  211.         return Complex.new(0, old_sqrt(z.abs))
  212.       else
  213.         old_sqrt(z)
  214.       end
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 指数函数
  219.   #--------------------------------------------------------------------------
  220.   def exp(z)
  221.     if z.class == Complex
  222.       return Complex(old_exp(z.re) * old_cos(z.im), old_exp(z.re) * old_sin(z.im))
  223.     else
  224.       old_exp(z)
  225.     end
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 自然对数
  229.   #--------------------------------------------------------------------------
  230.   def log(z)
  231.     if z.class == Complex
  232.       return Complex(old_log(z.abs), z.polar[1])
  233.     else
  234.       if z < 0
  235.         return Complex(log(z.abs), Math::PI)
  236.       else
  237.         old_log(z)
  238.       end
  239.     end
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 常用对数
  243.   #--------------------------------------------------------------------------
  244.   def log10(z)
  245.     if z.class == Complex
  246.       u = Complex(old_log10(z.abs), z.polar[1]/old_log(10))
  247.       return u
  248.     else
  249.       if z < 0
  250.         return Complex(old_log10(z.abs), old_log10(Math::E)*Math::PI)
  251.       else
  252.         old_log10(z)
  253.       end
  254.     end
  255.   end
  256.   #--------------------------------------------------------------------------
  257.   # ● sin
  258.   #--------------------------------------------------------------------------
  259.   def sin(z)
  260.     if z.class == Complex
  261.       return Complex(old_sin(z.re) * old_cosh(z.im), old_cos(z.re) * old_sinh(z.im))
  262.     else
  263.       old_sin(z)
  264.     end
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● cos
  268.   #--------------------------------------------------------------------------
  269.   def cos(z)
  270.     if z.class == Complex
  271.       return Complex(old_cos(z.re) * old_cosh(z.im), -old_sin(z.re) * old_sinh(z.im))
  272.     else
  273.       old_cos(z)
  274.     end
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● tan
  278.   #--------------------------------------------------------------------------
  279.   def tan(z)
  280.     if z.class == Complex
  281.       return sin(z)/cos(z)
  282.     else
  283.       old_tan(z)
  284.     end
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● sinh
  288.   #--------------------------------------------------------------------------
  289.   def sinh(z)
  290.     if z.class == Complex
  291.       return Complex(old_sinh(z.re) * old_cos(z.im), old_cosh(z.re) * old_sin(z.im))
  292.     else
  293.       old_sinh(z)
  294.     end
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # ● cosh
  298.   #--------------------------------------------------------------------------
  299.   def cosh(z)
  300.     if z.class == Complex
  301.       return Complex(old_cosh(z.re) * old_cos(z.im), old_sinh(z.re) * old_sin(z.im))
  302.     else
  303.       old_cosh(z)
  304.     end
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● tanh
  308.   #--------------------------------------------------------------------------
  309.   def tanh(z)
  310.     if z.class == Complex
  311.       return sinh(z) / cosh(z)
  312.     else
  313.       old_tanh(z)
  314.     end
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● asin
  318.   #--------------------------------------------------------------------------
  319.   def asin(z)
  320.     if z.class == Complex
  321.       return log(Math::I * z + sqrt(1.0 - z * z))/Math::I
  322.     else
  323.       old_asin(z)
  324.     end
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● acos
  328.   #--------------------------------------------------------------------------
  329.   def acos(z)
  330.     if z.class == Complex
  331.       return log(z + Math::I * sqrt(1.0 - z * z))/Math::I
  332.     else
  333.       old_acos(z)
  334.     end
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● atan
  338.   #--------------------------------------------------------------------------
  339.   def atan(z)
  340.     if z.class == Complex
  341.       return log((1.0 + z * Math::I)/(1.0 - z * Math::I))/Math::I*2
  342.     else
  343.       old_atan(z)
  344.     end
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● asinh
  348.   #--------------------------------------------------------------------------
  349.   def asinh(z)
  350.     if z.class == Complex
  351.       return log(z + sqrt(1.0 + z * z))
  352.     else
  353.       old_asinh(z)
  354.     end
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ● acosh
  358.   #--------------------------------------------------------------------------
  359.   def acosh(z)
  360.     if z.class == Complex
  361.       return log(z + sqrt(z * z - 1.0))
  362.     else
  363.       old_acosh(z)
  364.     end
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ● atanh
  368.   #--------------------------------------------------------------------------
  369.   def atanh(z)
  370.     if z.class == Complex
  371.       return log((1.0 + z) / (1.0 - z)) / 2.0
  372.     else
  373.       old_atanh(z)
  374.     end
  375.   end
  376. end
复制代码

Lv3.寻梦者

酱油的

梦石
0
星屑
1020
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2008-5-31 07:05:08 | 只看该作者
甚麽叫複數...英文是甚麽 Orz
(完全看不懂題目與腳本的人爬過)
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-29
帖子
826
3
发表于 2008-5-31 07:12:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1020
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

4
发表于 2008-5-31 07:33:49 | 只看该作者
哦哦,原來是complex num...我說中文怎麼叫複數 Orz。
麻煩在開頭提及所有新增的公共方法和私有方法
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-29
帖子
826
5
发表于 2008-5-31 07:43:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-29
帖子
826
6
发表于 2009-6-12 08:00:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1020
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

7
发表于 2008-5-31 08:09:01 | 只看该作者
Orz 禾西錯了...提問區多謝有你們在幫忙...
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-29
帖子
826
8
发表于 2008-5-31 08:11:47 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-29
帖子
826
9
发表于 2008-6-1 00:33:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-3-29
帖子
826
10
发表于 2008-6-1 02:00:32 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 06:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表