亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

關于C語言解線性方程的方法

2020-02-24 14:24:45
字體:
來源:轉載
供稿:網友

關于C語言解線性方程的方法是不是有很多小伙伴們不了解呢?那么我們今天就帶著疑問一起跟小編去學習C語言解線性方程的四種方法,希望本文對你有一定的幫助。

發了好幾天編了個解線性方程組的小程序,可第一次實戰就大敗而歸。經過半天的調試,仍找不出糾正的方法。因為并不是算法的問題,而是因為自己對編譯器處理 浮點函數的方法不是很理解。明明D=0的方陣解出來不等于0了,跟蹤調試發現,計算過程程序對數據進行了舍去處理,導致最終結果不對。不過如果沒有浮點型 的話,這個程序應該算不錯了 。
?

?

#include<stdio.h>
#include<math.h>
#include<mem.h>
#define NUM 100
void print(void)???? /* 使用說明 */
????? { clrscr();
??????? printf("/n/n/n/n/n/t/t/t/t Introduction /n");
??????? printf("/t*--------------------------------------------------------------*/n");
??????? printf("/t*??? This program was design for compute linear equations.?????? */n");
??????? printf("/t*??? The way of use it is very simple.?????????????????????????? */n");
??????? printf("/t*??? First : Input the number of the equation;(Input 0 to exit) */n");
??????? printf("/t*??? Second: Input the coefficient of every eqution;???????????? */n");
??????? printf("/t*??? Third : Input the constant of every eqution;??????????????? */n");
??????? printf("/t*??? Last : Chose the way you want use to solve the equtions; */n");
??????? printf("/t*??? That's all, input any key to run it . . .?????????????????? */n");
??????? printf("/t*-------------------------By__TJX------------------------------*/n");
??????? getch(); }

void chose(void)??? /*選擇計算方法*/
??? { clrscr();
?????? fflush(stdin);
??????? printf("/n/n/n/n/n/t/t**********Introduction********** /n");
????????????????? printf("/t/t* Chose the way,please.??????? * /n");
????????????????? printf("/t/t* a : Gauss eliminant.???????? * /n");
????????????????? printf("/t/t* b : Gauss_yd eliminant.????? * /n");
????????? printf("/t/t* c : Iterative way.?????????? * /n");
????????????????? printf("/t/t* d : Cramer way.????????????? * /n");
????????????????? printf("/t/t* e : exit.??????????????????? * /n");??????????????
????????????????? printf("/t/t*************By__TJX************ /n");
????????????????? printf("/t/tPlease choose number :/n");}

void input(double **a1,double b1[],int num)??? /*數據輸入*/
???? { int i,j,t;
?????? double *p;
?????? char de1,de2;
do{
???? printf("Please input array a[%d][%d]: /n",num,num);
???? printf("Warn: The first number of the array mustn't contain zero! /n");
??? for(i=1;i<=num;i++)
????? {printf("Please input array a[%d][]: /n",i);
?????? for(j=1;j<=num;j++)
?????? {t=0;
???????? if(i==1&&j==1)
????????? { do{
?????????? if(t==0) { scanf("%lf",&a1[i][j]); t++;}
??????????? else {printf("The input is invalid,please input again:/n"); scanf("%f",&a1[i][j]);}
?????????? }while(a1[i][j]==0);}
???????? else scanf("%lf",&a1[i][j]);}}
????? printf(" /nPlease check the value of array a[%d][%d],press Y to input again./n",num,num);
????? do{
???????? de1=getch();
???????? }while(de1!='y'&&de1!='Y'&&de1!='n'&&de1!='N');
??? }while(de1=='y'||de1=='Y');
??? do{
?????? printf("Please input array b[%d]: /n",num);
?????? p=b1+1;
?????? for(i=1;i<=num;i++)
??????? scanf("%lf",p++);
?????? printf(" /nPlease check the value of array b[%d],press Y to input again./n",num);
??????? do{
???????? de2=getch();
???????? }while(de2!='y'&&de2!='Y'&&de2!='n'&&de2!='N');
??? }while(de2=='y'||de2=='Y');}

?
int max(double *t1, double x1[],int n)??? /*迭代子函數*/
???? { int i,temp=0;
?????????? for(i=1;i<=n;i++)
????????? if(fabs(x1[i]-t1[i])>1e-2) {temp=1;break;}
???? /* printf("??? %d??? ",temp); */
????????? return temp;
???? }

