0.导言

矩阵论真难啊QaQ,做个笔记,以哈工大严质彬老师的讲解为例,很推荐,讲的非常不错~

传送门:矩阵论_哔哩哔哩_bilibili

1.线性空间与线性映射

给定非空集合V和域F,若存在映射:

则称为V上的加法;

若存在映射:

则称为V上的数乘。

1)注1:

域:是一个系统,其中定义了两种运算-加法和乘法,若这两个运算在这个系统上满足一些比较好的性质,是的+的逆运算-可以在该系统上能进行,*的逆运算/也可以在该系统上进行,则称该运算系统为域。换句话说,域是一个满足+、-、*、/四种运算的系统。

举例:

1.所有非负整数集合,可以满足+和*,即两个非负整数经过+和*之后还是一个非负整数,但是-可能会产生负数,/可能会产生分数,因此这就不能称之为一个域。

2.所有整数集合Z,可以满足+、-和*,但是满足不了/。

3.有理数集合Q,我们知道任何两个整数的比就是有理数,因此在有理数集合上/也封闭了。该运算系统就是一个域(值得0作为分母时除法无意义,但不在我们的考虑范围内)。

4.实数域R

5.复数域C

上面例子告诉我们,实际上域的要求就是运算封闭,即运算后的结果仍然在这个集合规定的范围内。

2)注2:

上述的X表示的是集合之间的笛卡尔积,而不是乘法。对笛卡尔积的定义如下:

我们存在两个集合,则

笛卡尔积是一种带顺序的运算,即

3)映射:

映射就是代表着我们可以讲某一集合上的元素通过某一种变化变成另一个集合上的元素,可能存在维度变化。即原始的n维向量经过映射变为了m维向量。因此我们定义映射如下:

另一种映射记号:

->表示的是集合之间的映射,而|->是针对单个元素来说的映射。

举个例子:假设我们存在映射 f=sin(.),那么

现在我们回过头来看我们上面的定义

给定非空集合V和域F,若存在映射:

则称为V上的加法。

也就是说我们从V中集合取两个元素,经过一种映射后,得到另一个仍旧属于V的元素,我们称这个运算为集合V上的加法。

若存在映射:

则称为V上的数乘。

也即是所我们从集合V中取一个元素,从数域F中取一个元素,经映射后得到一个仍旧属于V的元素,就称这个运算为集合V上的数乘。

这里的概念一定要理解并且接受,因为整个矩阵论会颠覆我们对传统运算的认知,后面我们会大批重新定义我们以前见过的一些运算;所有的运算都是人为规定的,因此我们重新在不同的域上定义运算的具体方式也未尝不可呀~

4)线性空间

当我们上述的加法和数乘满足通常的运算规则,则称V关于加法和数乘法构成F上的线性空间。有时候线性空间也被称之为向量空间,V中的元素有时也称为向量

通常的运算规则:以下使用+和*替代符号

关于加法的部分

        1)加法交换律        

        2)加法结合律        

        3)有零元        存在e∈V,满足    

        4)有负元        对任意v∈V,存在a∈V,使得    记 a = -v

关于数乘法的部分

        5)分配率A        

        6)分配率B        ,注意等式两边的加法是不一样的,左边的加法是数域F中的加法,右边的是V集合中定义的加法

        7)与数域F中元素的乘法关系        ,注意等式两边乘法也不同,左边是数域F中的乘法,右边是V集合中的元素与数域中的元素的数乘

        8)与数域F中1的关系        

注:V实际上是一个集合,而我们之所以将其称之为空间是为了通过以几何的方式来理解它。

严老师课外话题:数乘法为什么写在右边而不是在左边

以列向量的数乘法为例,将数字写在右边就可以将数乘法理解为矩阵乘法。

也就是说,对列向量来说,数乘法的数应写在右边,而对于行向量则应该写在左边。通过这种方式将数乘法和矩阵乘法看成同一个东西。

例1:数域F上的标准线性空间

加法:

数乘法:

从一个数域出发,按照如上方式,我们可以造一个标准线性空间

现在我们来证明这是个线性空间:验证上述8条运算律即可

