⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix4.txt

📁 几个算法程序
💻 TXT
字号:
武汉白云黄鹤站∶精华区武汉白云黄鹤站∶精华区
发信人: sweeping (simon), 信区: Algorithm WWW-POST 
标  题: 一些矩阵源码 
发信站: 武汉白云黄鹤站 (Fri Nov  9 08:37:07 2001) , 转信 
 
// testbedDoc.cpp : implementation of the CTestbedDoc class 
// 
 
#include "stdafx.h" 
#include "testbed.h" 
 
#include "testbedDoc.h" 
#include "Matrix.h" 
 
 
// test eigenvalue and eigenvector of real symmetrical matrix 
// using jacobian method 
void CTestbedDoc::OnFileJacob()  
{ 
CSymmetricalMatrix *pA; 
CSymmetricalMatrix *pS; 
char buffer[1024]; 
 
pA=new CSymmetricalMatrix(3); 
 
pA->SetElement(0, 0, 2.0); 
pA->SetElement(0, 1, -1.0); 
pA->SetElement(0, 2, 0.0); 
 
pA->SetElement(1, 0, -1.0); 
pA->SetElement(1, 1, 2.0); 
pA->SetElement(1, 2, -1.0); 
 
pA->SetElement(2, 0, 0.0); 
pA->SetElement(2, 1, -1.0); 
pA->SetElement(2, 2, 2.0); 
 
::SetCursor(m_HWait); 
pS=pA->Jacob(); 
::SetCursor(m_HArrow); 
 
  sprintf(buffer, "lambda1=%lf lambda2=%lf lambda3=%lf",  
pA->GetElement(0, 0), pA->GetElement(1, 1), pA->GetElement(2, 2)); 
AfxMessageBox(buffer, MB_OK); 
 
sprintf(buffer, "v11=%lf v12=%lf v13=%lf",  
pS->GetElement(0, 0), pS->GetElement(1, 0), pS->GetElement(2, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "v21=%lf v22=%lf v23=%lf",  
pS->GetElement(0, 1), pS->GetElement(1, 1), pS->GetElement(2, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "v31=%lf v32=%lf v33=%lf",  
pS->GetElement(0, 2), pS->GetElement(1, 2), pS->GetElement(2, 2)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
delete pS; 
return; 
} 
 
void CTestbedDoc::OnFileGauss()  
{ 
// TODO: Add your command handler code here 
CEquationMatrix *pA; 
char buffer[1024]; 
 
pA=new CEquationMatrix(3); 
 
pA->SetElement(0, 0, 10.0); 
pA->SetElement(0, 1, -1.0); 
pA->SetElement(0, 2, -2.0); 
pA->SetElement(0, 3, 7.2); 
 
pA->SetElement(1, 0, -1.0); 
pA->SetElement(1, 1, 10.0); 
pA->SetElement(1, 2, -2.0); 
pA->SetElement(1, 3, 8.3); 
 
pA->SetElement(2, 0, -1.0); 
pA->SetElement(2, 1, -1.0); 
pA->SetElement(2, 2, 5.0); 
pA->SetElement(2, 3, 4.2); 
 
::SetCursor(m_HWait); 
pA->Gauss(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "x1=%lf x2=%lf x3=%lf",  
pA->GetElement(0, 3), pA->GetElement(1, 3), pA->GetElement(2, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
return; 
} 
 
void CTestbedDoc::OnFileJordan()  
{ 
// TODO: Add your command handler code here 
CEquationMatrix *pA; 
char buffer[1024]; 
 
pA=new CEquationMatrix(3); 
 
pA->SetElement(0, 0, 10.0); 
pA->SetElement(0, 1, -1.0); 
pA->SetElement(0, 2, -2.0); 
pA->SetElement(0, 3, 7.2); 
 
pA->SetElement(1, 0, -1.0); 
pA->SetElement(1, 1, 10.0); 
pA->SetElement(1, 2, -2.0); 
pA->SetElement(1, 3, 8.3); 
 
pA->SetElement(2, 0, -1.0); 
pA->SetElement(2, 1, -1.0); 
pA->SetElement(2, 2, 5.0); 
pA->SetElement(2, 3, 4.2); 
 
::SetCursor(m_HWait); 
pA->Gauss(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "x1=%lf x2=%lf x3=%lf",  
pA->GetElement(0, 3), pA->GetElement(1, 3), pA->GetElement(2, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
return; 
} 
 
void CTestbedDoc::OnFileSeidel()  
{ 
// TODO: Add your command handler code here 
 
CEquationMatrix *pA; 
char buffer[1024]; 
 
pA=new CEquationMatrix(4); 
 
pA->SetElement(0, 0, 13.0); 
pA->SetElement(0, 1, 1.0); 
pA->SetElement(0, 2, 3.0); 
pA->SetElement(0, 3, 2.0); 
pA->SetElement(0, 4, 0.0); 
 
pA->SetElement(1, 0, -2.0); 
pA->SetElement(1, 1, 7.0); 
pA->SetElement(1, 2, 2.0); 
pA->SetElement(1, 3, 1.0); 
pA->SetElement(1, 4, 4.0); 
 
pA->SetElement(2, 0, -2.0); 
pA->SetElement(2, 1, 9.0); 
pA->SetElement(2, 2, 15.0); 
pA->SetElement(2, 3, 3.0); 
pA->SetElement(2, 4, 7.0); 
 
pA->SetElement(3, 0, 5.0); 
pA->SetElement(3, 1, -2.0); 
pA->SetElement(3, 2, -2.0); 
pA->SetElement(3, 3, 11.0); 
pA->SetElement(3, 4, -1.0); 
 
::SetCursor(m_HWait); 
pA->Seidel(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "x1=%lf x2=%lf x3=%lf x4=%lf",  
pA->GetElement(0, 4), pA->GetElement(1, 4), pA->GetElement(2, 4), pA->GetEleme 
nt(3, 4)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
return; 
} 
 
void CTestbedDoc::OnFileInverse()  
{ 
// TODO: Add your command handler code here 
CSquareMatrix *pA; 
char buffer[1024]; 
 
pA=new CSquareMatrix(3); 
 
pA->SetElement(0, 0, 2.0); 
pA->SetElement(0, 1, 3.0); 
pA->SetElement(0, 2, -1.0); 
 
pA->SetElement(1, 0, 1.0); 
pA->SetElement(1, 1, 2.0); 
pA->SetElement(1, 2, 0.0); 
 
pA->SetElement(2, 0, -1.0); 
pA->SetElement(2, 1, 2.0); 
pA->SetElement(2, 2, -2.0); 
 
::SetCursor(m_HWait); 
pA->Inverse(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "v11=%lf v12=%lf v13=%lf",  
pA->GetElement(0, 0), pA->GetElement(1, 0), pA->GetElement(2, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "v21=%lf v22=%lf v23=%lf",  
pA->GetElement(0, 1), pA->GetElement(1, 1), pA->GetElement(2, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "v31=%lf v32=%lf v33=%lf",  
pA->GetElement(0, 2), pA->GetElement(1, 2), pA->GetElement(2, 2)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
return; 
 
} 
 
 
void CTestbedDoc::OnFileDeter()  
{ 
// TODO: Add your command handler code here 
CSquareMatrix *pA; 
double a; 
char buffer[1024]; 
 
pA=new CSquareMatrix(4); 
 
pA->SetElement(0, 0, 2.0); 
pA->SetElement(0, 1, 4.0); 
pA->SetElement(0, 2, 4.0); 
pA->SetElement(0, 3, 2.0); 
 
pA->SetElement(1, 0, 3.0); 
pA->SetElement(1, 1, 3.0); 
pA->SetElement(1, 2, 12.0); 
pA->SetElement(1, 3, 6.0); 
 
pA->SetElement(2, 0, 2.0); 
pA->SetElement(2, 1, 4.0); 
pA->SetElement(2, 2, -1.0); 
pA->SetElement(2, 3, 2.0); 
 
pA->SetElement(3, 0, 4.0); 
pA->SetElement(3, 1, 2.0); 
pA->SetElement(3, 2, 1.0); 
pA->SetElement(3, 3, 1.0); 
 
::SetCursor(m_HWait); 
a=pA->Determinantal(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "a=%lf", a); 
AfxMessageBox(buffer, MB_OK); 
delete pA; 
return; 
 
} 
 
void CTestbedDoc::OnFileLud()  
{ 
// TODO: Add your command handler code here 
CSquareMatrix *pA, *pL, *pU; 
char buffer[1024]; 
 
pA=new CSquareMatrix(4); 
pL=new CSquareMatrix(4); 
pU=new CSquareMatrix(4); 
 
pA->SetElement(0, 0, 2.0); 
pA->SetElement(0, 1, 4.0); 
pA->SetElement(0, 2, 4.0); 
pA->SetElement(0, 3, 2.0); 
 
pA->SetElement(1, 0, 3.0); 
pA->SetElement(1, 1, 3.0); 
pA->SetElement(1, 2, 12.0); 
pA->SetElement(1, 3, 6.0); 
 
pA->SetElement(2, 0, 2.0); 
pA->SetElement(2, 1, 4.0); 
pA->SetElement(2, 2, -1.0); 
pA->SetElement(2, 3, 2.0); 
 
pA->SetElement(3, 0, 4.0); 
pA->SetElement(3, 1, 2.0); 
pA->SetElement(3, 2, 1.0); 
pA->SetElement(3, 3, 1.0); 
 
::SetCursor(m_HWait); 
pA->LUDecompose(pL, pU); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "L11=%lf L21=%lf L31=%lf L41=%lf",  
pL->GetElement(0, 0), pL->GetElement(1, 0), pL->GetElement(2, 0), pL->GetEleme 
nt(3, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "L12=%lf L22=%lf L32=%lf L42=%lf",  
pL->GetElement(0, 1), pL->GetElement(1, 1), pL->GetElement(2, 1), pL->GetEleme 
nt(3, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "L13=%lf L23=%lf L33=%lf L43=%lf",  
pL->GetElement(0, 2), pL->GetElement(1, 2), pL->GetElement(2, 2), pL->GetEleme 
nt(3, 2)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "L14=%lf L24=%lf L34=%lf L44=%lf",  
pL->GetElement(0, 3), pL->GetElement(1, 3), pL->GetElement(2, 3), pL->GetEleme 
nt(3, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
sprintf(buffer, "U11=%lf U21=%lf U31=%lf U41=%lf",  
pU->GetElement(0, 0), pU->GetElement(1, 0), pU->GetElement(2, 0), pU->GetEleme 
nt(3, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "U12=%lf U22=%lf U32=%lf U42=%lf",  
pU->GetElement(0, 1), pU->GetElement(1, 1), pU->GetElement(2, 1), pU->GetEleme 
nt(3, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "U13=%lf U23=%lf U33=%lf U43=%lf",  
pU->GetElement(0, 2), pU->GetElement(1, 2), pU->GetElement(2, 2), pU->GetEleme 
nt(3, 2)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "U14=%lf U24=%lf U34=%lf U44=%lf",  
pU->GetElement(0, 3), pU->GetElement(1, 3), pU->GetElement(2, 3), pU->GetEleme 
nt(3, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
delete pL; 
delete pU; 
return; 
} 
 
void CTestbedDoc::OnFileQrd()  
{ 
// TODO: Add your command handler code here 
CSquareMatrix *pA, *pQ, *pC; 
char buffer[1024]; 
 
pA=new CSquareMatrix(4); 
pQ=new CSquareMatrix(4); 
 
pA->SetElement(0, 0, 2.0); 
pA->SetElement(0, 1, 4.0); 
pA->SetElement(0, 2, 4.0); 
pA->SetElement(0, 3, 2.0); 
 
pA->SetElement(1, 0, 3.0); 
pA->SetElement(1, 1, 3.0); 
pA->SetElement(1, 2, 12.0); 
pA->SetElement(1, 3, 6.0); 
 
pA->SetElement(2, 0, 2.0); 
pA->SetElement(2, 1, 4.0); 
pA->SetElement(2, 2, -1.0); 
pA->SetElement(2, 3, 2.0); 
 
pA->SetElement(3, 0, 4.0); 
pA->SetElement(3, 1, 2.0); 
pA->SetElement(3, 2, 1.0); 
pA->SetElement(3, 3, 1.0); 
 
::SetCursor(m_HWait); 
pA->QRDecompose(pQ); 
pC=(CSquareMatrix *)pQ->LeftTransposeMultiply(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "R11=%lf R21=%lf R31=%lf R41=%lf",  
pA->GetElement(0, 0), pA->GetElement(1, 0), pA->GetElement(2, 0), pA->GetEleme 
nt(3, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "R12=%lf R22=%lf R32=%lf R42=%lf",  
pA->GetElement(0, 1), pA->GetElement(1, 1), pA->GetElement(2, 1), pA->GetEleme 
nt(3, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "R13=%lf R23=%lf R33=%lf R43=%lf",  
pA->GetElement(0, 2), pA->GetElement(1, 2), pA->GetElement(2, 2), pA->GetEleme 
nt(3, 2)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "R14=%lf R24=%lf R34=%lf R44=%lf",  
pA->GetElement(0, 3), pA->GetElement(1, 3), pA->GetElement(2, 3), pA->GetEleme 
nt(3, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
sprintf(buffer, "Q11=%lf Q21=%lf Q31=%lf Q41=%lf",  
pQ->GetElement(0, 0), pQ->GetElement(1, 0), pQ->GetElement(2, 0), pQ->GetEleme 
nt(3, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "Q12=%lf Q22=%lf Q32=%lf Q42=%lf",  
pQ->GetElement(0, 1), pQ->GetElement(1, 1), pQ->GetElement(2, 1), pQ->GetEleme 
nt(3, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "Q13=%lf Q23=%lf Q33=%lf Q43=%lf",  
pQ->GetElement(0, 2), pQ->GetElement(1, 2), pQ->GetElement(2, 2), pQ->GetEleme 
nt(3, 2)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "Q14=%lf Q24=%lf Q34=%lf Q44=%lf",  
pQ->GetElement(0, 3), pQ->GetElement(1, 3), pQ->GetElement(2, 3), pQ->GetEleme 
nt(3, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
sprintf(buffer, "C11=%lf C21=%lf C31=%lf C41=%lf",  
pC->GetElement(0, 0), pC->GetElement(1, 0), pC->GetElement(2, 0), pC->GetEleme 
nt(3, 0)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "C12=%lf C22=%lf C32=%lf C42=%lf",  
pC->GetElement(0, 1), pC->GetElement(1, 1), pC->GetElement(2, 1), pC->GetEleme 
nt(3, 1)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "C13=%lf C23=%lf C33=%lf CQ3=%lf",  
pC->GetElement(0, 2), pC->GetElement(1, 2), pC->GetElement(2, 2), pC->GetEleme 
nt(3, 2)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "C14=%lf C24=%lf C34=%lf C44=%lf",  
pC->GetElement(0, 3), pC->GetElement(1, 3), pC->GetElement(2, 3), pC->GetEleme 
nt(3, 3)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
delete pQ; 
delete pC; 
return; 
} 
 
void CTestbedDoc::OnFileQreigen()  
{ 
// TODO: Add your command handler code here 
CSquareMatrix *pA; 
CMatrix *pC; 
char buffer[1024]; 
 
pA=new CSquareMatrix(4); 
 
pA->SetElement(0, 0, 5.0); 
pA->SetElement(0, 1, -7.0); 
pA->SetElement(0, 2, 7.0); 
pA->SetElement(0, 3, 20.0); 
 
pA->SetElement(1, 0, 1.0); 
pA->SetElement(1, 1, 0.0); 
pA->SetElement(1, 2, 0.0); 
pA->SetElement(1, 3, 0.0); 
 
pA->SetElement(2, 0, 0.0); 
pA->SetElement(2, 1, 1.0); 
pA->SetElement(2, 2, 0.0); 
pA->SetElement(2, 3, 0.0); 
 
pA->SetElement(3, 0, 0.0); 
pA->SetElement(3, 1, 0.0); 
pA->SetElement(3, 2, 1.0); 
pA->SetElement(3, 3, 0.0); 
 
::SetCursor(m_HWait); 
pC=pA->QREigenvalue(); 
::SetCursor(m_HArrow); 
 
sprintf(buffer, "lambda1=%lf+(%lf)i", pC->GetElement(0, 0), pC->GetElement(0, 1 
)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "lambda2=%lf+(%lf)i", pC->GetElement(1, 0), pC->GetElement(1, 1 
)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "lambda3=%lf+(%lf)i", pC->GetElement(2, 0), pC->GetElement(2, 1 
)); 
AfxMessageBox(buffer, MB_OK); 
sprintf(buffer, "lambda4=%lf+(%lf)i", pC->GetElement(3, 0), pC->GetElement(3, 1 
)); 
AfxMessageBox(buffer, MB_OK); 
 
delete pA; 
delete pC; 
return; 
 
} 
 

 
-- 
※ 来源:.武汉白云黄鹤站WWW bbs.whnet.edu.cn. [FROM: 211.101.187.186]  

华中地区网络中心

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -