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

📄 矩阵问题举例.cpp

📁 C++Example实用的算法:包括枚举
💻 CPP
字号:
#include <iomanip.h> 
#include <iostream.h> 
#include <stdlib.h> 
#include <math.h>

const  int N=4;

inline void swap(double &a,double &b)
{
	double c=a;
	a=b;
	b=c;
}; 

void DinV(double A[N][N],int n) 
{ 
	int i,j,k; 
	double d; 
	int JS[N],IS[N]; 
	for (k=0;k<n;k++) 
	{
		d=0; 
		for (i=k;i<n;i++) 
			for (j=k;j<n;j++) 
			{ 
				if (fabs(A[i][j])>d) 
				{ 
					d=fabs(A[i][j]); //没有实际意义,被行中的下一列值破坏
					IS[k]=i;    //值d的行号
					JS[k]=j;    //值d的列号
				} 
			} 

			if (d+1.0==1.0) 	return; //如果某行的最后一列的值为0,则返回?

			if (IS[k]!=k) 
				for (j=0;j<n;j++) 
					swap(A[k][j],A[IS[k]][j]); //交换第k行与IS[K]行的数据?

			if (JS[k]!=k) 
				for (i=0;i<n;i++) 
					swap(A[i][k],A[i][JS[k]]); //交换第k列与IS[K]列的数据?

			A[k][k]=1/A[k][k]; 

			for (j=0;j<n;j++) 
				if (j!=k) 
					A[k][j]=A[k][j]*A[k][k]; 

			for (i=0;i<n;i++) 
				if (i!=k) 
					for (j=0;j<n;j++) 
						if (j!=k) 
							A[i][j]=A[i][j]-A[i][k]*A[k][j]; 
			for (i=0;i<n;i++) 
				if (i!=k) 
					A[i][k]=-A[i][k]*A[k][k]; 
	} 
	for (k=n-1;k>=0;k--) 
	{ 
		for (j=0;j<n;j++) 
			if (JS[k]!=k) 
				swap(A[k][j],A[JS[k]][j]); 

		for (i=0;i<n;i++) 
			if (IS[k]!=k) 
				swap(A[i][k],A[i][IS[k]]); 
	} 

	for (i=0;i<n;i++) //输出A的逆,A的逆保存在A中
	{ 
		for (j=0;j<n;j++) 
			cout<<setw(11)<<setprecision(4)<<A[i][j];
		cout<<endl;
	} 
} 

void main() 
{
	double A[N][N]={{1,3,2,13},
					{7,2,1,-2},
					{9,15,3,-2},
					{-2,-2,11,5}}; 
	DinV(A,4); 
} 

⌨️ 快捷键说明

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