int ddcompute(double **a1,double b1[],double x1[],int n) /*迭代法計算*/
????? {double *t;
?????? int i,j,k=0;
?????? double sum1=0.0,sum2=0.0;
?????? t=(double*)malloc(n*sizeof(double));
?????? printf("/nPlease Input The Initial Value of x:/n");
???????? for(i=1;i<=n;i++)
???????? scanf("%lf",&x1[i]);
??????? do{ k++;
???????? for(i=1;i<=n;i++)
???????????? t[i]=x1[i];
?????????? for(i=1;i<=n;i++)
??????????? { sum1=0.0;sum2=0.0;
??????????? for(j=1;j<=i-1;j++) sum1=sum1+a1[i][j]*x1[j]; /*printf(" sum1= %0.4f ",sum1);*/

?????????????? for(j=i+1;j<=n;j++) sum2=sum2+a1[i][j]*t[j]; /* printf(" sum2= %0.4f ",sum2);}*/
?????????? if(a1[i][i]==0||fabs(sum1)>1e+12||fabs(sum2)>1e+12)
????????? {printf(" /nWarning: These equtions can't be solve by this way!/n Press any Key to continue...");
????????? getch();
?????????????????? free(t);
????????? return 0;}
??????????? x1[i]=(b1[i]-sum1-sum2)/a1[i][i];}
???? }while(max(t,x1,n));
???? /* for(i=1;i<=n;i++)
??????????????? {if(i%3==0) printf("/n");
????????? printf("??? %.4f??? ",x1[i]);}*/
???? free(t);
?????????? return 1; }

int gscompute(double **a1,double b1[],double x1[],int n) /*高斯消元法計算*/
???? {int i,j,k;
????? double m,sum;
????? for(k=1;k<=n-1;k++)
????? for(i=k+1;i<=n;i++)
???? { if(a1[k][k]==0) {printf(" /nThese equtions can't be solve is this way./n Press any Key to continue...");
????????? getch();
?????????????????? return 0; }
???????? if((m=0-a1[i][k]/a1[k][k])==0) {i++; continue;}
???? else {for(j=k+1;j<=n;j++)
??????????? a1[i][j]=a1[i][j]+a1[k][j]*m;
???? b1[i]=b1[i]+b1[k]*m;}}
/* yi xia ji suan x zhi */
??? x1[n]=b1[n]/a1[n][n];
??? for(i=n-1;i>=1;i--)
???? {sum=0.0;
???? for(j=n;j>=i+1;j--)
???? sum=sum+a1[i][j]*x1[j];
????? x1[i]=(b1[i]-sum)/a1[i][i];}
????? return 1;??? }

int gs_ydcompute(double **a1,double b1[],double x1[],int n) /*高斯_約當法計算*/
???? {int i,j,k;
????? double m,sum;
????? for(k=1;k<=n;k++)
???????? {i=1;
?????????? while(i<=n)
??????????? { if(a1[k][k]==0) {printf(" /nThese equtions can't be solve is this way./n Press any Key to continue...");
????????? getch();??????????????????? return 0;}
??????????????? if(i!=k)
????????????????? { if((m=0-a1[i][k]/a1[k][k])==0) {i++; continue;}
???????????????? else {for(j=k+1;j<=n;j++)
??????????????????????? a1[i][j]=a1[i][j]+a1[k][j]*m;
??????????????????????? b1[i]=b1[i]+b1[k]*m;}
??????????????????? i++;}
???????????????? else i++;??? }}
/* yi xia ji suan x zhi */???
??? for(i=n;i>=1;i--)
???? x1[i]=b1[i]/a1[i][i];
???? return 1;}

?
double computed(double **a,int h,int l, int *c1,int n) /*計算系數行列式D值*/
?????? { int i, j,p=1;
??? double sum=0.0;
??????? if(h==n)
?????????????? sum=1.0;
??????? else {
?????????????? i=++h;
?????????????? c1[l]=0;
?????????????? for(j=1;j<=n;j++)
????????????????? if(c1[j])
??????????????????? if(a[i][j]==0) p++;
??????????????????? else {sum=sum+a[i][j]*computed(a,i,j,c1,n)*pow(-1,1+p); p++; }???????????????? c1[l]=1; }
?????? return sum; }
void ncompute(double **a,double b[],double x[],int n,int *c,double h)????? /*克萊姆法計算*/
????? {int i,j;
?????? double t[NUM];
??????? for(j=1;j<=n;j++)
???????? { for(i=1;i<=n;i++)
???????????? {t[i]=a[i][j];a[i][j]=b[i];}
???? x[j]=computed(a,0,0,c,n)/h;
?????????? for(i=1;i<=n;i++)
????????????? a[i][j]=t[i]; }
???????? }

