精华内容
下载资源
问答
  • 一、当向量个数大于维数时 ????????维向量组成的向量组,????<????时向量组线性相关 对应矩阵????(????)≤????????????(????,????),由????<????,则????(????)<????(向量个数),故向量组线性相关.维...

    一、当向量组 个数大于维数时

    𝑚个𝑛维向量组成的向量组,当𝑛<𝑚时向量组线性相关

    对应矩阵𝑟(𝐴)≤𝑚𝑖𝑛(𝑛,𝑚),由𝑛<𝑚,则𝑟(𝐴)<𝑚(向量个数),故向量组线性相关.维数小于个数,线性相关;维数大于个数,不一定(可能线性相关也可能线性无关)

    二、当向量组 个数等于维数时(通过行列式判断)

    当向量个数等于向量维数时,向量组线性相关的充要条件是该向量组构成的矩阵𝐴的行列式𝐴=0

    而向量组线性无关的充要条件是𝐴≠0

    三、当向量组 个数小于维数时(通过秩判断)

    当向量组的个数小于维数时候,设列向量组𝐴:𝛼1,𝛼2,...,𝛼m构成矩阵𝐴=𝛼1,𝛼2,...,𝛼𝑚,则向量组𝐴线性相关的充要条件是矩阵𝐴的秩小于向量个数𝑚,即𝑟(𝐴)<𝑚;向量组𝐴线性无关的充要条件是矩阵𝐴的秩等于向量个数𝑚,即𝑟(𝐴)=𝑚.

     

    展开全文
  • 在三空间中,两个向量的乘积(向量积,外积,乘积,区别于两个向量乘:内积,点积)表示两个向量的扭矩,而三个向量的混合积A×B·C,则表示由三个向量A,B,C所构成的平行六面体的面积。而且在混合积中A,B,C的...

    在三维空间中,两个向量的乘积(向量积,外积,乘积,区别于两个向量的数乘:内积,点积)表示两个向量的扭矩,而三个向量的混合积A×B·C,则表示由三个向量A,B,C所构成的平行六面体的面积。而且在混合积中A,B,C的位置是可以互换的(这个很容易证明),这也符合我们的经验。那么问题来了?
    1)3个或者N>3个三维向量相乘如何定义?A×B×C×D....因为A×B是有定义的,A×B是向量,那么只要继续乘就可以了,这也说明3维向量相乘,向量个数不是问题;
    2)向量个数不是问题,那4维向量的两个向量相乘呢?

    设A=(a1,a2,a3,a4),B=(b1,b2,b3,b4) A*B=(x1,x2,x3,x4)则满足如下方程组:
     ① A·(A*B)=0
     ② B·(A*B)=0
     ③ |A*B|=|A|*|B|sinθ。
    这是一个4元二次方程组,但只有3个方程组,显然解不是一个。这说明A*B在4维空间,如果按垂直来定义,无法唯一确定,其结果是一个面(受限的)。
    类似的,扩展到n维空间,方程组还是只有3个。结果是n-2维体(面)(受限于方程)。

    下面推广n维向量的
    n-1个向量积:A1*A2*...A(n-1)·;
    混合积:A1*A2*...A(n-1)·An.


    /// <summary>
            /// 向量积
            /// </summary>
            /// <param name="A"></param>
            /// <param name="B"></param>
            /// <returns></returns>
            public static TVector Mul(TVector A, TVector B)
            {
                if (A.Count == B.Count && B.Count == 3)
                {
                    var theI = A[1] * B[2] - A[2] * B[1];
                    var theJ = -(A[0] * B[2] - A[2] * B[0]);
                    var theK = A[0] * B[1] - A[1] * B[0];
                    TVector theV = new TVector(theI, theJ, theK);
                    return theV;
                }
                else
                {
                    throw new Exception("现仅支持3分量.");
                }
            }
            /// <summary>
            /// n维向量的n-1个向量的乘积,n>3
            /// </summary>
            /// <param name="Vectors">向量组</param>
            /// <returns></returns>
            public static TVector Mul2(params TVector[] Vectors)
            {
                if (Vectors==null || Vectors.Length < 2)
                {
                    throw new Exception("参数错误必须是n维向量n-1个向量模式");
                }
                var theN = Vectors[0].Count;
                if (theN != Vectors.Length + 1)
                {
                    throw new Exception("参数错误必须是n维向量n-1个向量模式");
                }
                var theA = new double[theN, theN];
                for (int i = 0; i < theN; i++)
                {
                    theA[0, i] = 1; 
                }
                for (int i = 0; i < theN; i++)
                {
                    for (int j = 0; j < Vectors.Length; j++)
                    {
                        theA[j + 1, i] = Vectors[j][i];
                    }
                }
                //按第一行展开求代数余子式,并计算行列式.(1,j)的代数余子式就是所求向量第j个分量的值.
                var theRetA = new double[theN];
                for (int j = 0; j < theN; j++)
                {
                    var theA1 = LinearAlgebra.GetDeterminantMij(theA, 1, j + 1);
                    var theSign = LinearAlgebra.CalcDeterMijSign(1, j + 1);
                    theRetA[j] = theSign * LinearAlgebra.CalcDeterminant(theA1);
                }
                return new TVector(theRetA);
            }
            /// <summary>
            /// n维向量的n个向量的混合积A1×A2.....An-1·An
            /// </summary>
            /// <param name="Vectors">向量组</param>
            /// <returns></returns>
            public static double Mul3(params TVector[] Vectors)
            {
                if (Vectors == null || Vectors.Length < 2)
                {
                    throw new Exception("参数错误必须是n维向量n-1个向量模式");
                }
                var theN = Vectors[0].Count;
                if (theN != Vectors.Length)
                {
                    throw new Exception("参数错误必须是n维向量n个向量模式");
                }
                var theA = new double[theN, theN];
              
                for (int i = 0; i < theN; i++)
                {
                    for (int j = 0; j < Vectors.Length; j++)
                    {
                        theA[j, i] = Vectors[j][i];
                    }
                }
                return LinearAlgebra.CalcDeterminant(theA);
            }
            /// <summary>
            /// 向量混合积A×B·C
            /// </summary>
            /// <param name="A"></param>
            /// <param name="B"></param>
            /// <returns></returns>
            public static double Mul(TVector A, TVector B, TVector C)
            {
                if (A.Count == B.Count && B.Count == 3)
                {
                    double[,] theA = new double[3, 3];
                    for (int i = 0; i < 2; i++)
                    {
                        theA[0, i] = A[i];
                        theA[1, i] = B[i];
                        theA[2, i] = C[i];
                    }
                    return LinearAlgebra.CalcDeterminantAij(theA);
                }
                else
                {
                    throw new Exception("现仅支持3分量.");
                }
            }

    暂时研究到此,后面有时间继续研究。
    注意:算法中用到的函数参见Mymathlib系列.

    后记:N维空间中(N>3)的两个向量相乘,如果按照三维空间中的向量积的定义方式,往往得不到唯一的积向量,对于大于三维的空间,不好获得直观的看法。我们不换假设在平面上有一条线A,另一条线B与之垂直,如果B的模确定,则B是确定的,但如果是三维空间,则满足与A垂直且模一定的线段,就不止一条了,而是一个圆。那么在4维空间中,对于A*B,满足向量积定义的向量也不是唯一的。
    
    展开全文
  • 我们对两个向量 a[N]和b[N] 相加, 结果保存到C[N]数组处。 传统的C代码如下: void add(int *a, int *b, int *c) { int tid = 0; // this is CPU 0, so we start at zero while(tid ) { c[tid] = a[tid] + b...

    当我们对两个向量 a[N]和b[N] 相加, 结果保存到C[N]数组处。  传统的C代码如下:

    void add(int *a, int *b, int *c) {
        int tid = 0; // this is CPU 0, so we start at zero
        while(tid < N) {
            c[tid] = a[tid] + b[tid];
            tid++;
        }
    }
    上述代码是在CPU上执行。  当然, 只有一个CPU, 这个CPU一次只能错做数组的一个下标的值相加。
    试想, 如果假如我们的系统是multiCPUs 或者多个CPU核的时候, 具体的, 我们假设我们有两个核。 现在我们想利用好这个资源, 对其进行向量的相加。 此时我们需要写一个并行的程序。 我们可以让一个核执行数组偶数索引的相加, 从tid = 0 开始, 另一个核对数组奇数索引相加, 从tid = 1开始。 那么我们可能有如下两份代码:

    CPU core 1执行:

    void add(int *a, int *b, int *c) {
        int tid = 0; // this is CPU 0, so we start at zero
        while(tid < N) {
            c[tid] = a[tid] + b[tid];
            tid += 2;
        }
    }
    CPU core 2 执行:

    void add(int *a, int *b, int *c) {
        int tid = 1; // this is CPU 0, so we start at zero
        while(tid < N) {
            c[tid] = a[tid] + b[tid];
            tid += 2;
        }
    }


    正常情况下, 我们开的线程数都是大于数组的大小的数目的, GPU程序如下:

    __global__ void add(int *dev_a, int *dev_b, int *dev_c) {
        int tid = blockIdx.x; // handle the data at this index
        if(tid < N) {
            c[tid] = a[tid] + b[tid];
        }
    }

     由于一个GPU所能启动的线程数目是一定的。 所以加入我们的数组数目远远大于我们启动的线程的数目, 我们需要执行更改GPU的代码。 如下:

    __global__ void add(int *dev_a, int *dev_b, int *dev_c) {
        int tid = blockIdx.x; // handle the data at this index
        if(tid < N) {
            c[tid] = a[tid] + b[tid];
            tid += blockDim.x * gridDim.x;
        }
    }
    分析:

    tid += blockDim.x * gridDim.x , 其中blockDim.x * gridDim.x就是我们开的线程的总的数目。 这种情况下, 一般是我们开的线程数目小于数组中元素的个数N.  注意, 一个线程只能做一个数组元素的相加。 一旦线程0 完成了对 a[0]和b[0]的相加, 我们不想让他闲下来, 而是让让这个线程去做0 + blockDim.x * gridDim.x 的相加。  一次类推, 线程1 。。。, 直至这N个元素全部相加完成。

    不难看出, tid + 开的总的线程数 能够解决开的线程数目小于work数目的难题。 那就是前面的线程在做完自己的work后, 去做其他的work了。



    展开全文
  • 用DLX汇编语言实现两浮点数组的加法,并分析流水线实现
  • 想问一下PCA算出来的特征向量是和样本属性的维数一样,因为主成分是原来样本属性的线性组合,那么KPCA求出来的特征向量(利用核函数),为什么维数等于样本呢?
  • 矩阵线性无关的特征向量个数与矩阵的秩的关系

    万次阅读 多人点赞 2014-12-12 00:56:59
    助教姐姐近来发烧在宿舍躺了两天,现在终于满血复活了!再来絮叨一下今天这好玩的问题。 先来复述一下这两概念的含义。...而我们把所有n维向量经过这线性变换A的所有像组成的集合称为这线性变换值域的维数。也

    助教姐姐近来发烧在宿舍躺了两天,现在终于满血复活了!再来絮叨一下今天这个好玩的问题。

    先来复述一下这两个概念的含义。矩阵的秩,可以看做是这个矩阵代表的线性变换值域的维数。详细来说,一个n维的矩阵A代表了一个n维的线性变换,这个线性变换A能把每一个n维向量变换为一个新的n维向量(当然这两个向量可能是相等的)。而我们把所有n维向量经过这个线性变换A的所有像组成的集合称为这个线性变换值域的维数。也就是说,一个矩阵的秩越大,它的像空间的维数就越大。

    而特征值和特征向量的概念大家就更加熟悉了。如果一个线性变换作用在一个向量上,只改变了它的长度不改变它的方向,那这个向量就是这个线性变换的特征向量,而长度改变的比例就是特征值。而特征值的大小也有其意义,特征值越大,说明矩阵在对应的特征向量方向上的包含的信息量就越多。在实际应用中,往往会对包含信息量较小的方向来做降维处理。

    所以我们可以看到,矩阵特征值(特征向量)的个数和矩阵的秩并没有什么联系!可能大家都不太愿意接受这个事实,但实际上就是这个样子的:D

    如果放在Jordan标准型的概念下来考虑就是这样的:

    代数重数:对应某一个特征值的Jordan块的阶数之和

    几何重数:对应某一个特征值的Jordan块的个数

    矩阵的秩:n减去0这个特征值对应的Jordan块的个数

    我们不仅可以由此看到几何重数一定小于等于代数重数,也能看出所有线性无关的特征向量的个数一定小于等于所有特征值(含重数)的个数。

    回到咱们今天的主题,为了让大家更确信矩阵线性无关的特征向量个数与矩阵的秩是无关的,我在下面举了几个例子,大于等于小于的情况都有。


    转眼就写到熄灯了,大家晚安啦!

    展开全文
  • 数组,向量和矩阵以及空间的维数

    千次阅读 2019-02-22 23:48:26
    数组,向量和矩阵以及空间的维数1、Python列表和Numpy数组的区别:2、Numpy数组和矩阵的区别:3、matlab关于矩阵的维数的解释 1、Python列表和Numpy数组的区别: 此处参考了 ...
  • Python提取数字图片特征向量

    万次阅读 2017-11-10 15:40:56
    引言 在机器学习中有一种学习叫做手写数字识别,其主要功能就是让机器识别出图片中的数字,其步骤主要包括:图片特征提取、将特征值点阵转化为特征向量、进行模型训练。...我们拿到一种图片的时候,这张图片可能是多
  • 本题要求编写程序,计算两平面向量的和向量。 输入格式: 输入在一行中按照“x1,y1,x2,y2​​ ”的格式给出两平面向量v​1=(x1, y1)和v​2=(x2, y2)的分量。 输出格式: 在一行中按照(x, y)的格式输出...
  • 求两维向量的夹角(带正负)

    千次阅读 2020-08-04 16:08:37
    空间中两个向量会有一条公垂线(向量叉乘可以求得),以公垂线为轴,将第二个向量旋转一角度,使其与第一个向量平行.这角度即为两向量的夹角.因为向量叉乘所得到的公垂线是一有方向的向量,假如你用右手握住公...
  • 本文介绍了向量的定义、向量的模、负向量、单位向量、零向量以及向量加减法的三种实现方法。
  • 多维(三)矩阵向量运算-超强可视化1、高维矩阵可视化一2、高维矩阵运算 高维矩阵或者向量的运算,是一困扰着我很久的问题;在NLP里面经常就会碰到三,四向量运算,矩阵相乘时相当头痛...
  • 线性相关性、基、维数

    千次阅读 2014-07-03 21:49:12
    首先在定义这几名词之前,我们要知道这几词:线性相关(linear independence)、基(basis)、维数(dimension)是争对什么量的,比如我们只会说一组向量(a bunch of vectors)线性无关或线性相关,不会说矩阵...
  • 对一维向量中值滤波

    千次阅读 2012-03-11 14:18:46
    function flux_out = meanfilter(lamda, flux, w) % Author:shizhixin % Email:szhixin@gmail.com ...% Date:2012-03-11 % Function:对一维向量中值滤波 % Note:输入lamda,flux必须维度一致,并且为一
  • 最重要的是矩阵的秩rr,在消元过程中得到主元的个数是引入了这个数。等价的,最终矩阵UU有rr的非零行,这定义是从计算中给出的,但是就这样结束不太妥当,因为这样的话秩给我们简单而直观的印象
  • 浅析连续子向量,子数组和(一,二)问题 By 钟桓  9月 16 2014 更新日期:9月 16 2014 文章目录 ...1. 最大连续子向量和 ...输入是具有n浮点数的向量x,输出这个向量的任何连续子向量中的最大和
  • 向量 - 向量叉乘 向量点乘

    千次阅读 2013-07-04 01:00:55
    向量 - 向量叉乘 向量点乘 2010年07月28日 星期三 14:33 向量(Vector) ...向量的定义包含方向和一个数(长度)。在二空间中,一个向量可以用一对x和y来表示。例如由点(1,3)到(5,1的
  • 本文是Gilbert Strang的线性代数...学习什么是”线性相关性“,“线性无关”,什么是由向量组所“生成”的空间,什么是向量空间的“基”,什么是子空间的“维数”。 一、知识背景 Ax=b,Am×n,其中m 二、向
  • 标量,向量,矩阵与张量

    千次阅读 2018-08-28 08:29:39
    标量,向量,矩阵与张量 ...我们需要明确表示向量中的元素时,我们会将元素排列成一方括号包围的纵柱:   我们可以把向量看作空间中的点,每元素是不同的坐标轴上的坐标。   3、矩阵 矩阵是二...
  • 求解三空间中两向量之间的夹角

    万次阅读 2019-08-19 11:39:19
    问题描述:已知三空间中的三点P1P_1P1​,P2P_2P2​和P3P_3P3​,求向量P1P2→\overrightarrow{P_1P_2}P1​P2​​和P1P3→\overrightarrow{P_1P_3}P1​P3​​之间的夹角,要求必须能够计算出[0, 2π\piπ)之间的...
  • 则与这两个向量都成钝角的向量只能落在某(至多)四分之一空间中。而从这四分之一空间中至多再能取两互成钝角的向量。 如果觉得难理解的话:可以把空间想成八块,上面四象限,下面四象限,这样稍微比...
  • 支持(Support)、向量(Vector)、机器(Machine),这三毫无关联的词,硬生生地凑在了一起。从修辞的角度,这合成词最终落脚到”Machine”上,还以为是一种牛X的机器呢?实际上,它是一种算法,是效果最好的分类算法...
  • 维向量的叉乘判断凹凸多边形

    千次阅读 2014-09-02 01:10:34
    向量叉乘判断凹凸多边形的问题 我在做一道题,题目的意思是按照逆时针的顺序给几点的坐标,求这几点围成多边形是凹的还是凸的. 我在网上看到了一公式: 平面上三点:p1(x1,y1),p2(x2,y2),p3(x3,y3) s...
  • 向量叉乘

    万次阅读 多人点赞 2017-04-19 15:00:02
    向量叉乘公式以及推导: 向量叉乘几何意义:
  • 向量点积、叉积; 点到线的距离及点到面的距离
  • 特征值和特征向量——在矩阵的数值计算中不可或缺的一环,但大多数人仅满足于套用公式 f(λ)=∣λE−A∣f(\lambda)=\mid \lambda E-A\midf(λ)=∣λE−A∣ 止步于粗浅地求出相应的数值和向量. 在笔者看来未免太过...
  • 个向量的旋转矩阵与四元素

    千次阅读 2019-01-18 09:10:44
    怎么计算两个向量间的夹角呢? 这里主要分两种情况,对于二维向量和三维向量来分别讨论。 1. 二维向量维向量的情况相对简单,根据向量间的点乘关系 v1⋅v2=||v1||||v2||cosθ 可以得到: θ=acos(v1⋅v2/|...
  • 基和维数的概念

    千次阅读 2008-04-10 11:07:00
    维数是针对一个向量集,而不是针对单个向量的落在平面上的全体向量维数是2,尽管他们可能有N分量很多人认为向量分量是N,维数就是N,这是错误的一基是一个向量集,它是线性无关,且空间中任何向量都可以表示为基...
  • 【ML】支持向量机(SVM)从入门到放弃再到掌握

    万次阅读 多人点赞 2018-08-23 16:46:26
    朋友,你通过各种不同的途经初次接触支持向量机(SVM)的时候,是不是会觉得这东西耳熟能详,感觉大家都会,却唯独自己很难理解? 每一次你的老板或者同仁让你讲解SVM的时候,你觉得你看过这么多资料,使用过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,427
精华内容 22,170
关键字:

当向量个数大于维数