1)加法交换律        

                

        2)加法结合律

                

        3)有零元

                设,则有

                        

        4)有负元

                设,则有

                        

        5)分配率A        

        6)分配率B

                

        7)与数域F中元素的乘法关系

                

        8)与数域F中1的关系

                

例2:将几何空间作为线性空间(因此才会将线性空间称之为空间,将线性空间中的元素称为向量)

步骤一:定义

定义集合:V={所有有向线段的全体}

注:在有限线段的定义中,我们只考虑线段的长度和方向,不考虑起点和终点,即经过评议后可以重合的视为同一个有向线段。

定义数域:F=实数域R

定义加法:平行四边形法则

当然也可以用等价的三角形法则--

定义数乘法:使得线段同向或者反向伸缩

步骤二:验证8条运算律

        1)加法交换律       

        2)加法结合律 (A+B)+C=A+(B+C)  利用三角形法则进行证明

        3)有零元

                我们知道,0向量与任意向量平行,并且长度为0,因此对于几何空间中任意一个有向线段,加上0向量后不发生任何变化。

        4)有负元

                取与A向量同长度却反向的有向线段为-A,则二者的和为A+(-A),以图可以表示为如下形式:

可以看到A加上它的负元后,得到的新向量的起点和终点一致,即为0向量。

        5)分配率A (A+B)*k=A*k+B*k(以k=2为例)

A=OE,延长OE两倍至点F,过F做FD//EC,交OC的延长线与点D,因FD//EC,因此有三角形相似:OEC~OFD。于是有OC//OD=EC//FD=OE//OF=1/2。因而有:

(A+B)*2=(OE+EC)*2=OC*2=OD

A*2+B*2=OE*2+EC*2

又因为FD//EC,且|FD|=2*|EC| (这里笔者用||表示取长度),我们对V的定义中规定只看方向和长度,不关注起点和终点,因此有EC*2=FD,因而上式可以转化为:

A*2+B*2=OE*2+EC*2=OF+FD=OD

故可证明(A+B)*2=A*2+B*2

        6)分配率B 

                对于一个有向线段A来说,是将A沿着原方向变为原来长度的倍,是将在的基础上沿着原方向增长,显然二者是等价的。

7)与数域F中元素的乘法关系

                对于一个有向线段A来说,A*(k*l)是将A沿着原方向变为原来长度的k*l倍,(A*k)*l是将A*k沿着原方向变为原来长度的l倍,显然二者是等价的。

        8)与数域F中1的关系

                很显然,对于任何一个有向线段A,A*1结果都是A本身。

例3:函数空间

步骤一:定义

V:

F:是一组函数的集合,F中的每一个向量值函数可以将一个从定义域I中的数映射为一个n维向量。

例如 ,那么属于它的一个向量值函数可以定义为如下

注意,这一个f只是F中的一个元素而已,而F是很多个f的集合。

I:函数作用的定义区间,如I=(0,1)

R:实数域

+:加法

*:数乘

步骤二:验证8条运算律

        1)加法交换律

                

        2)加法结合律

                

        3)有零元

,则有

                

        4)有负元

                设,则有

                

        5)分配率A

                

        6)分配率B

                

        7)与数域F中元素的乘法关系

                

        8)与数域F中1的关系

2.线性空间维数问题

定义:向量组及向量组拼成的抽象矩阵

        设V是F上的线性空间,V中的有限序列称为V中的一个向量组,向量组按顺序排成的矩阵称为向量组拼成的抽象矩阵

举个例子:,可定义抽象矩阵

2.1线性相关

线性相关性理论:我们上面的表示形式都是为了利用几何空间来研究线性空间,那么能不能类比几何空间的坐标系来得到一种东西,作为表示其他量的基础呢?

定义:向量组的线性相关性

(1)向量组线性相关的条件是,存在一组不全为0的数,使得

<=>

矩阵表述:存在,有

即线性方程组有非零解

(2)向量组线性无关,则下式当且仅当时成立

<=>

矩阵表述:对于,当且仅当时有

即线性方程组只有零解

2.2向量组之间的线性表示

A.向量的线性表示

        若存在,使得

        则称可由线性表示。

矩阵形式:

即非齐次线性方程组存在解(是不是零解无所谓,有解就行)。

B.向量组之间的线性表示

如果每一个都可由线性表示,则称可由线性表示。