main()
{double x[NUM];
double b[NUM];
int i,j=2,n=0;
int *c;
double he;
char m,decision;
double **a;
a=(double**)malloc(NUM*sizeof(double*));
for (i=0; i<NUM; i++)
a[i]=(double*)malloc(NUM*sizeof(double));
??? print();
do{
??? clrscr();
??? do{
?????? if(n>=NUM) printf("n is too large,please input again:/n");
?????? else
????????? printf("Please input the total number of the equations n(n<NUM): /n");
????????? scanf(" %d",&n);
?????? }while(n>NUM);
??? if(n==0) {for(i=1; i<NUM; i++) free(a[i]);
????????????????? free(a); exit(1);}
??? input(a,b,n);
??? c=(int *)malloc((n+1)*sizeof(int));
??? memset(c,1,(n+1)*sizeof(int));
??? he=computed(a,0,0,c,n);
?????? if(fabs(he)>1e-4)???
???????? {
????????? Other:??? chose();
????????? do{
???????????? m=getche();
??????????? }while(m!='a'&&m!='b'&&m!='A'&&m!='B'&&m!='c'&&m!='C'&&m!='d'&&m!='D'&&m!='e'&&m!='E');
????????? switch(m)
?????????? { case 'a': ;
?????????? case 'A': j=gscompute(a,b,x,n);???? break;
?????????? case 'b': ;
?????????? case 'B': j=gs_ydcompute(a,b,x,n); break;
?????????? case 'c': ;
?????????? case 'C': j=ddcompute(a,b,x,n);???? break;
?????????? case 'd': ;
?????????? case 'D': j=1; ncompute(a,b,x,n,c,he); break;
?????????? case 'e': ;
?????????? case 'E': j=2; break;
????????????? default: j=2; break;
?????????? }
????????? if(j==1)
??????????? {??? clrscr();
??????????????? printf("/n/n/n/n");
??????????????? printf("???? D=%.4f /n",he);
??????????????? for(i=1;i<=n;i++)
????????????????? {if(i%5==0) printf("/n");
??????????????????? printf("??? %.4f??? ",x[i]);}
??????????? }
????????? else if(j==0)???
??????????? {printf(" /nThese equtions can't be solve is this way./nPlease chose the other way."); goto Other;}
????????? else {for(i=1; i<NUM; i++) free(a[i]);
????????? free(a);
????????? free(c);
????????? exit(1);}
???????? }
?????? else printf(" /n/n/tD=%.4f/n This linear equations hasn't accurate answer!",he);
?????? printf(" /n Do you want to continue?(Y/N) /n");
?????? do{
?????????? decision=getchar();}while(decision!='y'&&decision!='Y'&&decision!='n'&&decision!='N');
???????? }while(decision=='y'||decision=='Y');
for(i=1; i<NUM; i++) free(a[i]);
free(a);
free(c);}

