矩陣乘法:
設c=a*b;
a的列數(必須等於b的行數(
c的列數=b的列數,c的行數=a的行數;
c[i][j]為a的第i行與b的第j列乘積累加;
具體實現:
for(i=0;i<
for(j=0;j<
for(k=0;k<
c[i][j] += a[i][k] * b[k][j];
}}}**:int multmatrix(matrix dat,matrix *res)//矩陣左乘
res->m =
res->n =
for(i=0; i< i++)
}return 1;
}矩陣求逆:
必須為方陣;
對於k從0到n-1作如下幾步,n為方陣維數;
1.從第k行,第k列,開始的右下角子陣中選取絕對值最大的元素a[r][c],並記住此元素所在的行號和列號,分別以一維陣列is[n],與js[n]儲存, 設r為絕對值最大的行號,c為絕對值最大的列號,is[k]=r , js[k]=c, 如果a[k][k]的右下角矩陣全為0,則該矩陣無法求逆;
再通過行交換與列交換將它交換到主元素位置上.這一步稱全選主元;
a[k][j]<->a[r][j]; j =0,1,2…n-1; r != k;
a[i][k]<->a[i][c]; i =0,1,2…n-1; c != k;
= 1/a[k][k]
= a[k][j]*a[k][k], j=0,1,...n-1; i,j!=k
i,j=0,1,...,n-1; i,j!=k
i=0,1,...,n-1; i!=k;
對於k從n-1到0作恢復,原則如下
在全選主元過程中,先交換的行,列後進行恢復;原來的行(列)交換用列(行)交換來恢復;
a[k][j]<->a[c][j];a[i][k]<->a[i][r]; i , j =0,1,2…n-1; c , r != k;
**:int inv(matrix dat,matrix *res)
else
for(k=>=0;k--)
*res = dat;
return 1;
}}求行列式:
必須為方陣;
對於k從0到n-1作如下幾步,n為方陣維數
1. 從第k行,第k列,開始的右下角子陣中,找出絕對值最大的元素a[is][js],把其下標儲存在is,js中,如果a[k][k]的右下角矩陣全為0,則行列式的值為0;
2. 再通過行交換與列交換將它交換到主元素位置上.這一步稱全選主元;
a[k][j]<->a[is][j]; j =0,1,2…n-1; is != k;
a[i][k]<->a[i][js]; i =0,1,2…n-1; js != k;
交換時記錄交換次數,交換次數為奇數時,要把所求得的行列式*(-1);
3. det = det * a[k][k];
4. d = a[i][k] / a[k][k] ; i = k+1,k+2,…n-1; d為第i行第k列元素a[i][k]與a[k][k]的比值;
5. a[i][j] = a[i][j] – d * a[k][j]; i,j = k+1,k+2…n-1; i行減去k行的d倍數(第j列);
結束k的迴圈
det = det * a[n-1][n-1];//若交換次數為奇數,則*-1;
det為返回的行列式值;
**:double det(matrix dat)
for(k=0; k<= k++)
如果右下角矩陣全為0,則行列式值為0
if(q==0.0)
不是當前行,則置換第k行和第is行
if(is != k)
不是當前列,則置換第k行和第js行
if(js != k)
det = det*
for(i=k+1;i<
}det = f*det*
教案四演算法和演算法的描述
用輾轉相除法求最大公約數 教學目標 1.了解並掌握輾轉相除法的基本思想。2.學會用輾轉相除法求最大公約數。3.培養學生用多種方法解決問題的能力。教學方法 講授法與討論法相結合。教學過程 1 引入 1 教師舉例講解輾轉相除法 例如 求164與64的最大公約數 基本思想 164 64 2 36 64 3...
12演算法描述與設計
演算法分析 從1開始順次取出乙個自然數判斷它被3 5 7整除後的餘數是否為2 3 2。如果是,則這個數即是所求的數,求解結束 否則,用下乙個數再試,直到找到這個數為止。演算法描述 第一步 將n初始值賦為1 第二步 如果n被3 5 7整除後的餘數分別為2 3 2,則輸出n的值,轉到第四步。第三步 將n...
第1章C語言概述與演算法描述
1.c程式的基本組成單位是函式。2.c語言本生沒有輸入輸出語句。3.結構化程式有順序結構 選擇結構 迴圈結構三種基本結構組成。5.在c語言中,乙個變數代表記憶體中乙個儲存單元。7.1 演算法的特性 有窮性 包含有限的操作步驟。確定性 演算法中的每乙個步驟都應當是確定的。有零個或多個輸入 輸入是指在執...