Feature #10072 ยป implement_Vector.basis.patch
| NEWS | ||
|---|---|---|
| * Vector | ||
|   * New methods: | ||
|     * Vector.basis Creates a standard basis +n+-vector. | ||
|     * Vector#@+ and Vector#@- . | ||
| * Method | ||
| lib/matrix.rb | ||
|---|---|---|
| # To create a Vector: | ||
| # * Vector.[](*array) | ||
| # * Vector.elements(array, copy = true) | ||
| # * Vector.basis(n, k) | ||
| # | ||
| # To access elements: | ||
| # * #[](i) | ||
| ... | ... | |
|   end | ||
|   # | ||
|   # Creates a standard basis +n+-vector. | ||
|   # | ||
|   def Vector.basis(n, k) | ||
|     raise ArgumentError, "invalid n (#{n} for 1..)" if n < 1 | ||
|     raise ArgumentError, "invalid k (#{k} for 0..#{n - 1})" unless 0 <= k && k < n | ||
|     array = Array.new(n) {|i| i == k ? 1 : 0 } | ||
|     new convert_to_array(array, false) | ||
|   end | ||
|   # | ||
|   # Vector.new is private; use Vector[] or Vector.elements to create. | ||
|   # | ||
|   def initialize(array) | ||
| test/matrix/test_vector.rb | ||
|---|---|---|
|     @w1 = Vector[2,3,4] | ||
|   end | ||
|   def test_basis | ||
|     assert_equal(Vector[1, 0, 0], Vector.basis(3, 0)) | ||
|     assert_raise(ArgumentError) { Vector.basis(-1, 2) } | ||
|     assert_raise(ArgumentError) { Vector.basis(4, -1) } | ||
|     assert_raise(ArgumentError) { Vector.basis(3, 3) } | ||
|   end | ||
|   def test_identity | ||
|     assert_same @v1, @v1 | ||
|     assert_not_same @v1, @v2 | ||