c語言求解非線性方程組 C語言求解線性方程組

2021-10-13 18:13:13 字數 2416 閱讀 7674

在之前的文章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 ...