• 在实现了高斯消除


    高斯消去的实现中使用的增广矩阵成上三角矩阵。然后从下迭代值。


    详细是这里。


    比方说,有一个线性方程组


    然后。出来弄成一个2*2的矩阵,然后再把方程组中等号右边的常数项加进来。成为一个2*3的矩阵


    这就是一个增广矩阵了。


    接下来变成一个上三角矩阵,


    从矩阵的第一行開始,一直到最后一行。

    例如说如今面临的是第i行,

    那么在i到最后一行,找到第i列数的绝对值最大的那行跟第i行换一个位置,这样交换是有优点的,就是当面对0的情况。哈哈。想一想

    然后就用第i行開始把从i+1到最后一行的全部行进行消元操作。消元的目的是把i行之后的全部行的第i列变成0

    最后,变成的就是一个上三角矩阵了


    从下往上迭代求值就可以


    假设不懂怎样迭代求值,打个草稿看看就好了


    我的代码:

    #include<iostream>
    #include<map>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<algorithm>
    using namespace std;
    double gauss(double a[10][10],int n)
    {
    	int i,j,k,t;
    	for(i=0;i<n;i++)
    	{
    		t=i;
    		for(j=i+1;j<n;j++)
    			if(fabs(a[j][i])>fabs(a[t][i]))
    				t=j;
    		if(t!=i)
    			for(j=0;j<=n;j++)
    				swap(a[i][j],a[t][j]);
    		if(a[i][i]!=0)
    			for(j=i+1;j<n;j++)
    				for(k=n;k>=i;k--)
    					a[j][k]-=a[j][i]/a[i][i]*a[i][k];
    	}
    	for(i=n-1;i>-1;i--)
    	{
    		for(j=i+1;j<n;j++)
    			a[i][n]-=a[j][n]*a[i][j];
    		a[i][n]/=a[i][i];
    	}
    }
    int main()
    {
    	double a[10][10];
    	int i,j,n;
    	while(cin>>n)
    	{
    		for(i=0;i<n;i++)
    			for(j=0;j<=n;j++)
    				cin>>a[i][j];
    		gauss(a,n);
    		for(i=0;i<n;i++)
    			cout<<a[i][n]<<" ";
    		cout<<endl;
    	}
    }


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    IOS8定位
    ios通讯录基本操作2014-12月版
    ios悬浮按钮的实现
    MartinLiPageScrollView广告栏实现
    ios分享(友盟分享)
    vue2.0路由-适合刚接触新手简单理解
    git链接GitHub命令及基本操作
    Node
    JS数组sort()排序
    原生JS获取CSS样式并修改
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4622069.html
Copyright © 2020-2023  润新知