矩阵形式:

        即上述矩阵方程有解(是不是零解无所谓,有解就行)。

C.线性表示的传递性(设下述向量的维度均为t*1)

可由线性表示,若可由线性表示,则可以推出可由线性表示。

证明:设

可由线性表示,则

上述矩阵方程有解。

同理,若可由线性表示,则

上述矩阵方程有解。

现在我们要证明可由线性表示,即

有解。

将(2)带入(1),有

得证。

D.向量组的极大线性无关子组(线性无关的生成子组)

子组:从母序列中挑出一个子序列(序列是要求在原来集合中可以不连续的)构成向量组,这个向量组就是原来母序列的子组。

设母组 子组

注1:对于一个向量组来说,如果交换两个向量的位置,那么交换前后就不是同一个向量组了,也就是说要考虑向量的顺序。

注2:这边只是对向量组的定义,没有其它约束,也就是说,可以两个位置的向量相同,也可以是有零向量。

极大线性无关子组:

1)是一个子组

2)满足线性无关

3)极大性:满足极大,即加一个任意向量都会变成相关

注:关于条件2)和3)可以做转化

2)+3)=2)+3‘),其中

3’)生成性:对于任意的,都可由线性表示

充分性:

因为极大性,所以我们可以知线性相关,即任意可由线性表示。

必要性:

因为生成性,所以任意可由线性表示,也就是说加一个任意向量都会变成相关,即证明了极大性。

证毕。

笛卡尔坐标系就是空间的生成子组。

命题:母组可由其极大线性无关子组线性表示。(生成性)

E.极大线性无关组的秩

同一个母组可以有多个极大线性无关子组,但是总归要有某种不变的东西,就是子组所有的向量个数,称之为极大线性无关子组的秩。

定理:向量组的极大线性无关子组不是唯一的,但是不同的的子组拥有的向量个数是唯一的。

证明:设母组为(记为A),从其中选取两个极大线性无关子组分别为(记为B),和(记为C),向量均为m*1维。

反证法:不妨设s<t,那么,由于是极大无关子组,因此可以表示母组,那么可知

有解(这个由极大无关子组的性质保证)

其中X的每一列有如下对应关系

同时,由于是满足的子组,因此一定有

有解(这个由母组和子组的关系保证)

[注]:一个简单的理解方式就是我们将对应到中相同的向量系数设置为1,其他设置为0。也就是说,母组一定可以表示子组。

带入则有

有解

引理:扁的齐次线性方程组必有非零解

由条件s<t,即Z是长扁型矩阵(行数小于列数),那么有BZ=C一定有非零解

从方程组角度看,行代表的是方程,列代表是的未知数,那么行数小于列数即等价于方程个数小于未知数个数,即为不定方程,即方程无法确定唯一的一组解,此处可以证明一下:用数学归纳法

1.当s=1,此时t>=2,即一个方程组,但有两个以上的未知数,即方程可以表示为如下形式

分情况讨论

A.a=0,可取x=1,y=0,z=0,...

B.a!=0,可取x=-b/a,y=1,z=0,...

2.假设s<=k成立,证s=k+1成立,此时t>=k+2

分情况讨论

A.若,则根据上述,可取解

B.若不全为0,则至少有一个不为0,不妨设,那么可利用高斯消元法使得,再交换第1行和第i行,那么也就是说,从第二行到第k+1行只有的约束,那么就正好对应了s=k时的情况,根据数学归纳法的假设,我们可知一定存在一组解。此时回代第一个方程,即

,则可以解出,即可证是有解的。

通过上面的努力,我们已经证得ZW=0存在非零解。我们可以对BZ=C两边同乘W,则有BZW=CW。我们上面已经证明,ZW=0存在非零解,那么我们就取那个非零解,则有BZW=B(ZW)=0,更进一步,我们得到,CW=0且W是非零向量,而CW的含义就是C的各个列向量(即从母组中取出的一个极大无关子组)按照W的各个分量进行线性组合,由于这些列向量满足线性无关,因此当CW=0时应有W=0,与条件矛盾,即s<t不成立。同理也可推s>t也不成立。

[注]:高斯消元法是同解变化,即消元前后解的结果不变。

定义:向量组的秩rank就是向量组的极大线性无关组所含有向量的个数,它的大小并不依赖于无关组的挑选方式。

