資源簡介
雅可比迭代C++實現,包括雅可比迭代介紹和程序注釋

代碼片段和文件信息
/*
-----------------------------------------------
此方法的局限:
1:n?*?n?階方陣?,?程序限制?
2:aii?=?0??是充分條件,不知道是不是必要?
3:|A|!=0??說明只有一個解?
?假設有如下方程組:
?Ax=b
?用Jacobi迭代法求解方程組的解
方法:將A分裂為A=D-L-U,等價的迭代方程組為x=Bx+f。
有關算法的詳細說明,參看http://www.loujing.com/mywork/c++/project/Jacobi.pdf
-----------------------------------------------
*/
?
#include?
#include?
#include?
using?namespace?std;
double*?allocMem(int?);?//分配內存空間函數
void?GaussLineMain(double*double*double*int?);//采用高斯列主元素消去法求解x的初始向量值
void?Jacobi(double*double*double*double*intint);//利用雅可比迭代公式求解x的值
int?main()
{
?short?matrixNum;?//矩陣的行數(列數)
?double?*matrixA;?//矩陣A,初始系數矩陣
?double?*matrixD;?//矩陣D為A中的主對角陣
?double?*matrixL;?//矩陣L為A中的下三角陣
?double?*matrixU;?//矩陣U為A中的上三角陣
?double?*B;???//矩陣B為雅可比方法迭代矩陣
?double?*f;???//矩陣f為中間的過渡的矩陣
?double?*x;???//x為一維數組,存放結果
?double?*xk;???//xk為一維數組,用來在迭代中使用
?double?*b;???//b為一維數組,存放方程組右邊系數
?int?ijk;
?cout<<“<<請輸入矩陣的行數(列數與行數一致)>>:“;
?cin>>matrixNum;
?//分別為A、D、L、U、B、f、x、b分配內存空間
?matrixA=allocMem(matrixNum*matrixNum);
?matrixD=allocMem(matrixNum*matrixNum);
?matrixL=allocMem(matrixNum*matrixNum);
?matrixU=allocMem(matrixNum*matrixNum);
?B=allocMem(matrixNum*matrixNum);
?f=allocMem(matrixNum);
?x=allocMem(matrixNum);
?xk=allocMem(matrixNum);
?b=allocMem(matrixNum);
?
?//輸入系數矩陣各元素值
?cout< ??<>:“< ?for(i=0;i ?{
??cout<<“請輸入矩陣中第?“<??for(j=0;j ???cin>>*(matrixA+i*matrixNum+j);
?}
?//輸入方程組右邊系數b的各元素值
?cout< ??“?個“<<“>>:“< ?for(i=0;i ??cin>>*(b+i);
?
?/*??下面將A分裂為A=D-L-U?*/
?
?//首先將D、L、U做初始化工作
?for(i=0;i ??for(j=0;j ???*(matrixD+i*matrixNum+j)=*(matrixL+i*matrixNum+j)=*(matrixU+i*matrixNum+j)=0;
?//D、L、U分別得到A的主對角線、下三角和上三角;其中D取逆矩陣、L和U各元素取相反數
?for(i=0;i ??for(j=0;j ???if(i==j&&*(matrixA+i*matrixNum+j))?*(matrixD+i*matrixNum+j)=1/(*(matrixA+i*matrixNum+j));
???else?if(i>j)?*(matrixL+i*matrixNum+j)=-*(matrixA+i*matrixNum+j);
???else?*(matrixU+i*matrixNum+j)=-*(matrixA+i*matrixNum+j);
?//求B矩陣中的元素
?for(i=0;i ??for(j=0;j ??{
???double?temp=0;
???for(k=0;k ????temp+=*(matrixD+i*matrixNum+k)*(*(matrixL+k*matrixNum+j)+*(matrixU+k*matrixNum+j));
???*(B+i*matrixNum+j)=temp;
??}
?//求f中的元素
?for(i=0;i ?{
??double?temp=0;
??for(j=0;j ???temp+=*(matrixD+i*matrixNum+j)*(*(b+j));
??*(f+i)=temp;
?}
?
?/*??計算x的初始向量值?*/
?GaussLineMain(matrixAxbmatrixNum);
?
?/*?利用雅可比迭代公式求解xk的值?*/
?int?JacobiTime;
?cout<>:“;
?cin>>JacobiTime;
?while(JacobiTime<=0)?
?{
??cout<<“迭代次數必須大于0,請重新輸入:“;
??cin>>JacobiTime;
?}
?Jacob
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????204109??2008-04-14?23:11??雅可比(Jacobi)迭代算法的C++實現\Jacobi.pdf
?????文件?????????30??2008-04-14?00:22??雅可比(Jacobi)迭代算法的C++實現\r.txt
?????文件????????828??2008-04-14?00:13??雅可比(Jacobi)迭代算法的C++實現\Jacobi\Jacobi.dev
?????文件?????479154??2008-04-14?00:17??雅可比(Jacobi)迭代算法的C++實現\Jacobi\Jacobi.exe
?????文件???????6296??2008-04-15?00:42??雅可比(Jacobi)迭代算法的C++實現\Jacobi\main.cpp
?????文件?????479154??2008-04-14?23:52??雅可比(Jacobi)迭代算法的C++實現\Jacobi\main.exe
?????文件???????7817??2008-04-14?00:17??雅可比(Jacobi)迭代算法的C++實現\Jacobi\main.o
?????文件????????779??2008-04-14?00:18??雅可比(Jacobi)迭代算法的C++實現\Jacobi\Makefile.win
?????目錄??????????0??2009-12-13?20:36??雅可比(Jacobi)迭代算法的C++實現\Jacobi
?????目錄??????????0??2009-12-13?20:36??雅可比(Jacobi)迭代算法的C++實現
-----------?---------??----------?-----??----
??????????????1178167????????????????????10
- 上一篇:傳智播客c++視頻
- 下一篇:C# 鍵盤鼠標全局鉤子攔截鍵盤鼠標所有操作全局HOOK
評論
共有 條評論