Ejemplo n.º 1
0
        /// <summary>
        /// Generates diagonal Matriz
        /// </summary>
        /// <param name="diag_vector">column vector containing the diag elements</param>
        /// <param name="offset">Offset of matrix</param>
        /// <returns>Diagonal matrix</returns>
        public static Matriz Diag(Matriz diag_vector, int offset)
        {
            int dim = diag_vector.VectorLength();

            if (dim == 0)
            {
                throw new ArgumentException("diag_vector must be 1xN or Nx1.");
            }
            ////if (Math.Abs(offset) >= dim)
            ////    throw new ArgumentException("Absolute value of offset must be less than length of diag_vector.");

            Matriz m = new Matriz(dim + Math.Abs(offset), dim + Math.Abs(offset));
            dim = m.RowCount;

            if (offset >= 0)
            {
                for (int i = 1; i <= dim - offset; i++)
                {
                    m[i, i + offset] = diag_vector[i];
                }
            }
            else
            {
                for (int i = 1; i <= dim + offset; i++)
                {
                    m[i - offset, i] = diag_vector[i];
                }
            }

            return m;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Implements the dot product of two vectors.
        /// </summary>
        /// <param name="v">Row or column vector.</param>
        /// <param name="w">Row or column of other vector.</param>
        /// <returns>Dot product.</returns>
        public static Complex Dot(Matriz v, Matriz w)
        {
            int m = v.VectorLength();
            int n = w.VectorLength();

            if (m == 0 || n == 0)
            {
                throw new ArgumentException("Arguments need to be vectors.");
            }
            else if (m != n)
            {
                throw new ArgumentException("Vectors must be of the same length.");
            }

            Complex buf = Complex.Zero;

            for (int i = 1; i <= m; i++)
            {
                buf += v[i] * w[i];
            }

            return buf;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Generates diagonal Matriz
        /// </summary>
        /// <param name="diag_vector">column vector containing the diag elements</param>
        /// <returns>Diagonal matrix</returns>
        public static Matriz Diag(Matriz diag_vector)
        {
            int dim = diag_vector.VectorLength();

            if (dim == 0)
            {
                throw new ArgumentException("diag_vector must be 1xN or Nx1");
            }

            Matriz m = new Matriz(dim, dim);

            for (int i = 1; i <= dim; i++)
            {
                m[i, i] = diag_vector[i];
            }

            return m;
        }