djh713 发表于 2008-8-27 11:56

这种迭代矩阵怎么编程呢

X为m×1列阵,为待求量,Y为m×1列阵为已知量,A为m×n矩阵,为已知量,迭代求解方程如下

X1(i)=Y1-A12*X2(i-1)-A13*X3(i-1)-A14*X4(i-1)-......-A1n*Xn(i-1)
X2(i)=Y2-A21*X1(i)-A23*X3(i-1)-.....-A2n*Xn(i-1)
X3(i)=Y3-A31*X1(i)-A32*X2(i)-A34*X4(i-1)-.....-A2n*Xn(i-1)
.
.
.
Xm(i)=Ym-Am1*X1(i)-Am2*X2(i)-......-Amn*Xn(i)

其中,X、Y、A后小写字母及数字为对应矩阵中的元素,括号中i为迭代次数。想求对应于不同迭代次数i时,不同的X值。自己编了但总是不对,错在迭代次数的选取上,希望各位帮忙写一下,或看看我的程序错在哪里,谢谢!

以下为我的程序,但结果是迭代次数只能取一样的值,与公式中不符,
Y=Ps;%已知量
X=repmat(0,M,1);    %给定X的初始值为0,


B=diag(diag(A));%取矩阵A的对角元素
A=A-B;%使矩阵A的对角元素置零
for t=1:T;%定义迭代次数
   X=Y-A*X;
    t
    X
end

sigma665 发表于 2008-8-27 13:01

迭代是先给定一个初值
然后后面计算出来的值根初值进行比较
相差不大,迭代完毕
相差很大,把新值做为初值
继续就算

迭代次数由两个数比较而决定
与迭代的方法有关
而不是自己选择的

djh713 发表于 2008-8-27 16:28

我的意思是对X的真值做逼近,Y值是X的一个计算值,X是要求的真值,X和Y之间有一定的关系,即可表示为以上所列式了,当迭代次数越大时,X越逼近真值,每次迭代的X值用上一次的新值做为初值进行。

sigma665 发表于 2008-8-27 18:06

回复 板凳 djh713 的帖子

建议找下迭代的书看看

messenger 发表于 2008-8-27 20:57

试试这个

for i=1:M
   X(i)=Y(i)-A(i,:)*X
end

djh713 发表于 2008-8-29 18:01

请教小西,我这个方程就是一个向真值的逼近,我现在不明白的是MATLAB中怎么编程可以使某元素的第N次逼近中可以取到小于其本身元素的第N次逼近的值及大于其本身元素第N-1次逼近的值。不知看迭代方面的书对此有何帮助。
hi messenger, thanksfor your help, but this program isn't correct, X(i) is an value of the matrix Xat the ith row, instead of the ith interation.

messenger 发表于 2008-8-29 18:26

回复 6楼 djh713 的帖子

对呀,迭代M次以后,不就有M个X(i)了吗?分别是,正好构成X列阵

[ 本帖最后由 messenger 于 2008-8-29 18:27 编辑 ]

kettyx 发表于 2008-8-29 20:02

To 楼主,应该是说算法的设计问题,而不是编程实现问题吧。
你的代码,我随便设置了初始数据运行了,么有语法问题。只不过,呵呵,X或许距离真值越来越远。

djh713 发表于 2008-8-31 12:24

程序是可以运行的,这没有问题,现在的问题是程序中的取值情况,即若我在第 i 次迭代中计算X3(X3为列阵X的第三行元素)的值时,对X4、X5、X6....等值我需取其第i-1次迭代的值,而对X1和X2则应取第i次迭代值,但现在的程序是对所有的元素均是取第i-1次迭代的值,这个问题程序怎么解决?
页: [1]
查看完整版本: 这种迭代矩阵怎么编程呢