資源簡介
內含超定方程組最小二乘法代碼,有詳解,已經順利運行通過,希望可以對小伙伴們有幫助!
代碼片段和文件信息
//超定方程組最小二乘法?
#include
#define?SIZE?20???//預定義要進行轉置的矩陣最大?大小為20*20?
using?namespace?std;
//下面幾個函數的輸入數組和主函數中定義的數組雖然都是同一個名字,但并不是指同一個函數?
//矩陣的輸入函數
void?inputMatrix(int?a[][SIZE]??int?n?int?m){?//二維數組參數下標必須要確定
? int?ij;
? for(i?=?0;i??? for(j?=?0;j???? cin>>a[i][j];
?? }
? }
}
//矩陣的輸出函數
void?outputMatrix(int?b[][SIZE]??int?n?int?m){
? int?ij;
? for(i?=?0;i??? for(j?=?0;j???? cout<?? }
?? cout<<“\n“;?//每次打印完一行后進行換行
? }
}?
?
//矩陣的轉置運算
void?matrixTransport(int?a[][SIZE]?int?b[][SIZE]?int?row?int?column){//row和column均為a的行和列?
int?ij;
//int?row?column;?
for(i?=?0;?i ?? for(j?=?0;?j
??? b[i][j]?=?a[j][i];
?? }
? }
}?
?
/********************************************
A:矩陣A;B:矩陣B;C:相乘結果矩陣;rowA:A的行數;columnB:B的列數;columnA:A的列數
********************************************/
//必須要保證兩個數組能夠進行乘法運算,這里沒有加入判斷條件,默認能夠進行,望讀者能夠明白這一點。?
void?matrixMul(int?A[][SIZE]?int?B[][SIZE]?int?C[][SIZE]?int?rowA?int?columnB?int?columnA){
????for?(int?i=0;i ????????for?(int?j=0;?j ????????????C[i][j]?=?0;
????????????for?(int?k=0;k ????????????????C[i][j]+=A[i][k]*B[k][j];
????????????}
?????????}
?????}
}?
//高斯消去法求方程組的解,讀者也可以用其他的方法求方程組的解。?
void?Gauss(int?a[][SIZE]?int?b[][SIZE]?int?rowA?int?colA){
float?A[50][50];//存放元素的矩陣A?
float?B[50];//存放結果的元素B?
????int?row=rowA;
????int?col=colA;
//輸入矩陣A
int?i?j?k;?
for(i=0;i
{
for(j=0;j {
A[i][j]=a[i][j];
}
cout< }
//輸入矩陣B?
for(i=0;?i
{
B[i]=b[i][0];
}?
cout<
//判斷能否用高斯消元法,如果矩陣主對角線上有0元素存在是不能使用的?
for(i=0;i
{
if(A[i][i]==0)
{
cout<<“這個矩陣不能夠使用高斯消元法!“< break;?
}
}?
float?C[row];//存儲初等行變換的系數,用于行的相減
//消元的整個過程算法
for(k=0;
- 上一篇:C++局域網文件傳輸
- 下一篇:DDA畫線算法
評論
共有 條評論