當前位置:首頁 » 編程語言 » 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-04-30 14:23:34 瀏覽:244
路由器無線密碼從哪裡看 發布:2024-04-30 13:41:07 瀏覽:764
安卓由哪個公司提供 發布:2024-04-30 12:27:03 瀏覽:417
伺服器2個cpu的內存如何安裝 發布:2024-04-30 12:19:02 瀏覽:329
如何搭建outlook伺服器 發布:2024-04-30 10:46:50 瀏覽:638
美圖忘記密碼手機如何刷機 發布:2024-04-30 10:45:43 瀏覽:193
sql字元設置 發布:2024-04-30 10:39:03 瀏覽:308
androidram 發布:2024-04-30 10:36:06 瀏覽:281
購買的新車有哪些基本配置 發布:2024-04-30 10:27:32 瀏覽:326
遠程訪問攝像頭 發布:2024-04-30 10:10:57 瀏覽:76