2.3基与坐标

现在我们可以考虑如何将代数转换到几何空间中去了。在几何空间中,我们描述位置常用的是笛卡尔坐标系,那么在代数空间中我们也需要定义这样一套标准,称之为基。

定义:有限维线性空间的基、坐标

V是数域F上的线性空间,如果有正整数n以及V中的向量组,使得

1)向量组线性无关

2)生成性-任意一个,均可由线性表示。即

则称V是n维线性空间,向量组成为V的一个基(坐标系),称为沿着基的坐标向量,由基构成的矩阵叫做基矩阵。

[抽象向量]=[基矩阵][坐标向量]

注:线性空间的维数与构成线性空间的向量的维数不是一回事,前者等价于空间的基的秩,后者则说的是空间的每一个向量有多少个分量。

命题:有限维线性空间维数的唯一性

分别是V的两个基,则有n=m。

借助同一个母组的极大线性无关子组具有相同的向量个数来证明,要证极大线性无关子组,只要证

以下证明把V看成母组,则

1)是子组:因为这两个组都是从V中挑选出来的向量构成的,因此一定是是子组

2)线性无关:由于这两个组都是基,因此本身就满足线性无关

3)极大性-不便证明也可以转换成生成性:基的定义中包含了V中所有向量都可以用基来表示

因此这两个组都是母组V的极大线性无关子组,因此自然有n=m。

定理(基或者说坐标系)实现抽象线性空间到标准线性空间之间的一一对应。

,称的像,的原像。

1.满射-对任意的,存在,使得;即至少有一个,有

2.单射-若,有,则必有;对于一个

是确定的

也就是说,一一对应可以表述为如下形式

满射:对于中的任意一个元素,在中都可以找到其原像

单射:对于中的任何两个不同的元素,其在中的像也不可能相同。

方程解的角度:我们可以把看做一个方程,,则对于任意一个,方程都有且仅有一个解。

逆映射的角度:存在一种映射,满足

A.即是上的恒等映射

B.即是上的恒等映射

则称的逆映射。

由于一一映射理论的存在,我们可以考虑把一种数据从一种形式迁移到另一种形式下,再来研究他们的关系,即用熟悉的形式研究不熟悉的数据。

证明:

V是n维线性空间,是V的一个基

构建一个映射,用元素形式表述为

这里,是一个向量v在这组基下的坐标;即这里的映射为V中的向量映射成这个向量的坐标。

1.验证满射:对像找其原像,即任意一个,都至少能找到一个与之对应

不妨任取,则有

即任意一个n元数组都有资格成为坐标,对应的向量就是对这个基使用这个n元数组中与基向量对应的系数进行线性组合得到的向量。

2.验证单射:相同的像,他们的原像也相同

不妨设存在另一个,相同的像说明的坐标向量也是,那么现在就要证明

        采用反证法,不妨设,则

显然假设是错误的。

2.3.1 的标准基与一般基

标准基的标准基:

证明:

1.无关性:若,则

也即

故这组基向量线性无关。

矩阵角度:即要证只有零解

由于为单位矩阵,因此,又,故

 注:[1]标准基拼成的基矩阵是单位矩阵

        [2]单位矩阵的列向量组是标注基向量组

2.可表示性:对于任意的都可以写成标准基向量的线性组合

不妨设,则显然

矩阵角度:即要证有解

由于为单位矩阵,因此

注:任意向量在标准基下的坐标就是它自己

任何一个抽象的有限维线性空间,经过建立坐标系(找一组基),就可以同构于(一一映射)为坐标空间。

一般基构成基础的充要条件是向量组的秩(极大线性无关组所含向量个数)为n<=>向量组中的向量线性无关。

列秩=行秩=秩

行秩:行向量组的极大线性无关组所含向量个数。

列秩:列向量组的极大线性无关组所含向量个数。

证明:线性方程组Ax=b有解的充要条件是rank(系数矩阵)=rand(A)=rank(增广矩阵)=rank(A|b)

由于的一个基,因此秩应该与的标准基相同,为n,即m=n。

那么显然A是满秩方阵,(A|b)的大小为n*(n+1),因为行秩最大为n,故rank(A|b)<=n,而rank(A|b)>=rank(A)=n,因此有rank(A|b)=n=rank(A),因此方程组Ax=b有解。

