当前位置:首页 » 编程语言 » c语言高斯法

c语言高斯法

发布时间: 2022-07-12 14:33:30

A. c语言编程高斯消去法过程,求解我的程序有什么问题。

数组下标是从0开始计算的,而你从1开始,就一定会少计算
顺便count=n-1应该会有下标越界,即nullpointerexception

B. 用C语言进行列主元素高斯消元法,遇到问题

for(i=k+1;i<N;i++)
{
m[i-1][k]=a[i][k]/a[k][k];
//这里m的坐标应该是[i-1][k],如果是[i][k]会造成越界
for(j=0;j<N;j++)
{
temp=a[i][j];
a[i][j]=temp-m[i-1][k]*a[k][j];
//这里也一样
}
}
m是
2X2
的数组,而a是
3X3
的数据,即a[1][0]与a[0][0]的比值应存在m[0][0]中!
希望可以帮到你!

C. 用c语言实现高斯消去法,解三元一次方程组。求具体程序!!

#include<iostream>

#include<cmath>

usingnamespacestd;

#defineMAX50

voidinput(doublea[MAX][MAX+1],intn)

{

cout<<"输入原方程组的增广矩阵"<<endl;

for(inti=0;i<n;i++)

for(intj=0;j<n+1;j++)

cin>>a[i][j];

}

voidoutput(doublex[],intn)

{

cout<<"Gauss消去法得到的原方程组的解为"<<endl;

for(intk=0;k<n;k++)

cout<<x[k]<<"";

}

intmain()

{

doublea[MAX][MAX+1],x[MAX],sum,max,t;

intn,i,j,k,max_i;

cout<<"输入原方程组的阶"<<endl;cin>>n;

input(a,n);

for(k=0;k<n-1;k++)//选主元素

{max=a[k][k];

max_i=k;

for(i=k+1;i<n;i++)

if(fabs(a[i][k])>fabs(max))

{

max=a[i][k];

max_i=i;

}

if(max==0)

break;

if(max_i!=k)//交换两行

for(j=k;j<n+1;j++)

{

t=a[k][j];

a[k][j]=a[max_i][j];

a[max_i][j]=t;

}

for(i=k+1;i<n;i++)

{

a[i][k]=a[i][k]/-a[k][k];

for(j=k+1;j<n+1;j++)

a[i][j]=a[i][j]+a[i][k]*a[k][j];

}//消元

}

if(max==0)cout<<"原方程组无解"<<endl;

else

{

for(k=n-1;k>=0;k--)

{

sum=0;

for(j=k+1;j<n;j++)

sum=sum+a[k][j]*x[j];

x[k]=(a[k][n]-sum)/a[k][k];

}//回代

output(x,n);

cout<<endl;

}

return0;

}

D. 高斯消去法 c语言

#include<stdio.h>
#define demension 4//修改数组的维数可以在这里改动

void transferM(double array[][demension])
//上三角
{
int row1,row2,col;
double m;
for(row1=0;row1<demension;row1++)
{
for(row2=row1+1;row2<demension;row2++)
{
m=array[row2][row1]/array[row1][row1];
for(col=row1;col<demension;col++)
{
array[row2][col]-=array[row1][col]*m;
}
}
}

}

void main()
{
double a[demension][demension]={
{3.2,2,5,3},
{34,45,64,23},
{23,34,54,5},
{23,34,4,56}
};

transferM(a);
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
printf("%6.2lf",a[i][j]);
}
printf("\n");
}

}

E. C语言编程: 高斯法解线性方程...急急急啊!

以前保存了一个,你看看吧,不是我写的,但是真的写的非常好:

用高斯消元法解n元线性方程:
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d

float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
void exchange(int r,int k);
float max(int k);
void message();

int main()
{
float x[NUMBER]; /*此数组用于存放方程解*/
int r,k,i,j;
char celect;
system("cls");

printf("\n\n用Gauss列主元消元法解线性方程组");
printf("\n\n1.解方程组请按Enter.");
printf("\n\n2.退出程式请按Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n 输入方程组的维数:n=");
scanf("%d",&n);
printf(" \n\n现在输入系数矩阵A和向量b:");
for(i=1;i<=n;i++)
{
printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i,i,n,i);
/*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/

for(j=1;j<=n+1;j++) /*将刚才输入的数存入数组*/
scanf("%f",&A[i][j]);
}
for(k=1;k<=n-1;k++)
{
ark=max(k);
if(ark==0) /*判断方程是否为线性方程,即是否合法*/
{
printf("\n\n此方程组不合法!");message();
}
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
}
x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k>=1;k--)
{
float me=0;
for(j=k+1;j<=n;j++)
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
message();

return 1;
}

void exchange(int r,int k) /*交换行的矩函数*/
{
int i;
for(i=1;i<=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i<=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i<=n+1;i++)
A[k][i]=A[0][i];
}

float max(int k) /*比校系数大小的函数*/
{
int i;
float temp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{
temp=fabs(A[i][k]);
flag=i;
}
return temp;
}

