xiedaicheng.cpp

来自「计算方法的一个比较重要的高斯约当消去方法」· C++ 代码 · 共 83 行

CPP
83
字号
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#include<math.h>
#define N 2

int themax(double a[][2*N],int k)
{
	int i;
	int result=k;
	for(i=k;i<N;i++)
		if(fabs(a[i][k])>fabs(a[result][k]))
			result=i;
	
	return result;
}

void exchange(double a[][2*N],int row1,int row2)
{
	int i;
	double m;
	for(i=0;i<2*N;i++)
	{
		m=a[row1][i];
		a[row1][i]=a[row2][i];
		a[row2][i]=m;
	}
}

void main(void)
{	
	double a[N][2*N];
	int k=0;
	int r,j;
	double n;

	for(r=0;r<N;r++)
		for(j=0;j<2*N;j++)
			a[r][j]=0;
	
	cout<<"请输入所要求的矩阵:"<<endl;
	for(r=0;r<N;r++)//输入的是单位矩阵
		a[r][r+N]=1;
	for(r=0;r<N;r++)
	{	for(j=0;j<N;j++)
			cin>>a[r][j];
	}
	for(k=0;k<N;k++)
	{
		r=themax(a,k);
		if(a[r][k]==0)
		{
			cout<<"无法计算,因为为奇异矩阵"<<endl;
			exit(1);
		}
		exchange(a,r,k);
		n=a[k][k];

		for(j=0;j<2*N;j++)//将主原那行同除以a[k][k]
		{
			a[k][j]=a[k][j]/n;
		}
		
		for(r=0;r<N;r++)
		{
			if(r!=k)
			{	n=a[r][k];
				for(j=0;j<2*N;j++)
				   a[r][j]=a[r][j]-n*a[k][j];
			}
		}
		
	}
	cout<<"他的逆矩阵是:"<<endl;
	for(r=0;r<N;r++)
	{	for(j=N;j<2*N;j++)
			cout<<a[r][j]<<" ";
			cout<<endl;
	}
}


⌨️ 快捷键说明

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