ms_shnits

https://otvet.mail.ru/question/208404984

May 14th, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.47 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Collections.Generic;
  4.  
  5. /// <summary>
  6. /// вектор-столбец
  7. /// </summary>
  8. public class TVector : List<double>
  9. {
  10.     #region конструкторы
  11.     public TVector()
  12.     {
  13.     }
  14.    
  15.     public TVector(double[] elements)
  16.     {
  17.         this.AddRange(elements);
  18.     }
  19.     #endregion
  20.  
  21.     /// <summary>
  22.     /// превращаем оператор умножения в оператор скалярного произведения векторов
  23.     /// </summary>
  24.     public static double operator * (TVector V1, TVector V2) =>
  25.         V1.Zip (V2, (v1, v2) => (v1*v2)).Sum();
  26.    
  27.     /// <summary>
  28.     /// список значений вектора
  29.     /// </summary>
  30.     public override string ToString() => string.Join("\n", this);
  31. }
  32.    
  33.  
  34. /// <summary>
  35. /// матрица: трактуется как вектор-столбец векторов
  36. /// </summary>
  37. public class TMatrix : List<TVector>
  38. {
  39.     #region конструкторы
  40.     public TMatrix (double[,] elements)
  41.     {
  42.         for(var row = 0; row < elements.GetLength(0); row++)
  43.         {
  44.             TVector mrow = new TVector();
  45.             for(var col = 0; col < elements.GetLength(1); col++)
  46.                 mrow.Add(elements[row, col]);
  47.             this.Add(mrow);
  48.         }
  49.     }
  50.     #endregion
  51.    
  52.     /// <summary>
  53.     /// представляем результат умножения матрицы на вектор-столбец как вектор, состоящий из скалярных произведений
  54.     /// строк матрицы на вектор-столбец
  55.     /// </summary>
  56.     public static TVector operator * (TMatrix M, TVector V) =>
  57.         new TVector (M.Select((row) => (row*V)).ToArray());
  58.    
  59.     /// <summary>
  60.     /// список значений матрицы
  61.     /// </summary>
  62.     public override string ToString() => string.Join("\n", this.Select((row) => string.Join(" ", row)));
  63. }
  64.  
  65.  
  66. /// <summary>
  67. /// основная программа
  68. /// </summary>
  69. public class Program
  70. {
  71.     public static void Main()
  72.     {
  73.         TVector V = new TVector(new double[] {
  74.             1,
  75.             1,
  76.             1,
  77.             1,
  78.             1
  79.             });
  80.        
  81.         TMatrix M = new TMatrix(new double[,] {
  82.             { 1, 1, 1, 1, 1 },
  83.             { 2, 2, 2, 2, 2 },
  84.             { 3, 3, 3, 3, 3 },
  85.             { 4, 4, 4, 4, 4 },
  86.             });
  87.        
  88.         Console.WriteLine("Если матрицу");
  89.         Console.WriteLine(M);
  90.        
  91.         Console.WriteLine("умножить на вектор-столбец");
  92.         Console.WriteLine(V);
  93.        
  94.         Console.WriteLine("то получится");
  95.         Console.WriteLine(M * V);
  96.     }
  97. }
Add Comment
Please, Sign In to add comment