现在我们从线性空间的角度看待方程组有解问题:求解就是求b向量沿着A的列向量组展开的坐标向量。

2.3.2 例:无限维空间

F[x]={f| f ∈ Func(F,F) 且 f 可写成多项式}

Func(F,F):表示函数空间,第一个F表示自变量从F中取值,第二个F表示因变量也落在F中。

Fn[x]={次数<n,以F中的数为系数的多项式}

F:数域

F[x]:数域F上的(系数全部来自于F)以x为未定元的多项式全体

Fn[x]:数域F上的(系数全部来自于F)以x为未定元的最高次数<n的多项式全体

多项式的全体构成的空间是线性空间:

A.对加法封闭

B.对数乘封闭

八条运算律验证:(多项式属于算式,算式一定符合这八条,笔者就不证了-。-)

        1)加法交换律

               

        2)加法结合律

                

        3)有零元

        4)有负元

                

        5)分配率A

                

        6)分配率B

                

        7)与数域F中元素的乘法关系

                

        8)与数域F中1的关系

为方便起见,我们将F取为实数域R,Rn[x]是n维的,但R[x]不是有限维的(我们称之为无限维)。

证明:Rn[x]是n维的,则可取"向量组"(也就是多项式组)

注:此处选取的是多项式函数而不是单独一个数,即上面的多项式组的每一个元素对应一种映射

是Rn[x]的一个基

1.无关性

即证如果,则

注:表示的是左端部分等于右端的0函数,即x代入任意的值,左边式子得到的结果都是0。

由定义,可以任意地代入n个值(此处给x代入的是值而不是函数),,有

根据范德蒙行列式的性质,有

因此X可逆,即,即

2.可表示性

对于任意f∈Rn[x],根据多项式的定义,有

证明R[x]不是有限维的,首先回忆如何证明Rn[x]是有限维的,实际上就是找到一组基。那么我们可以这样证明R[x]不是有限维的,对于R[x]中的任意一个向量组,都不是基,即要么不满足无关性要么无法表示任意的向量。

取一组"向量组",记为函数中的最高次,再取,可证明不能由这组向量线性表示,否则若

按照x的次数整理右端可得

于是可得

此处的0是常值0函数。

类似上面的推理,可以任取d+1个值带入给x,可证得所有的系数都为0,这显然与最后一个为-1的系数矛盾,因而不具有可表示性。

因而证明全体多项式构成的空间不是有限维空间。

注:向量是欧几里得空间对元素的叫法,但由于多项式空间是线性空间,因此我们也可以将它的元素叫做向量。

课外内容:如何从映射的角度理解加法

加法是一个映射,也就是一个二元函数,从集合中有顺序的取两个元素,也可以理解为从VxV的笛卡尔积集合中取一个元素,利用加法就可以算出另一个属于V中的元素,即定义如下:

例如:定义二元函数

这可以被视为一种映射

因此加法就是一个二元映射。

同理,数乘法也可以理解为是,F是数域。

