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

📄 lecalculatordlg.cpp

📁 一个计算线性方程组的源程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	CLEquations leqs(mtxA, mtxB);

	// 求解三对角线方程组的追赶法
	if (leqs.GetRootsetTriDiagonal(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
3.0,-4.0,1.0,0.0,0.0,0,0,0
-2.0,-5.0,6.0,1.0,0.0,0,0,0
1.0,3.0,-1.0,2.0,-3.0,0,0,0
0,2.0,5.0,-5.0,6.0,-1.0,0,0
0,0,-3.0,1.0,-1.0,2.0,-5.0,0
0,0,0,6.0,1.0,-3.0,2.0,-9.0
0,0,0,0,-4.0,1.0,-1.0,2.0
0,0,0,0,0,5.0,1.0,-7.0

13.0,29.0,-13.0
-6.0,17.0,-21.0
-31.0,-6.0,4.0
64.0,3.0,16.0
-20.0,1.0,-5.0
-22.0,-41.0,56.0
-29.0,10.0,-21.0
7.0,-24.0,20.0
*/
// 一般带型方程组的求解
void CLECalculatorDlg::OnButton6() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 一般带型方程组的求解
	if (leqs.GetRootsetBand(5, mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
5.0,7.0,6.0,5.0,1.0
7.0,10.0,8.0,7.0,2.0
6.0,8.0,10.0,9.0,3.0
5.0,7.0,9.0,10.0,4.0
1.0,2.0,3.0,4.0,5.0

24.0,96.0
34.0,136.0
36.0,144.0
35.0,140.0
15.0,60.0
*/
// 求解对称方程组的分解法
void CLECalculatorDlg::OnButton7() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解对称方程组的分解法
	if (leqs.GetRootsetDjn(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
5.0,7.0,6.0,5.0
7.0,10.0,8.0,7.0
6.0,8.0,10.0,9.0
5.0,7.0,9.0,10.0

23.0,92.0
32.0,128.0
33.0,132.0
31.0,124.0
*/
// 求解对称正定方程组的平方根法
void CLECalculatorDlg::OnButton8() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解对称正定方程组的平方根法
	if (leqs.GetRootsetCholesky(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
0.0,0.0,-1.0,0.0,0.0,0.0,2.0,0.0
0.0,6.0,0.0,0.0,0.0,-6.0,0.0,0.0
0.0,0.0,0.0,2.0,0.0,0.0,0.0,-4.0
3.0,0.0,0.0,0.0,-2.0,0.0,1.0,0.0
0.0,0.0,6.0,0.0,0.0,0.0,5.0,0.0
1.0,0.0,0.0,0.0,-3.0,0.0,0.0,2.0
0.0,4.0,0.0,-1.0,0.0,0.0,0.0,0.0
0.0,0.0,1.0,0.0,-1.0,0.0,0.0,-2.0

4.0
6.0
-8.0
-2.0
27.0
-9.0
2.0
-4.0
*/
// 求解大型稀疏方程组的全选主元高斯-约去消去法
void CLECalculatorDlg::OnButton9() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解大型稀疏方程组的全选主元高斯-约去消去法
	if (leqs.GetRootsetGgje(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
6.0,5.0,4.0,3.0,2.0,1.0
5.0,6.0,5.0,4.0,3.0,2.0
4.0,5.0,6.0,5.0,4.0,3.0
3.0,4.0,5.0,6.0,5.0,4.0
2.0,3.0,4.0,5.0,6.0,5.0
1.0,2.0,3.0,4.0,5.0,6.0

11.0
9.0
9.0
9.0
13.0
17.0
*/
// 求解托伯利兹方程组的列文逊方法
void CLECalculatorDlg::OnButton10() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解托伯利兹方程组的列文逊方法
	if (leqs.GetRootsetTlvs(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
7.0,2.0,1.0,-2.0
9.0,15.0,3.0,-2.0
-2.0,-2.0,11.0,5.0
1.0,3.0,2.0,13.0

4.0
7.0
-1.0
0.0
*/
// 高斯-赛德尔迭代法
void CLECalculatorDlg::OnButton11() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 高斯-赛德尔迭代法
	if (leqs.GetRootsetGaussSeidel(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
5.0,7.0,6.0,5.0
7.0,10.0,8.0,7.0
6.0,8.0,10.0,9.0
5.0,7.0,9.0,10.0

23.0
32.0
33.0
31.0
*/
// 求解对称正定方程组的共轭梯度法
void CLECalculatorDlg::OnButton12() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解对称正定方程组的共轭梯度法
	leqs.GetRootsetGrad(mtxC);
	m_strResult = mtxC.ToString(" ");

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
1.0,1.0,-1.0
2.0,1.0,0.0
1.0,-1.0,0.0
-1.0,2.0,1.0

2.0
-3.0
1.0
4.0
*/
// 求解线性最小二乘问题的豪斯荷尔德变换法
void CLECalculatorDlg::OnButton13() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC, mtxQ, mtxR;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解线性最小二乘问题的豪斯荷尔德变换法
	if (leqs.GetRootsetMqr(mtxC, mtxQ, mtxR))
	{
		m_strResult = "解矩阵为:\r\n";
		m_strResult += mtxC.ToString(" ");
		m_strResult += "\r\n\r\nQ矩阵的为:\r\n";
		m_strResult += mtxQ.ToString(" ");
		m_strResult += "\r\n\r\nR矩阵的为:\r\n";
		m_strResult += mtxR.ToString(" ");
	}
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
1.0,1.0,-1.0
2.0,1.0,0.0
1.0,-1.0,0.0
-1.0,2.0,1.0

2.0
-3.0
1.0
4.0
*/
// 求解线性最小二乘问题的广义逆法
void CLECalculatorDlg::OnButton14() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC, mtxAP, mtxU, mtxV;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 求解线性最小二乘问题的广义逆法
	if (leqs.GetRootsetGinv(mtxC, mtxAP, mtxU, mtxV))
	{
		m_strResult = "解矩阵为:\r\n";
		m_strResult += mtxC.ToString(" ");
		m_strResult += "\r\n\r\n广义逆矩阵的为:\r\n";
		m_strResult += mtxAP.ToString(" ");
	}
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

/*
3.4336,-0.5238,0.67105,-0.15272
-0.5238,3.28326,-0.73051,-0.2689
0.67105,-0.73051,4.02612,0.01835
-0.15272,-0.2689,0.01835,2.75702

-1.0
1.5
2.5
-2.0
*/
// 病态方程组的求解
void CLECalculatorDlg::OnButton15() 
{
	// 获取数据
	UpdateData();

	// 构造矩阵
	CMatrix mtxA, mtxB, mtxC;

	// 初始化系数矩阵
	mtxA.FromString(m_strCoefficient, ",");
	// 初始化常数数矩阵
	mtxB.FromString(m_strConstant, ",");

	// 构造线性方程组
	CLEquations leqs(mtxA, mtxB);

	// 病态方程组的求解
	if (leqs.GetRootsetMorbid(mtxC))
		m_strResult = mtxC.ToString(" ");
	else
		m_strResult = "求解失败";

	// 显示数据
	AfxMessageBox(m_strResult, MB_OK|MB_ICONINFORMATION);
}

⌨️ 快捷键说明

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