微信之艳遇在线观看:高手请进,关于matlab函数执行过程的问题!?

来源:百度文库 编辑:中科新闻网 时间:2024/04/27 22:51:37
for k=1:(n-1)
a((k+1):n,(k+1):(n+1))=a((k+1):n,(k+1):(n+1))-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1));
a((k+1):n,k)=zeros(n-k,1);
end
这是用gauss消去解线性方程组的部分matlab程序。因为我是一个初学者,对程序的执行过程很是不理解,还希望高手赐教。
我想问,假设说n=3。那么for循环是如何执行的,是先运算出a(2,2),a(2,3),a(2,4)然后再计算出a(3,2),a(3,3),a(3,4)吗?还是另外的执行方式?我想问的是程序是怎么解决变量k的增长问题的?

用字母验证就可以看出来了啊
a=sym('[A B C D;E F G H;I J K L;M N O P]')
n=3
for k=1:(n-1)
a((k+1):n,(k+1):(n+1))=a((k+1):n,(k+1):(n+1))-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1))
a((k+1):n,k)=zeros(n-k,1)
end

运行结果:
a =
[ A, B, C, D]
[ E, F, G, H]
[ I, J, K, L]
[ M, N, O, P]

n =3

a =
[ A, B, C, D]
[ E, F-E/A*B, G-E/A*C, H-E/A*D]
[ I, J-I/A*B, K-I/A*C, L-I/A*D]
[ M, N, O, P]

a =

[ A, B, C, D]
[ 0, F-E/A*B, G-E/A*C, H-E/A*D]
[ 0, J-I/A*B, K-I/A*C, L-I/A*D]
[ M, N, O, P]

a =

[ A, B, C, D]
[ 0, F-E/A*B, G-E/A*C, H-E/A*D]
[ 0, J-I/A*B, K-I/A*C-(J-I/A*B)/(F-E/A*B)*(G-E/A*C), L-I/A*D-(J-I/A*B)/(F-E/A*B)*(H-E/A*D)]
[ M, N, O, P]

a =

[ A, B, C, D]
[ 0, F-E/A*B, G-E/A*C, H-E/A*D]
[ 0, 0, K-I/A*C-(J-I/A*B)/(F-E/A*B)*(G-E/A*C), L-I/A*D-(J-I/A*B)/(F-E/A*B)*(H-E/A*D)]
[ M, N, O, P]

是先运算出a(2,2),a(2,3),a(2,4)然后再计算出a(3,2),a(3,3),a(3,4)。参考一下高斯消去法的计算过程,确实是一行一行消的。
for循环的执行过程是先令k=1,执行循环中的语句,然后k=k+1,再执行一次循环中语句,反复如此,直至k=n-1。
不知道有没有说明白。