void message() /*实现菜单选择的函数*/
{
printf("\n\n 继续运算按 Enter ,退出程式按 Esc!");
switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n\n不合法的输入!");message();}
}
}

F. 用c语言编写一个程序用高斯消元法求解线性方程组的解程序流程图

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
int n,i,j,k;
double a[100][100],b[100],o;

cout<<"输入未知数个数:"<<endl;
cin>>n;
cout<<"输入"<<n<<"个方程组(未知数系数及等号右边常数):"<<endl;
for (i=1;i<=n;i++)
for (j=1;j<=n+1;j++)
cin>>a[i][j];

for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
if (fabs(a[j][i])>1e-7)
{
o=a[i][i]/a[j][i];
for (k=i;k<=n+1;k++)
a[j][k]=a[j][k]*o-a[i][k];
}
for (i=n;i>0;i--)
{
b[i]=a[i][n+1]/a[i][i];
for (j=i-1;j>0;j--)
a[j][n+1]=a[j][n+1]-b[i]*a[j][i];
}

cout<<"解得:"<<endl;
for (i=1;i<=n;i++) cout<<b[i]<<endl;

system("pause");
return 0;
}

G. 用c语言编程高斯全主元消去法(请用图中的过程)

#include <iostream>
#include <iomanip.h>
using namespace std;
#define N 20
double a[N][N];
double x[N+1];
double b[N+1];
int n;//n方程个数,n未知数个数
int set( )
{
cout<<"请输入方程的个数和未知数个数: "<<endl;
cin>>n;
int i,j;
cout<<"请输入方程组(逐个输入方程 i)"<<endl;
for(i = 1;i <= n;i++)
{
for(j = 1;j<=n;j++)
{
cin>>a[i][j];//系数
}
cin>>b[i];//结果
}
return 0;
}
int find(int k)//寻找第k列主元
{
int i,tag = k;
double maxv=0;
for(i = k;i <= n;i++)
{
if(a[i][k] > maxv)
{
maxv = a[i][k];
tag = i;
}
}
return tag;
}
void exchange(int i1,int i2)//将第 i1 i2行互换
{
int j;
for(j = 1;j <= n;j++)
{
swap(a[i1][j],a[i2][j]);
}
swap(b[i1],b[i2]);
}
void div(int k)//让第k个方程的首项系数为1
{
double temp = a[k][k];
for(int j = k; j <= n;j++)
{
a[k][j]/=temp;
}
b[k]/=temp;
}
void disME(int k)
{
int i,j;
for(i =1 ;i<=n;i++)
{
for(j = i;j<= n;j++)
{
if(a[i][j])
{
if(a[i][j]==1)
{ if(j==n)
cout<<"x"<<j;
else
cout<<"x"<<j<<" + ";
}
else
{
if(j==n)
cout<<a[i][j]<<"x"<<j;
else
cout<<a[i][j]<<"x"<<j<<" + ";
}
}
}
cout<<" = "<<b[i]<<endl;
}
system("pause");
}
void eliminate(int k)//消元
{
int i,j;
double t;
for(i = k+1;i<= n;i++)
{
t = a[i][k]/a[k][k];
for(j = k;j <= n;j++)
{
a[i][j]-=a[k][j] * t;
}
b[i] -= b[k] * t;
}
}
void Gauss()//高斯消元法
{
int i,j,k;
for(k = 1;k < n;k++)//共进行n - 1次消元
{
int l = find(k);//寻找第k次消元法的主元方程
if(l!=k)
{
exchange(l,k);
}
//消元
div(k);
eliminate(k);
cout<<"第"<<k<<"次消元结果:"<<endl;
disME(k);
}
div(k);
x[k] = b[k];
//disM();
for(i = n - 1;i>=1;i--)
{
for(j = i+1;j <=n ;j++)
{
b[i] -= a[i][j] * b [j];
}
x[i] = b[i];
}
}
void dis()
{
int i;
cout<<"解方程得:"<<endl;
for(i = 1;i<=n;i++)
{
cout<<"x"<<i<<" = ";
printf("%.5f\n",x[i]);
}
}
int main()
{
set();
Gauss();
dis();
system("pause");
return 0;
}

热点内容
安卓手机如何把视频变成实况 发布:2024-05-18 00:57:35 浏览:798
如何禁止缓存后台进程 发布:2024-05-18 00:57:12 浏览:170
c语言中安 发布:2024-05-18 00:39:59 浏览:449
数据库建设书 发布:2024-05-18 00:39:17 浏览:825
破解压缩包解压密码 发布:2024-05-18 00:34:57 浏览:840
网页java代码在线编译 发布:2024-05-18 00:29:49 浏览:925
路由器编程器固件 发布:2024-05-18 00:13:41 浏览:255
家庭千兆搭建服务器 发布:2024-05-18 00:11:39 浏览:609
信用社会代码的原始密码是多少 发布:2024-05-17 23:49:33 浏览:149
java的发展 发布:2024-05-17 23:34:36 浏览:4