lib/dydx.rb in dydx-0.1.314 vs lib/dydx.rb in dydx-0.1.412

- old
+ new

@@ -4,18 +4,17 @@ require 'dydx/function' require 'dydx/integrand' module Dydx include Algebra - %w(f g h int_f).each do |functioner| + %w(f g h temp_cal_f).each do |functioner| define_method(functioner) do |*vars| function = eval("$#{functioner}") return eval("$#{functioner} = Function.new(*vars)") unless function - raise ArgumentError, "invalid number of values (#{vars.count} for #{function.vars.count})" unless function.vars.count == vars.count - return function if function.vars == vars - return function unless function.algebra + fail ArgumentError, "invalid number of values (#{vars.count} for #{function.vars.count})" unless function.vars.count == vars.count + return function if function.vars == vars || !function.algebra subst_hash = Hash[*[function.vars, vars].transpose.flatten] begin function.algebra.subst(subst_hash).to_f rescue ArgumentError @@ -23,49 +22,43 @@ end end end def S(function, delta) - Integrand.new(function, delta.var) + itgrl_var = delta.var + unless function.is_a?(Function) + eval "g(#{itgrl_var}) <= #{function}" + function = g(x) + end + Integrand.new(function, itgrl_var) end def d Delta.new end def reset $f, $g, $h = nil, nil, nil end + def _(*args) + case args.count + when 1 + num = args.first + Num.new(num) + when 3 + ltr, op, rtr = args + ltr.send(op, rtr) + end + end + def method_missing(method, *args, &block) method_name = method.to_s if method_name =~ /^d.$/ Delta.new(method_name[1].to_sym, args.first) elsif method_name =~ /^[a-z]$/ method_name.to_sym else super end - end - - private - - def substitute(vars, function) - string = function.algebra.to_s - function.vars.each_with_index { |var, i| string.gsub!(var.to_s, vars[i].to_s) } - string - end - - def all_vars_num?(vars) - vars.all? { |v| v.is_a?(Numeric) } - end - - def rename_for_calc(string) - # TODO: need more refactoring... - string.gsub!('cos', 'Math.cos') - string.gsub!('sin', 'Math.sin') - string.gsub!('log', 'Math.log') - string.gsub!(' e ', ' Math::E ') - string.gsub!('pi', 'Math::PI') - string end end