在之前的文章c語言實現矩陣求秩和化約化階梯形中,我們已經實現了求矩陣的秩與約化階梯形,在此基礎上,我們就可以來求解線性方程組了.• 一般線性方程組當且僅當
2. 當
首先以增廣矩陣的形式輸入線性方程組,利用"matrix.h"標頭檔案中的求秩函式分別計算增廣矩陣和係數矩陣的秩,然後判斷是否有解;
如果方程有解,再看秩是否與未知量個數相同來判斷方程組是有無窮解還是唯一解;
如果有方程組有唯一解,則只需借助求約化階梯形功能得到約化階梯形的增廣矩陣,依次輸出矩陣的最後一列元素即可;
如果方程組有無窮解,則需要找到自由未知量,然後用未知自由量表示其他的量,獲得乙個通解的表示式. 在表達過程中,要注意幾個常見問題:需要用連續的字母或者帶連續下標的字母表示自由未知量;等號後的第乙個數或字母前沒有加號,只在數或係數為負數時顯示減號;如果係數或者數為零,這一項不應出現在解的表示式中;如果係數是 1或者 -1,應當省略不表.
依據上述思路,寫出的**如下:
#include #include #include "matrix.h"
int main()
,sign = 0,l = 0,ranks;
char free_unknown[20] = ,alphabet = 'a';
printf("輸入線性方程組的未知量個數:");
scanf("%d",&column);
/*增廣矩陣的列數比未知量個數多一列。*/
column ++;
printf("輸入方程的個數:");
scanf("%d",&row);
printf("請按增廣矩陣的形式輸入線性方程組:n");
for(i = 0;i < row;i ++)
for(j = 0;j < column;j ++)
scanf("%f",&matrix[i][j]);
/*如果係數矩陣的秩與增廣矩陣的秩不相等,則判定無解。*/
if(rank(matrix,row,column) != rank(matrix,row,column - 1))
printf("線性方程組無解!n");
/*如果係數矩陣的秩與增廣矩陣的秩相等,則判定有解。*/
else
/*如果係數矩陣的秩與未知量個數相等,則判斷有唯一解。*/
if(rank(matrix,row,column) == column - 1)
/*如果係數矩陣的秩與未知量個數不相等,則判斷有無窮解。*/
else
printf("線性方程組有無窮解,其中 ");
/*識別index中0元素下標,輸出未知自由量的下標。要注意,這個下標時偏移量,還要加1才能作為真正的下標輸出。*/
for(i = 0;i < column - 1;i ++)
if(index[i] == 0)
printf("x%d ",i + 1);
printf("是自由未知量.n");
printf("通解表達為:n");
/*這時候,我們用free_unknown陣列來依次給未知自由量賦字母(從a開始),字元陣列的下標依然與未知自由量對應的列下標對應。*/
for(i = 0;i < column - 1;i ++)
if(index[i] == 0)
free_unknown[i] = alphabet ++;
alphabet = 97;
/*開始按列數迴圈(即按未知量迴圈),逐個輸出未知量的表示式。*/
for(i = 0;i < column - 1;i ++)
/*接下來是用未知自由量的字母和係數組成的項來表示未知量。*/
for(k = 0;k < column - 1;k ++)
else
if(matrix[l][k] == -1)
printf("+%c ",free_unknown[k]);
else if(matrix[l][k] == 1)
printf("-%c ",free_unknown[k]);
else
printf("+%.3f%c ",-matrix[l][k],free_unknown[k]);}}
printf("n");
/*完成乙個未知量的輸出,行數l自增一次,並重置sign符號*/
l ++;
sign = 0;}}
}return 0;
}
最後舉一例來測試一下:
N P求解非線性方程組
對於那些看別人部落格,自己卻從來不寫的人,我希望你們也多寫。對於那些只會說別人 你寫的這個別人已經寫過了 的人,請你躝開。用牛頓迭代法 newton raphson 求解非線性方程組 x1 2 10 x1 x2 2 8 0 x1 x2 2 x1 10 x2 8 0 圖1是隨著求解次數的x1與x2值 ...
C語言牛頓迭代法求解非線性方程組
牛頓法 牛頓法是一種線性化方法,其基本思想是將非線性方程f x 0逐步歸結為某種線性方程來求解。設已知方程有近似根 假定 將函式在點展開,有 於是方程可近似地表示為 這是個線性方程,記其根為,則的計算公式 這就是牛頓法。一 演算法及流程 對於非線性方程 在處按照多元函式的泰勒展開,並取線性項得到 其...
C語言解線性方程組
按規則輸入線性方程組的係數 每行n 1個數值,按順序輸入n個係數項,最後一項為常數項,用空格隔開 輸出該方程組的係數行列式和它的值,最後輸出方程組的解 處理整型資料 include include define n 4 行列式的行 列 數 typedef struct node array int ...