以上就是關于C語言解線性方程的方法,文章中小編主要介紹了C語言解線性方程的四種方法,大家參考使用,學習線性代數的同學一定能用到。?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黄网站色欧美视频| 韩国国内大量揄拍精品视频| 国内免费精品永久在线视频| 国产精品天天狠天天看| 欧美激情一级精品国产| 国产91九色视频| 国产精品久久久久久久久男| 亚洲第一色在线| 日本伊人精品一区二区三区介绍| 亚洲人成电影网站色xx| 日韩不卡在线观看| 欧美电影免费观看电视剧大全| 亚洲成人a**站| 国产精品福利片| 黑人巨大精品欧美一区二区| 亚洲aⅴ男人的天堂在线观看| 国产精品亚洲一区二区三区| www.亚洲成人| 91亚洲va在线va天堂va国| 丝袜美腿精品国产二区| 国产亚洲一区二区精品| 日韩av黄色在线观看| 国产精品视频免费在线观看| 日韩高清人体午夜| 成人免费网站在线| 国产精品九九九| www.亚洲一二| 欧美日韩一区二区在线| 中文字幕日韩在线视频| 亚洲桃花岛网站| 丝袜情趣国产精品| 欧美一级片免费在线| 日韩精品在线观看视频| 日韩最新在线视频| 精品免费在线视频| 亚洲欧美在线x视频| 国产精品99久久久久久www| 国产精品免费网站| 成人高清视频观看www| 国产精品视频久久| 51视频国产精品一区二区| 欧美日韩激情视频8区| 欧美不卡视频一区发布| 懂色av一区二区三区| 亚洲视频在线观看网站| 性色av香蕉一区二区| 亚洲free性xxxx护士白浆| 国产精品视频网| 国产乱肥老妇国产一区二| 91av视频在线免费观看| 久久在线观看视频| 久久久97精品| 欧美中文在线观看国产| 日韩毛片中文字幕| 伊人久久久久久久久久久久久| 国产这里只有精品| 成人精品一区二区三区电影黑人| 精品久久久久久久久久国产| 日韩欧美高清视频| 亚洲人午夜精品免费| 日韩av免费一区| 69久久夜色精品国产7777| 国产男人精品视频| 日韩在线中文字幕| 亚洲欧美国产日韩中文字幕| 97涩涩爰在线观看亚洲| 国产精品成人av在线| 国产成人精品视频| 日韩暖暖在线视频| 久久在精品线影院精品国产| 亚洲国模精品一区| 欧美大尺度激情区在线播放| 日韩精品视频免费| 午夜免费在线观看精品视频| 欧美日韩精品在线播放| 久久精品视频在线播放| 国产亚洲一区精品| 亚洲色图13p| 欧美精品免费看| 亚洲一区二区三区视频| 欧美俄罗斯性视频| 日韩久久精品成人| www.精品av.com| 亚洲国产成人91精品| 亚洲人成电影网站色…| 欧美人在线视频| 亚洲激情视频网| 日韩欧美国产网站| 日韩欧美主播在线| 国产有码在线一区二区视频| 久久97久久97精品免视看| 日韩av中文字幕在线播放| 91精品国产91久久久久久吃药| 国产91在线视频| 日韩高清有码在线| 欧美极品少妇xxxxⅹ免费视频| 欧美精品www| 亚洲精品色婷婷福利天堂| 成人97在线观看视频| 日韩精品在线影院| 亚洲国产古装精品网站| 久久99久久亚洲国产| 日本午夜在线亚洲.国产| 国产精品流白浆视频| 精品伊人久久97| 亚洲2020天天堂在线观看| 91精品国产综合久久香蕉922| 亚洲精品国产免费| 亚洲日韩第一页| 日韩欧美在线看| 91av在线网站| 精品在线欧美视频| 一区二区三区动漫| 日韩成人激情影院| 国产成人在线视频| 久久这里有精品| 国产精品欧美久久久| 国产成人久久精品| 久久久在线免费观看| 3344国产精品免费看| 国产亚洲成av人片在线观看桃| 91精品国产91久久久久久最新| 国产日韩欧美影视| 欧美性生交大片免网| 国产精品av在线| 国产丝袜视频一区| 97国产在线观看| 国产中文字幕日韩| 综合136福利视频在线| 久久全球大尺度高清视频| 97在线视频免费播放| 亚洲天堂av在线免费观看| 久久久精品在线| 国产日韩精品在线| 欧美日韩一区二区免费在线观看| 精品视频偷偷看在线观看| 欧美自拍大量在线观看| 欧美激情一二三| 国产精品精品视频一区二区三区| 欧亚精品在线观看| 黑人巨大精品欧美一区二区免费| 国产精品美女www爽爽爽视频| 欧美精品免费在线观看| 国产精品高清免费在线观看| 91产国在线观看动作片喷水| 亚洲第一二三四五区| 成人精品久久一区二区三区| 91国内精品久久| 久久人体大胆视频| 国产精品一区二区三区久久| 午夜精品久久久久久久99黑人| 日韩在线视频二区| 精品爽片免费看久久| 国产精品男人爽免费视频1| 亚洲成人在线网| 日韩电影在线观看中文字幕| 91精品国产九九九久久久亚洲| 久久97精品久久久久久久不卡| 国产成人精品视频| 国产欧美精品日韩| 亚洲在线一区二区| 日韩av影视综合网| 韩国精品久久久999| 亚洲一区二区三区乱码aⅴ|