polynomials 0.1.7 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/polynomials.rb +33 -21
- data/lib/term.rb +21 -6
- data/polynomials.gemspec +2 -3
- data/test/math_test.rb +1 -1
- data/test/polynomial_test.rb +42 -6
- data/test/term_test.rb +12 -0
- metadata +5 -6
- data/tags +0 -91
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/polynomials.rb
CHANGED
@@ -19,8 +19,13 @@ class Polynomial
|
|
19
19
|
return polynomial
|
20
20
|
end
|
21
21
|
|
22
|
-
def initialize
|
22
|
+
def initialize(*args)
|
23
23
|
self.terms = Hash.new { |hash, key| hash[key] = Term.new(key) }
|
24
|
+
unless args.empty?
|
25
|
+
args.reverse.each.with_index do |coefficient,exponent|
|
26
|
+
self.terms[exponent].coefficient += coefficient
|
27
|
+
end
|
28
|
+
end
|
24
29
|
end
|
25
30
|
|
26
31
|
def calculate(x)
|
@@ -30,16 +35,16 @@ class Polynomial
|
|
30
35
|
end
|
31
36
|
|
32
37
|
def derivative
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
38
|
+
new_function = self.alter do |nf, term|
|
39
|
+
nf.terms[term.exponent - 1].coefficient += term.exponent * term.coefficient
|
40
|
+
end
|
41
|
+
new_function.terms.reject! { |_,t| t.coefficient == 0 }
|
37
42
|
return new_function
|
38
43
|
end
|
39
44
|
|
40
45
|
def roots
|
41
46
|
if !terms.empty? and terms.keys.none?(&:zero?)
|
42
|
-
self.alter { |nf, term| nf.terms[term.exponent-
|
47
|
+
self.alter { |nf, term| nf.terms[term.exponent-self.lt.exponent].coefficient = term.coefficient }.roots << 0.0
|
43
48
|
else
|
44
49
|
case self.degree
|
45
50
|
when 1
|
@@ -67,9 +72,9 @@ class Polynomial
|
|
67
72
|
|
68
73
|
possible_extrema.zip(samples.each_cons(2)).each do |pe,(after,before)|
|
69
74
|
yafter = derivative.calculate(after)
|
70
|
-
|
71
|
-
|
72
|
-
|
75
|
+
ybefore = derivative.calculate(before)
|
76
|
+
kind_of_extremum = NegPosMinMaxExtremumMapping[[yafter/yafter.abs,ybefore/ybefore.abs]]
|
77
|
+
max_min_extremum[kind_of_extremum] << pe if kind_of_extremum
|
73
78
|
end
|
74
79
|
end
|
75
80
|
return max_min_extremum
|
@@ -77,11 +82,11 @@ class Polynomial
|
|
77
82
|
|
78
83
|
def curvature_behaviour
|
79
84
|
hash = Hash.new {|h,k|h[k]=Set.new}
|
85
|
+
return hash if self.degree > 5
|
80
86
|
extrema = self.derivative.extrema
|
81
|
-
extrema.values.inject(Set[],&:|).sort
|
82
|
-
|
83
|
-
|
84
|
-
curvature_behaviour
|
87
|
+
all_extremas = extrema.values.inject(Set[],&:|).sort
|
88
|
+
all_extremas.each_cons(2).map { |s,e| Range.new(s,e) }.group_by do |range|
|
89
|
+
kind_of_curvature = AfterextremaCurvatureMapping[extrema.find { |k,v| v.include?(range.begin) }.first]
|
85
90
|
end
|
86
91
|
end
|
87
92
|
|
@@ -90,9 +95,10 @@ class Polynomial
|
|
90
95
|
end
|
91
96
|
|
92
97
|
def to_s
|
93
|
-
terms.
|
94
|
-
string << term.to_s
|
95
|
-
|
98
|
+
terms.sort_by { |_,t| -t.exponent }.inject("") do |string,(_,term)|
|
99
|
+
string << term.to_s unless term.coefficient.zero? && !term.exponent.zero?
|
100
|
+
string
|
101
|
+
end.strip.sub(/\A\+\s/, '')
|
96
102
|
end
|
97
103
|
|
98
104
|
def ==(other)
|
@@ -102,16 +108,22 @@ class Polynomial
|
|
102
108
|
|
103
109
|
def extrema
|
104
110
|
extrema = local_extrema
|
105
|
-
a = self.terms[self.degree].coefficient
|
106
111
|
unless self.degree == 0
|
107
|
-
|
112
|
+
a = self.gt.coefficient
|
113
|
+
max_or_min = (self.degree.even? ? [1.0,1.0] : [-1.0,1.0]).map { |n| (n * a)/a.abs }
|
108
114
|
extrema[MinMaxMapping[max_or_min.first]] << -1.0/0
|
109
115
|
extrema[MinMaxMapping[max_or_min.last]] << 1.0/0
|
110
116
|
end
|
111
117
|
return extrema
|
112
118
|
end
|
113
119
|
|
114
|
-
|
120
|
+
def gt
|
121
|
+
self.terms[self.degree]
|
122
|
+
end
|
123
|
+
|
124
|
+
def lt
|
125
|
+
self.terms[self.terms.min_by{ |_,t| t.exponent}.first]
|
126
|
+
end
|
115
127
|
|
116
128
|
def coefficients_till(n)
|
117
129
|
coefficients = []
|
@@ -120,8 +132,7 @@ class Polynomial
|
|
120
132
|
end
|
121
133
|
return coefficients.reverse
|
122
134
|
end
|
123
|
-
|
124
|
-
protected
|
135
|
+
private :coefficients_till
|
125
136
|
|
126
137
|
def alter
|
127
138
|
new_function = self.class.new
|
@@ -130,4 +141,5 @@ class Polynomial
|
|
130
141
|
end
|
131
142
|
return new_function
|
132
143
|
end
|
144
|
+
protected :alter
|
133
145
|
end
|
data/lib/term.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
class NotParsableError < ArgumentError;end
|
1
2
|
class Term
|
2
3
|
attr_accessor :coefficient, :exponent
|
3
4
|
|
@@ -7,16 +8,30 @@ class Term
|
|
7
8
|
|
8
9
|
def self.parse(string)
|
9
10
|
term = self.new
|
10
|
-
float = /\d
|
11
|
-
integer = /\d
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
float = /\d+(?:\.\d+)?/
|
12
|
+
integer = /\d+/
|
13
|
+
polynomial_regex = /
|
14
|
+
\A\s*
|
15
|
+
(?<algebraic_sign>[-+]?)
|
16
|
+
\s*
|
17
|
+
(?<coefficient>#{float})?
|
18
|
+
\s*
|
19
|
+
(?<power>x(?:\^(?<exponent>#{integer}))?)?
|
20
|
+
\s*\Z
|
21
|
+
/x
|
22
|
+
|
23
|
+
raw_data = string.match(polynomial_regex)
|
24
|
+
raise NotParsableError unless raw_data
|
25
|
+
term.coefficient = (raw_data[:algebraic_sign] + ( raw_data[:coefficient] || "1")).to_f
|
26
|
+
term.exponent = raw_data[:power] ? (raw_data[:exponent] || 1).to_i : 0
|
15
27
|
term
|
16
28
|
end
|
17
29
|
|
18
30
|
def to_s
|
19
|
-
|
31
|
+
pretty_coeffiecent = coefficient.denominator == 1 ? coefficient.abs.to_i : coefficient.abs
|
32
|
+
algebraic_sign = coefficient < 0 ? '-' : '+'
|
33
|
+
power = "x#{"^#{exponent}" unless exponent == 1}"
|
34
|
+
"#{algebraic_sign} #{pretty_coeffiecent}#{ power unless exponent.zero?} "
|
20
35
|
end
|
21
36
|
|
22
37
|
def dup
|
data/polynomials.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{polynomials}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Manuel Korfmann"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-14}
|
13
13
|
s.description = %q{
|
14
14
|
This is a gem dedicated to parsing, manipulating and finding roots,extrema and inflection points of polynomials.
|
15
15
|
It can solve polynomial equations with a degree up to 4 by implementing formulas for solving quadratic, cubic and quartic functions.
|
@@ -31,7 +31,6 @@ It can solve polynomial equations with a degree up to 4 by implementing formulas
|
|
31
31
|
"lib/polynomials.rb",
|
32
32
|
"lib/term.rb",
|
33
33
|
"polynomials.gemspec",
|
34
|
-
"tags",
|
35
34
|
"test/helper.rb",
|
36
35
|
"test/math_test.rb",
|
37
36
|
"test/polynomial_test.rb",
|
data/test/math_test.rb
CHANGED
data/test/polynomial_test.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
require_relative 'test_helper'
|
2
2
|
|
3
|
+
Infinity = 1.0/0
|
3
4
|
class TestPolynomial < MiniTest::Unit::TestCase
|
4
5
|
def test_to_s
|
5
6
|
polynomial = Polynomial.parse('5x + 2x^2 + 20')
|
6
|
-
assert_equal '
|
7
|
+
assert_equal '2x^2 + 5x + 20', polynomial.to_s
|
8
|
+
polynomial = Polynomial.parse('6.5435x^234 + 5.0 + 20x')
|
9
|
+
assert_equal '6.5435x^234 + 20x + 5', polynomial.to_s
|
10
|
+
polynomial = Polynomial.parse('0x^0')
|
11
|
+
assert_equal "0", polynomial.to_s
|
7
12
|
end
|
8
13
|
|
9
14
|
def test_derivative_of_linear_functions
|
@@ -58,13 +63,13 @@ class TestPolynomial < MiniTest::Unit::TestCase
|
|
58
63
|
|
59
64
|
def test_no_inflection_points
|
60
65
|
polynomial = Polynomial.parse('1 x^4')
|
61
|
-
assert_equal({ left:
|
66
|
+
assert_equal({ left: [-1.0/0..+1.0/0] }, polynomial.curvature_behaviour)
|
62
67
|
|
63
68
|
polynomial = Polynomial.parse('-1 x^4')
|
64
|
-
assert_equal({ right:
|
69
|
+
assert_equal({ right: [-1.0/0..+1.0/0] }, polynomial.curvature_behaviour)
|
65
70
|
|
66
71
|
polynomial = Polynomial.parse('5x^2')
|
67
|
-
assert_equal({ left:
|
72
|
+
assert_equal({ left: [-1.0/0..+1.0/0] }, polynomial.curvature_behaviour)
|
68
73
|
end
|
69
74
|
|
70
75
|
def test_no_extremums
|
@@ -72,7 +77,7 @@ class TestPolynomial < MiniTest::Unit::TestCase
|
|
72
77
|
assert_equal({}, polynomial.extrema)
|
73
78
|
end
|
74
79
|
|
75
|
-
def
|
80
|
+
def test_no_curvature
|
76
81
|
polynomials = []
|
77
82
|
polynomials << Polynomial.parse('5 x + 4')
|
78
83
|
polynomials << Polynomial.parse('4')
|
@@ -81,8 +86,39 @@ class TestPolynomial < MiniTest::Unit::TestCase
|
|
81
86
|
end
|
82
87
|
end
|
83
88
|
|
89
|
+
def test_local_extrema_of_derivative_leads_to_no_curvature
|
90
|
+
polynomial = Polynomial.parse('50x^10 - 20x^2')
|
91
|
+
assert_equal({}, polynomial.curvature_behaviour)
|
92
|
+
end
|
93
|
+
|
84
94
|
def test_two_inflection_points
|
85
95
|
polynomial = Polynomial.parse('+ 1.0 x^4 + 5.0 x^3 - 1.0 x^2 + 3.0 x + 5.0')
|
86
|
-
assert_equal({left:
|
96
|
+
assert_equal({left:[-1.0/0..-2.5649778198, 0.0649778198..1.0/0], right: [-2.5649778198..0.0649778198] } , polynomial.curvature_behaviour)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_three_inflection_points
|
100
|
+
polynomial = Polynomial.new(20,4,0,-1,-200)
|
101
|
+
assert_equal( {:right=>[(-1/10)..0.0], :left=>[-Infinity..(-1/10), 0.0..Infinity]}, polynomial.curvature_behaviour)
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def test_efficient_roots_calculation
|
106
|
+
polynomial = Polynomial.parse('200x^2342435 + 6x^20')
|
107
|
+
assert_equal(Set[0.0], polynomial.roots)
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_lt
|
111
|
+
polynomial = Polynomial.parse('1x^2342435 + 5x')
|
112
|
+
assert_euqal Term.new(5,1), polynomial.lt
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_lt
|
116
|
+
polynomial = Polynomial.parse('1x^2342435 + 5x')
|
117
|
+
assert_equal Term.new(2342435,1), polynomial.gt
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_initalizer
|
121
|
+
polynomial = Polynomial.new(5,0,2,-1)
|
122
|
+
assert_equal '5x^3 + 2x - 1', polynomial.to_s
|
87
123
|
end
|
88
124
|
end
|
data/test/term_test.rb
CHANGED
@@ -24,4 +24,16 @@ class TestTerm < MiniTest::Unit::TestCase
|
|
24
24
|
assert_equal 6, Term.parse('6').coefficient
|
25
25
|
assert_equal 0, Term.parse('6').exponent
|
26
26
|
end
|
27
|
+
|
28
|
+
def test_invalid_string_raises_not_parsable_error
|
29
|
+
['6x^ -5', '6^20', '2 2', 'xx', '2 ^ x'].each do |not_parsable_string|
|
30
|
+
assert_raises NotParsableError do
|
31
|
+
term = Term.parse not_parsable_string
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def testing_to_s
|
37
|
+
assert_equal "+ 6 ", Term.parse('6').to_s
|
38
|
+
end
|
27
39
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Manuel Korfmann
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-05-
|
17
|
+
date: 2011-05-14 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -96,7 +96,6 @@ files:
|
|
96
96
|
- lib/polynomials.rb
|
97
97
|
- lib/term.rb
|
98
98
|
- polynomials.gemspec
|
99
|
-
- tags
|
100
99
|
- test/helper.rb
|
101
100
|
- test/math_test.rb
|
102
101
|
- test/polynomial_test.rb
|
@@ -116,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
115
|
requirements:
|
117
116
|
- - ">="
|
118
117
|
- !ruby/object:Gem::Version
|
119
|
-
hash: -
|
118
|
+
hash: -2290630464224354984
|
120
119
|
segments:
|
121
120
|
- 0
|
122
121
|
version: "0"
|
data/tags
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
2
|
-
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
3
|
-
!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
|
4
|
-
!_TAG_PROGRAM_NAME Exuberant Ctags //
|
5
|
-
!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
|
6
|
-
!_TAG_PROGRAM_VERSION 5.8 //
|
7
|
-
== lib/polynomials.rb /^ def ==(other)$/;" f class:Polynomial
|
8
|
-
== lib/term.rb /^ def ==(other)$/;" f class:Term
|
9
|
-
AfterExtremumsCurvatureMapping rdoc/Polynomial.html /^ <dt><a name="AfterExtremumsCurvatureMapping">AfterExtremumsCurvatureMapping<\/a><\/dt>$/;" a
|
10
|
-
Math lib/core_ext/math.rb /^module Math$/;" m
|
11
|
-
MinMaxMapping rdoc/Polynomial.html /^ <dt><a name="MinMaxMapping">MinMaxMapping<\/a><\/dt>$/;" a
|
12
|
-
NegPosMinMaxExtremumMapping rdoc/Polynomial.html /^ <dt><a name="NegPosMinMaxExtremumMapping">NegPosMinMaxExtremumMapping<\/a><\/dt>$/;" a
|
13
|
-
Polynomial lib/polynomials.rb /^class Polynomial$/;" c
|
14
|
-
Term lib/term.rb /^class Term$/;" c
|
15
|
-
Test test/helper.rb /^class Test::Unit::TestCase$/;" c
|
16
|
-
TestMath test/math_test.rb /^class TestMath < MiniTest::Unit::TestCase$/;" c
|
17
|
-
TestPolynomial test/polynomial_test.rb /^class TestPolynomial < MiniTest::Unit::TestCase$/;" c
|
18
|
-
TestTerm test/term_test.rb /^class TestTerm < MiniTest::Unit::TestCase$/;" c
|
19
|
-
alter lib/polynomials.rb /^ def alter$/;" f class:Polynomial
|
20
|
-
calculate lib/polynomials.rb /^ def calculate(x)$/;" f class:Polynomial
|
21
|
-
coefficient rdoc/Term.html /^ <a name="coefficient"><\/a>$/;" a
|
22
|
-
coefficient= rdoc/Term.html /^ <a name="coefficient="><\/a>$/;" a
|
23
|
-
coefficients_till lib/polynomials.rb /^ def coefficients_till(n)$/;" f class:Polynomial
|
24
|
-
curvature_behaviour lib/polynomials.rb /^ def curvature_behaviour$/;" f class:Polynomial
|
25
|
-
degree lib/polynomials.rb /^ def degree$/;" f class:Polynomial
|
26
|
-
derivative lib/polynomials.rb /^ def derivative$/;" f class:Polynomial
|
27
|
-
dup lib/term.rb /^ def dup$/;" f class:Term
|
28
|
-
exponent rdoc/Term.html /^ <a name="exponent"><\/a>$/;" a
|
29
|
-
exponent= rdoc/Term.html /^ <a name="exponent="><\/a>$/;" a
|
30
|
-
extrema lib/polynomials.rb /^ def extrema$/;" f class:Polynomial
|
31
|
-
initialize lib/polynomials.rb /^ def initialize$/;" f class:Polynomial
|
32
|
-
initialize lib/term.rb /^ def initialize(exponent = 0, coefficient = 0)$/;" f class:Term
|
33
|
-
local_extrema lib/polynomials.rb /^ def local_extrema$/;" f class:Polynomial
|
34
|
-
method-c-new rdoc/Polynomial.html /^ <a name="method-c-new"><\/a>$/;" a
|
35
|
-
method-c-new rdoc/Term.html /^ <a name="method-c-new"><\/a>$/;" a
|
36
|
-
method-c-parse rdoc/Polynomial.html /^ <a name="method-c-parse"><\/a>$/;" a
|
37
|
-
method-c-parse rdoc/Term.html /^ <a name="method-c-parse"><\/a>$/;" a
|
38
|
-
method-c-roots_of_cubic_function rdoc/Math.html /^ <a name="method-c-roots_of_cubic_function"><\/a>$/;" a
|
39
|
-
method-c-roots_of_quadratic_function rdoc/Math.html /^ <a name="method-c-roots_of_quadratic_function"><\/a>$/;" a
|
40
|
-
method-c-roots_of_quartic_function rdoc/Math.html /^ <a name="method-c-roots_of_quartic_function"><\/a>$/;" a
|
41
|
-
method-i-%3D%3D rdoc/Polynomial.html /^ <a name="method-i-%3D%3D"><\/a>$/;" a
|
42
|
-
method-i-%3D%3D rdoc/Term.html /^ <a name="method-i-%3D%3D"><\/a>$/;" a
|
43
|
-
method-i-alter rdoc/Polynomial.html /^ <a name="method-i-alter"><\/a>$/;" a
|
44
|
-
method-i-calculate rdoc/Polynomial.html /^ <a name="method-i-calculate"><\/a>$/;" a
|
45
|
-
method-i-coefficients_till rdoc/Polynomial.html /^ <a name="method-i-coefficients_till"><\/a>$/;" a
|
46
|
-
method-i-curvature_behaviour rdoc/Polynomial.html /^ <a name="method-i-curvature_behaviour"><\/a>$/;" a
|
47
|
-
method-i-degree rdoc/Polynomial.html /^ <a name="method-i-degree"><\/a>$/;" a
|
48
|
-
method-i-derivative rdoc/Polynomial.html /^ <a name="method-i-derivative"><\/a>$/;" a
|
49
|
-
method-i-dup rdoc/Term.html /^ <a name="method-i-dup"><\/a>$/;" a
|
50
|
-
method-i-extremums rdoc/Polynomial.html /^ <a name="method-i-extremums"><\/a>$/;" a
|
51
|
-
method-i-local_extremums rdoc/Polynomial.html /^ <a name="method-i-local_extremums"><\/a>$/;" a
|
52
|
-
method-i-nulls rdoc/Polynomial.html /^ <a name="method-i-nulls"><\/a>$/;" a
|
53
|
-
method-i-to_s rdoc/Polynomial.html /^ <a name="method-i-to_s"><\/a>$/;" a
|
54
|
-
method-i-to_s rdoc/Term.html /^ <a name="method-i-to_s"><\/a>$/;" a
|
55
|
-
parse lib/polynomials.rb /^ def self.parse(string)$/;" F class:Polynomial
|
56
|
-
parse lib/term.rb /^ def self.parse(string)$/;" F class:Term
|
57
|
-
roots lib/polynomials.rb /^ def roots$/;" f class:Polynomial
|
58
|
-
roots_of_cubic_function lib/core_ext/math.rb /^ def self.roots_of_cubic_function(a,b,c,d,with_complex = false)$/;" F class:Math
|
59
|
-
roots_of_quadratic_function lib/core_ext/math.rb /^ def self.roots_of_quadratic_function(a,b,c)$/;" F class:Math.roots_of_cubic_function
|
60
|
-
roots_of_quartic_function lib/core_ext/math.rb /^ def self.roots_of_quartic_function(*args)$/;" F class:Math.roots_of_cubic_function
|
61
|
-
terms rdoc/Polynomial.html /^ <a name="terms"><\/a>$/;" a
|
62
|
-
terms= rdoc/Polynomial.html /^ <a name="terms="><\/a>$/;" a
|
63
|
-
test_calculation test/polynomial_test.rb /^ def test_calculation$/;" f class:TestPolynomial
|
64
|
-
test_degree test/polynomial_test.rb /^ def test_degree$/;" f class:TestPolynomial
|
65
|
-
test_derivative_functions_with_higher_degree test/polynomial_test.rb /^ def test_derivative_functions_with_higher_degree$/;" f class:TestPolynomial
|
66
|
-
test_derivative_of_linear_functions test/polynomial_test.rb /^ def test_derivative_of_linear_functions$/;" f class:TestPolynomial
|
67
|
-
test_equality test/polynomial_test.rb /^ def test_equality$/;" f class:TestPolynomial
|
68
|
-
test_extrema test/polynomial_test.rb /^ def test_extrema$/;" f class:TestPolynomial
|
69
|
-
test_extrema_with_slope_of_derivative_equal_to_zero test/polynomial_test.rb /^ def test_extrema_with_slope_of_derivative_equal_to_zero$/;" f class:TestPolynomial
|
70
|
-
test_initializer test/term_test.rb /^ def test_initializer$/;" f class:TestTerm
|
71
|
-
test_no_curve_and_no_inflection_points test/polynomial_test.rb /^ def test_no_curve_and_no_inflection_points$/;" f class:TestPolynomial
|
72
|
-
test_no_inflection_points test/polynomial_test.rb /^ def test_no_inflection_points$/;" f class:TestPolynomial
|
73
|
-
test_no_local_extrema test/polynomial_test.rb /^ def test_no_local_extrema$/;" f class:TestPolynomial
|
74
|
-
test_parsing test/polynomial_test.rb /^ def test_parsing$/;" f class:TestPolynomial
|
75
|
-
test_parsing_variable_omitted test/term_test.rb /^ def test_parsing_variable_omitted$/;" f class:TestTerm
|
76
|
-
test_parsing_with_default_coefficient_equal_to_one test/term_test.rb /^ def test_parsing_with_default_coefficient_equal_to_one$/;" f class:TestTerm
|
77
|
-
test_parsing_with_default_exponent_equal_to_one test/term_test.rb /^ def test_parsing_with_default_exponent_equal_to_one$/;" f class:TestTerm
|
78
|
-
test_parsing_with_standard_format test/term_test.rb /^ def test_parsing_with_standard_format$/;" f class:TestTerm
|
79
|
-
test_roots_biquadratic_equation test/math_test.rb /^ def test_roots_biquadratic_equation$/;" f class:TestMath
|
80
|
-
test_roots_for_constant_functions test/math_test.rb /^ def test_roots_for_constant_functions$/;" f class:TestMath
|
81
|
-
test_roots_for_cubic_functions test/math_test.rb /^ def test_roots_for_cubic_functions$/;" f class:TestMath
|
82
|
-
test_roots_for_cubic_functions_one_real_all_equal test/math_test.rb /^ def test_roots_for_cubic_functions_one_real_all_equal$/;" f class:TestMath
|
83
|
-
test_roots_for_cubic_functions_with_complex test/math_test.rb /^ def test_roots_for_cubic_functions_with_complex$/;" f class:TestMath
|
84
|
-
test_roots_for_linear_functions test/math_test.rb /^ def test_roots_for_linear_functions$/;" f class:TestMath
|
85
|
-
test_roots_for_quartic_functions test/math_test.rb /^ def test_roots_for_quartic_functions$/;" f class:TestMath
|
86
|
-
test_roots_quadratic_functions test/math_test.rb /^ def test_roots_quadratic_functions$/;" f class:TestMath
|
87
|
-
test_roots_without_term_with_exponent_of_zero test/math_test.rb /^ def test_roots_without_term_with_exponent_of_zero$/;" f class:TestMath
|
88
|
-
test_to_s test/polynomial_test.rb /^ def test_to_s$/;" f class:TestPolynomial
|
89
|
-
test_two_inflection_points test/polynomial_test.rb /^ def test_two_inflection_points$/;" f class:TestPolynomial
|
90
|
-
to_s lib/polynomials.rb /^ def to_s$/;" f class:Polynomial
|
91
|
-
to_s lib/term.rb /^ def to_s$/;" f class:Term
|