列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)

其实列主元高斯消去法无非就是比之前的高斯消去法多了一个判断主元这个步骤,但是里面还是有一些小细节的,比如:你要求一个3*4的增广矩阵,你的主元只需要选两次,第一次是在第一列的0.1.2里面选,第二次就会在第二列的1.2里面选,这里面需要细心一点不然会“连续互换”。其实代码实现也不会太难(本人能力有限,只会用拍照截图来给大家看一道题,大家见谅)。

下面给大家看一道例题帮助大家理解一下列主元高斯消去法:

列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)_第1张图片

 当然这道题也是非常简单的,但是计算机要解决的话可谓是难上加难,咱们先看下过程分析:

列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)_第2张图片

 当然过程很简单,下面咱们来看下代码:

​​#include    //解线性方程组//
#include
#define n 3         //n可以自行改变,可以求任意阶的方程组// 
int findmain(double a[n][n+1],int l)
{
	double max;            //定义max为去主元做准备// 
	int k;                 //定义主元所在的行数// 
	k=l;
	max=fabs(a[l][l]);     //先将第l行l列的元素定位主元,为下面的比大小做准备// 
   	for(int i=l;i=0;i--)                  //只需要循环n-2次,因为已经又了b[n-1]// 
	{
		flag++;           //循环的次数// 
		w=n-1;            //循环常量// 
		for(int j=flag;j>0;j--)         //根据flag的变化而循环// 
		{
			count=b[w]*a[i][w]+count;
			
		/**********测试*************/ 
		/*printf("b[%d]*a[%d][%d]\n",w,i,w);
		printf("%lf*%lf=%lf\n",b[w],a[i][w],b[w]*a[i][w]);
		printf("%d.count=%lf\n",flag,count);*/
			
			w--;      //使a的取值往前走// 
        }
		b[i]=(a[i][n]-count)/a[i][i];
		count=0;     //count一定要清0不然的话后面没法计算了(上一次的count就会带到下一次运算当中去)// 
	//	printf("%lf=(%lf-%lf)/%lf\n\n",b[i],a[i][n],count,a[i][i]);
	} 
	printf("\n该方程组的解是:(");    //正常输出就行// 
	for(int i=0;i

当然给大家附上代码运行结果(大家有什么不会可以在讨论区留言,欢迎大家):

列主元高斯消去法(c语言)(可以实现所有阶的)(超级详细)_第3张图片

你可能感兴趣的:(c语言,数组,c语言,线性代数,矩阵)