Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
m1 = Matrix[[1,2,3],[4,5,6],[7,8,9]]m2 = Matrix[[1,2,3],[4,5,6],[7,8]]m1.row_.size # 3m1.column_size # 3 m2.row_size # 3m2.column_size # 3 (неправильно)m1.square? # truem2.square? # true (неправильно)Решить эту мелкую проблему можно, например, определив метод
rectangular?class Matrix def rectangular? arr = to_a first = arr[0].size arr[1..-1].all? {|x| x.size == first } endendМожно, конечно, модифицировать метод
square?column_sizenilДля вырезания части матрицы имеется несколько методов. Метод
row_vectorsVectorVectorcolumn_vectorsminorm = Matrix[[1,2,3,4],[5,6,7,8],[6,7,8,9]]rows = m.row_vectors # Три объекта Vector.cols = m.column_vectors # Четыре объекта Vector.m2 = m.minor(1,2,1,2) # Matrix[[6,7,],[7,8]]m3 = m.minor(0..1,1..3) # Matrix[[[2,3,4],[6,7,8]]К матрицам применимы обычные операции: сложение, вычитание, умножение и деление. Для выполнения некоторых из них должны соблюдаться ограничения на размеры матриц-операндов; в противном случае будет возбуждено исключение (например, при попытке перемножить матрицы размерностей 3×3 и 4×4).
Поддерживаются стандартные преобразования:
inversetransposedeterminantmathnКласс
Vector[]elementsсоруtruearr = [2,3,4,5]v1 = Vector[*arr] # Vector[2,3,4,5]v2 = Vector.elements(arr) # Vector[2,3,4,5]v3 = Vector.elements(arr,false) # Vector[2,3,4,5]arr[2] = 7 # теперь v3 - Vector[2,3,7,5].Метод
covectorv = Vector[2,3,4]m = v.covector # Matrix[[2,3,4]]Поддерживается сложение и вычитание векторов одинаковой длины. Вектор можно умножать на матрицу и на скаляр. Все эти операции подчиняются обычным математическим правилам.
v1 = Vector[2,3,4]v2 = Vector[4,5,6]v3 = v1 + v2 # Vector[6,8,10]v4 = v1*v2.covector # Matrix![8,10,12],[12,15,18],[16,20,24]]v5 = v1*5 # Vector[10,15,20]Имеется метод
inner_productv1 = Vector[2,3,4]v2 = Vector[4,5,6]x = v1.inner_product(v2) # 47Дополнительную информацию о классах
Matrixvectorri5.11. Комплексные числа
Стандартная библиотека
complexДля создания комплексного числа применяется следующая несколько необычная нотация:
z = Complex(3,5) # 3+5iНеобычно в ней то, что имя метода совпадает с именем класса. В данном случае наличие скобок указывает на то, что это вызов метода, а не ссылка на константу. Вообще говоря, имена методов не похожи на константы, и я не рекомендую начинать имена методов с прописной буквы, разве что в подобных специальных случаях. (Отметим, что имеются также методы
IntegerFloatМетод
imа = 3.im # 3ib = 5 - 2.im # 5-2iЕсли вас больше интересуют полярные координаты, то можно обратиться к методу
polar2 - Complex.polar(5,Math::PI/2.0) # Радиус, угол.В классе
ComplexIz1 = Complex(3,5)z2 = 3 + 5*Complex::I # z2 == z1После загрузки библиотеки
complexsinsinhtantanhехрlogsqrt
