利用Cramer法则求具有唯一解的方程组的解
生活随笔
收集整理的這篇文章主要介紹了
利用Cramer法则求具有唯一解的方程组的解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//求解存在唯一解的方程組#include <stdio.h>
#include <stdlib.h>
double count(double D[][100],int n);//計算行列式
int toDj(double D[][100],double Dj[][100],double *b,int n,int j);//轉換成Djint main(void)
{double D[100][100]={},Dj[100][100],b[100],x[100],d;int n,i,j;//n為未知數個數// 輸入未知數數量printf("Input the number of unknown digits.\n");scanf("%d",&n);// 輸入方程printf("Enter the equation.\n");for (i=0; i<n; i++){printf("? x%d",i+1);if (i!=n-1){printf(" + ");}}printf("=?\n");for (i=0; i<n; i++){for (j=0; j<n; j++){scanf("%lf",&D[i][j]);}scanf("%lf",&b[i]);}d = count(D, n);//計算D// D=0時不可以Cramer法則,解不唯一if (d == 0){printf("More than one solution.\n");}else{
// D不等于0時,解唯一,利用Cramer計算for (j=0; j<n; j++){toDj(D, Dj, b, n, j);x[j] = count(Dj, n) / d;printf("x%d = %.2lf ",j+1,x[j]);if (j%5==0 && j!=0 && j!=n-1){printf("\n");}}printf("\n");}return 0;
}//利用第一列展開求行列式
double count(double D[][100],int n)
{int i,p,q,s;//i為原行列式行數,p、q為余子式的行列號,s為符號表示double M[100][100] = {}, result = 0.0;//M[][]為余子式,result為結果// 令拆到行列數為0時,余子式為1if (n==0){return 1;}// 第一列展開for (i=0,s=1; i<n; i++,s*=(-1)){// 求a[i][0]的余子式M[i][0],即刪去第i+1行第1列for (p=0; p<n-1; p++){if (p<i){for (q=0; q<n-1; q++){M[p][q] = D[p][q+1];}}else if (p>=i){for (q=0; q<n-1; q++){M[p][q] = D[p+1][q+1];}}}// 利用遞歸求解result += s*D[i][0]*count(M, n-1);}return result;
}//將第j+1列與b列交換
int toDj(double D[][100],double Dj[][100],double *b,int n,int j)
{int p,q;//p為行,q為列for (p=0; p<n; p++){for (q=0; q<n; q++){if (q == j){Dj[p][q] = b[p];}else{Dj[p][q] = D[p][q];}}}return 0;
}
?
總結
以上是生活随笔為你收集整理的利用Cramer法则求具有唯一解的方程组的解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: csv mysql_将csv的数据导入m
- 下一篇: java上转型对象特点_Java 浅析三