高等数值分析_9月27号课程讲义

来源:互联网 发布:仿大牌的女装淘宝店 编辑:程序博客网 时间:2024/06/04 18:42

---------------------------------------------------------------------9月27号课程讲义----------------------------------------------------------------------------------

如果m 不等于k,意味着绝对值最大的元素不在当前行,就要做行交换,注意行交换很有意思,只有matlab可以这么做,实际上是赋值,就是两个行,等号右边取得是A矩阵的两行,第m行和第k行,等号左边也是两行,第k行和第m行,位置正好相反,然后把这个值赋给他,直接就这么赋值,如果用C语言怎么写,至少要有一行的缓冲区,别的变量,赋值给,临时变量,临时变量再赋过去。

除了做了行交换之外,p【what is p??】也得更改,因为p是记录排列顺序的,初始的时候是1到n,123…正常的顺序,然后做了一个行交换之后,p得对应两个元素,也得做行交换。

算乘子。i是从k+1到n的一维数组。A(i,k)是第k列的一部分,这部分要更新。要更新为原来的值除上主元。最终这个结果就是L矩阵的元素。

然后j = k+1到n,不但i等于一个数组,k也等于一个数组。

这就是一个部分主元的LU分解,改变的结果全部写入到原来矩阵A。

这个程序有一个需要注意的地方,这个命令不严谨,size(A)本身有返回数的,都返回到n里面,这有问题,实际上内部操作是要依次赋值的,先把A的行数赋值给n,然后把列数赋值给n,如果A不是一个方阵的话,n实际上是列数,最好应该先判断A是不是方阵。

还有要注意的地方是这块,用箭头【右边的箭头】指的地方,选完了主元之后,这个地方直接就是r,r就是他了,无所谓,A(m,k)不等于0,就执行后面的,问一下主元等于0怎么办?主元选完了之后,还是等于0,这一列最大的元素值还是等于0。A(r,r)=0,选完了之后,这全是0,说明消去已经成功了,消去目的就是把它消为0吗!最大也是为0,所以消去成功了,所以说出现0主元,并不一定说明LU分解会失败,最后解方程会有问题,最后解方程U矩阵会有0的,奇异的,说明原来A矩阵是奇异的,所以你要做的更完善,再加一个else,A(m,k)等于0,报出这是一个奇异矩阵。



原创粉丝点击