• 高斯消元解线性方程组的小东西


    #include<algorithm>
    #include<stdlib.h>
    #include<stdio.h>
    #include<math.h>
    int n;
    bool needDebug;
    double m[1005][1005]={0};
    double x[1005]={0};
    
    void input()
    {
    	printf("请输入系数矩阵的阶数(1~1000)
    ");
    	scanf("%d",&n);
    	printf("请按行优先顺序输入增广矩阵(用空格、缩进或回车分割每个数字)
    ");
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n+1;j++)
    			scanf("%lf",&m[i][j]);
    	printf("是否输出中间过程的增广矩阵?是请输入y
    ");
    	char cc[2];
    	scanf("%s",cc);
    	if(cc[0]=='y') needDebug=1;
    	else needDebug=0;
    }
    
    void debug()
    {
    	if(!needDebug) return;
    	printf("**********************
    ");
    	for(int i=1;i<=n;i++,printf("
    "))
    		for(int j=1;j<=n+1;j++)
    			printf("%24.20lf",m[i][j]);
    	printf("**********************
    ");
    }
    
    inline void rowSwap(int i,int j)
    {
    	for(int k=1;k<=n+1;k++) std::swap(m[i][k],m[j][k]);
    }
    
    int select(int i)
    {
    	int mxrow=i;
    	for(int k=i+1;k<=n;k++)
    	{
    		if(m[k][i]>m[i][i])
    			mxrow=k;
    	}
    	rowSwap(i,mxrow);
    	if(fabs(m[i][i])<1e-10)
    	{
    		printf("无唯一解
    ");
    		return 0;
    	}
    	return 1;
    }
    
    int inline gauss()
    {
    	for(int i=1;i<=n;i++)
    	{
    		if(!select(i)) return 0;
    		for(int j=i+1;j<=n;j++)
    		{
    			if(fabs(m[j][i])<1e-10) continue;
    			double k=m[j][i]/m[i][i];
    			for(int h=i;h<=n+1;h++)
    			{
    				m[j][h]-=m[i][h]*k;
    			}
    			debug();
    		}
    	}
    	for(int i=n;i;i--)
    	{
    		x[i]=m[i][n+1]/m[i][i];
    		for(int j=i-1;j;j--)
    		{
    			m[j][n+1]-=x[i]*m[j][i];
    			m[j][i]=0;
    		}
    	}
    	return 1;
    }
    
    void output()
    {
    	for(int i=1;i<=n;i++) printf("x_{%d}	=	%.2lf
    ",i,x[i]);
    }
    
    int main()
    {
    	//freopen("test.in","r",stdin);
    	while(1)
    	{
    		input();
    		if(gauss())
    			output();
    		puts("退出请点击右上角X");
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    The Django Book学习笔记 04 模板
    The Django Book学习笔记
    Python标准库 datetime
    Python %s和%r的区别
    Python转载
    Python while 1 和 while True 速度比较
    Git 时光穿梭鸡 删除文件 以及批量删除文件
    git reset soft,hard,mixed之区别深解
    Git 时光穿梭鸡 撤销修改
    Git 时光穿梭鸡 管理修改
  • 原文地址:https://www.cnblogs.com/wawcac-blog/p/11956600.html
Copyright © 2020-2023  润新知