[Matlab]科研中的心得(updating)

来源:互联网 发布:矩阵计算法则 编辑:程序博客网 时间:2024/05/22 12:19

1.

如果要验证一条很可能正确的定理是否正确,就使用符号化的变量,但是计算会很慢。

如果要验证一个不知道正不正确的定理,而且使用符号计算太慢时,带入具体数值验证,因为具体数值下成立是其必要条件。

如果要从这条已知正确的定理中出发,进行一些计算,那就要明确自己:已知什么?要求什么?即确定需要将那些符号数值化,哪些继续当做符号。在生成模拟数据的时候要注意数据的合理性。

2.

matlab中尽量不要使用诸如 f1 f2 f3 这样的变量,不利于用循环操作,尽量使用cell类型 f{i},比使用eval方便且直观。

3.

能整体操作就整体操作,能泛型的就尽量泛型,能用循环尽量循环。要衡量哪个代价更大,不要忽视后期改来改去的工作量。

比如 subs函数,使用一次能解决,就不要多次使用改起来也不好找,看的眼花。

4.

Matlab中将表达式中的符号变量换成数值之后是有误差的,如果参与计算的数值较大,可能绝对误差也比较大,要考虑相对误差。

5.

注释代码!不要低估以后你会用到这个函数的可能性和再次看懂所需要的时间。

6.

AX=0 使用svd,不要使用0\A,只能得到0。

7.

删除某一列的两种方法
在原矩阵删除,新建矩阵

8.

有时候显示值相等,真实值不一定相等,x=3.6000e+5,y=360000; x-y可能等于一个很小的数。

9.

[V,D]=eig(A,B)不要相信D中某一特征值的个数,有时候只有一个,但是也可能是多重特征值,可以使用rank(A-lamda×B)来检验,或者直接使用null()

10.

由字符型变量计算得到的结果很可能是字符型 

>syms x;

>a = x/x;

>class(a)

sym

11.

不要忽视数值化之后的损失,有时候很巨大

比如一个矩阵中如果有很大的数和相对很小的数,小的数就会被忽略,各种计算都会造成莫名其妙的影响,所以要尽量保证数的大小在一个量级上,比如使用归一化的方法。

12.

齐次坐标有时候不能归一,比如面积不变情况下的m,如果归一,就不再满足那个恒等式。

13.

rank(A'A) = r(A) 证明:http://zhidao.baidu.com/question/73231309.html

所以,A 是m x n , m>=n的时候 A'A 是 n x n,A'A的秩可能为n,即满秩; m<n时,A'A 的秩一定小于 n,即一定不满秩。

 

原创粉丝点击