矩阵论-线性空间与线性映射相关推荐

  1. 关于线性空间和线性映射

    在超分辨率重建过程中的图像块配对时,经常会提到非线性映射这么一个词,所以抽时间整理一下关于线性映射和非线性映射的相关概念. 为了搞清楚线性映射,首先得搞清楚线性空间,为了搞清楚线性空间,首先要知道数域 ...

  2. 矩阵论-线性空间的基与坐标,基变换坐标变换

    线性空间与线性变换 综述 1.1 线性空间 1.1.3 线性空间的基与坐标 1.1.4 基变换与坐标变换 综述 本系列博文主要总结学习矩阵论的心得笔记,参考数目<矩阵论>–张凯院:整个文章 ...

  3. 矩阵论-线性空间与线性变换(一)

    矩阵论刚开始学习的时候很抽象,感觉很多不懂,但是反复看了几遍定义后,得到了一些心得体会. 定义1.1 线性空间:线性空间在本科线性代数课中在最后的章节很简单的谈了一下,没想到矩阵论开头就是暴击,第一次 ...

  4. 矩阵分析L2 线性映射与线性变换

    一 . 线性映射和线性映射 1.定义 线性映射体现在一个向量空间中满足两个合向量的映射等于两个向量映射的和,以及数乘后的映射等于映射后的数乘 线性变换是基于线性映射的一种特例,也就是在自身空间的映射. ...

  5. 向量范数和矩阵范数的理解

    向量范数 今天来聊一聊机器学习矩阵论的相关知识--范数(Norm). 在学习机器学习基础算法的推导过程中,可以看到很多地方都应用到了这个范数.范数属于矩阵论的知识范围,可见数学基础的重要性. 机器学习 ...

  6. 矩阵篇(一)-- 向量范数与矩阵范数的认识

    最近学习了矩阵论,对范数相关知识进行了学习,而之前只是在论文和计算方法里提到1-范数.2-范数.∞\infty∞范数,下面我会从范数的定义,性质,以及范数的用途进行总结. 1 范数的物理意义 我们可以 ...

  7. 一对矩阵的相关性_矩阵分析学习笔记(1)

    线性空间与线性映射 一.线性空间的概念: 记实数域 为 , 复数域为 , 统称数域 .设有一非空 集合记为 , 对集合 中的元素定义二元加法运算和数乘运算.(二元加法运算和数乘运算是一种线性映射,集合 ...

  8. 不同范数下的余弦定理_什么是绝对矩阵范数?

    在介绍主题之前,先来谈一个非常重要的数学思维方法:几何方法 .在大学之前,我们学习过一次函数.二次函数.三角函数.指数函数.对数函数等,方程则是求函数的零点:到了大学,我们学微积分.复变函数.实变函数 ...

  9. 预备篇 I :范畴与函子

    拓扑是研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科.它只考虑物体间的位置关系而不考虑它们的形状和大小. 拓扑是集合上的一种结构. 拓扑英文名是Topology,直译是地志学,最早 ...

  10. 西安电子科技大学数统院601/871第一名学姐考研经验分享

    经验贴 一.本科背景: 我本科是天津双非一本的数学与应用数学专业.绩点3.7(总绩点4)四级460,六级452.这次考研是西安电子科技大学数学与统计学院的601/871专业. 二.选学校: 谈到985 ...

最新文章

  1. html选择按钮selected,HTML Option defaultSelected用法及代码示例
  2. 一文看懂当红Serverless:为何AWS、阿里云和腾讯云都在发力「无服务器架构」
  3. .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...
  4. JdbcPagingItemReader多线程的Step
  5. raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘
  6. 浅谈各种数据库连接池
  7. SAP CRM IPC and configuration page debugs
  8. Android开发之高德地图无法显示地图的原因
  9. 黄聪:WordPress动作钩子函数add_action()、do_action()源码解析
  10. MacOS启动台(launchpad)缺少应用软件图标
  11. 编写一个Servlet,实现统计网站被访问次数的功能
  12. java计算机毕业设计信用卡增值业务系统小程序用户端源码+mysql数据库+lw文档+系统+调试部署
  13. cot函数 java_java8、jdk8日期与字符串转化
  14. Unable to process Jar entry [org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration
  15. 易优cms uiarclist 文档列表可视化标签
  16. 基于中国航信Eterm开发
  17. oracle数据库uga中文全称,UGA的概念
  18. SAP中在 LMLCCS_UPDATEF02 LCL_DB 方法 get_normvector 头寸 A 中 RC 1 内部错误解决方法
  19. 信息系统服务器故障应急处理规程,医院信息系统故障应急预案43066
  20. 正能量系列]失业的程序员(四)

热门文章

  1. python实现Content-Type:application/octet-stream
  2. linux如何每30分钟执行指令,CentOS7设置定时任务 每隔30分钟执行一次命令
  3. 怀旧服服务器怎么调整显卡性能,魔兽世界怀旧服排队显卡问题太高怎么回事 显卡温度高解决办法...
  4. wine - qq无法显示图片头像
  5. 如何实现话费充值api接口?详细讲解源码
  6. position: sticky 详解
  7. 魅族手机安卓真机调试打开了开发者调试模式但是LogCat没有输出日志
  8. Access denied for user 'root'@'localhost'. Account is locked
  9. javascript 删除节点
  10. Win7右键没有“管理员取得所有权”选项的解决方法