📄 matrix4.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 + -