版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、算法分析與設(shè)計(jì)課程論文通過C語言實(shí)現(xiàn)矩陣的相關(guān)操作1 / 271 摘要本文在Microsoft Visual Studio 2010的編譯環(huán)境下,通過C語言進(jìn)行一些矩陣的基本操作,包括矩陣的設(shè)置,加減乘除,數(shù)乘運(yùn)算。求矩陣的逆等操作。關(guān)鍵詞矩陣 C語言 逆矩陣2 正文1. 引言矩陣的相關(guān)知識(shí)只是是高等數(shù)學(xué)的基礎(chǔ),但是其龐大的運(yùn)算量和紛繁的步驟讓人卻步。雖然有Matlab等軟件可以實(shí)現(xiàn)矩陣的相關(guān)操作,但是我校一些專業(yè)并不學(xué)習(xí)數(shù)學(xué)實(shí)驗(yàn),故通過C語言實(shí)現(xiàn)矩陣的操作也是一種可行的方法,本文列舉的了一些矩陣的加減乘除等基本運(yùn)算規(guī)則,還有對(duì)矩陣進(jìn)行轉(zhuǎn)置,也有矩陣求逆的相關(guān)操作。同時(shí),還介紹了行列式的計(jì)算,
2、通過運(yùn)行該程序,可以大大簡(jiǎn)化行列式的計(jì)算量。2. 算法分析矩陣的初始化相關(guān)概念在數(shù)學(xué)中,矩陣(Matrix)是一個(gè)按照長(zhǎng)方陣列排列的復(fù)數(shù)或?qū)崝?shù)集合,最早來自于方程組的系數(shù)及常數(shù)所構(gòu)成的方陣。這一概念由19世紀(jì)英國(guó)數(shù)學(xué)家凱利首先提出。矩陣是高等代數(shù)學(xué)中的常見工具,也常見于統(tǒng)計(jì)分析等應(yīng)用數(shù)學(xué)學(xué)科中。在物理學(xué)中,矩陣于電路學(xué)、力學(xué)、光學(xué)和量子物理中都有應(yīng)用;計(jì)算機(jī)科學(xué)中,三維動(dòng)畫制作也需要用到矩陣。 矩陣的運(yùn)算是數(shù)值分析領(lǐng)域的重要問題。將矩陣分解為簡(jiǎn)單矩陣的組合可以在理論和實(shí)際應(yīng)用上簡(jiǎn)化矩陣的運(yùn)算。對(duì)一些應(yīng)用廣泛而形式特殊的矩陣,例如稀疏矩陣和準(zhǔn)對(duì)角矩陣,有特定的快速運(yùn)算算法。理論分析 在C語言中,
3、可以使用二維數(shù)組來描繪一個(gè)矩陣。值得注意的是,在二維數(shù)組中,必須標(biāo)明列數(shù),否則編譯器就會(huì)報(bào)錯(cuò)。故二維極其多維數(shù)組使用時(shí)要注意數(shù)組下標(biāo)。代碼實(shí)現(xiàn)#include <stdio.h>int main()int juzheng 100100;int i , j , a , b ;printf("請(qǐng)輸入矩陣的行數(shù)a 列數(shù)b n") ;scanf ("%d %d",&a,&b);for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)scanf ("%d",&juzhe
4、ngij);printf ("你所輸入的矩陣是:n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)printf("%d ",juzhengij);printf ("n");return 0;矩陣的相加相關(guān)概念加法矩陣的加法滿足下列運(yùn)算律(A,B,C都是同型矩陣):A+B=B+AA+B+C=A+(B+C)應(yīng)該注意的是只有同型矩陣之間才可以進(jìn)行加法理論分析:矩陣相加就是將兩個(gè)矩陣的相同位置的元素相加,相加的值輸出,通過循環(huán)語句,可以很好的實(shí)現(xiàn)該過程,如果要改成減法的話,就可以改成pri
5、ntf(“%d”,juzhen1ij-juzhen2ij)。這樣就可以實(shí)現(xiàn)矩陣的減法。代碼實(shí)現(xiàn)#include <stdio.h>int main()int juzheng1 100100,juzheng2100100;int i , j , a , b ;printf("請(qǐng)輸入矩陣的行數(shù)a和列數(shù)bn") ;scanf ("%d %d",&a,&b);printf("輸入矩陣1n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)scanf ("%
6、d",&juzheng1ij);printf("輸入矩陣2n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)scanf ("%d",&juzheng2ij);printf ("您所輸入的矩陣1是:n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)printf("%d ",juzheng1ij);printf ("n");printf ("n您所輸入的矩陣
7、2是:n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)printf("%d ",juzheng2ij);printf ("n");printf ("n您輸出的矩陣是:n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)printf("%d ",juzheng1ij+juzheng2ij);printf ("n");return 0;矩陣的數(shù)乘相關(guān)概念矩陣的數(shù)乘滿足以下運(yùn)算律:矩陣
8、的加減法和矩陣的數(shù)乘合稱矩陣的線性運(yùn)算。理論分析矩陣的數(shù)乘,就是把要乘的那個(gè)數(shù)乘上每一個(gè)元素。要想實(shí)現(xiàn)矩陣的數(shù)乘,只需在每一個(gè)元素上乘上那個(gè)數(shù)就行了。通過對(duì)二維數(shù)組的遍歷,就可以實(shí)現(xiàn)該項(xiàng)功能。代碼實(shí)現(xiàn)#include <stdio.h>int main()int juzheng 100100;int i , j , a , b ,u;printf("請(qǐng)輸入矩陣的行數(shù)a 列數(shù)b n") ;scanf ("%d %d",&a,&b);printf("請(qǐng)輸入需要數(shù)乘的那個(gè)數(shù)un") ;scanf ("%
9、d",&u);for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)scanf ("%d",&juzhengij);printf ("你所輸出的矩陣是:n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)printf("%d ",u*juzhengij);printf ("n");return 0;求矩陣中的最大最小值相關(guān)概念矩陣中所有元素存在最大最小值,通過在矩陣中的比較大小,就可以找到矩陣中所
10、有元素的最大最小值。理論分析在一個(gè)矩陣中,存在最大值與最小值,通過在循環(huán)語句中比較,就可以得出一個(gè)矩陣中所有元素的最大最小值。通過初始化一個(gè)max與min,然后將矩陣中個(gè)個(gè)元素與其進(jìn)行比較,就可以得出矩陣中個(gè)個(gè)元素的最大值與最小值。代碼實(shí)現(xiàn)#include <stdio.h>int main()int juzheng 100100;int i , j , a , b , min , max ;max = -100000;min = 100000;printf("請(qǐng)輸入矩陣的行數(shù)a 列數(shù)b n") ;scanf ("%d %d",&a,
11、&b);for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)scanf ("%d",&juzhengij);for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)if (juzhengij > max)max = juzhengij; if (juzhengij < min)min = juzhengij;printf ("n");printf("max = %d min = %d",max,min);return 0;矩
12、陣的乘法相關(guān)概念兩個(gè)矩陣的乘法僅當(dāng)?shù)谝粋€(gè)矩陣A的列數(shù)和另一個(gè)矩陣B的行數(shù)相等時(shí)才能定義。如A是m×n矩陣和B是n×p矩陣,它們的乘積C是一個(gè)m×p矩陣,它的一個(gè)元素:并將此乘積記為:.例如:矩陣的乘法滿足以下運(yùn)算律:結(jié)合律:ABC=A(BC)左分配律:(A+B)*C=AC+BC右分配律:A*(B+C)=AC+BC但是矩陣乘法不滿足交換律。理論分析 矩陣乘法必須是a*b的矩陣和b*n的矩陣形式才能相乘,通過矩陣乘法的運(yùn)算法則,就可以得到新的矩陣。值得注意的是代碼實(shí)現(xiàn)#include <stdio.h>int main()int juzheng1 1001
13、00,juzheng2100100;int i , j , a , b , n ,d , k;printf("請(qǐng)輸入矩陣的行數(shù)a和列數(shù)bn") ;scanf ("%d %d",&a,&b);printf("輸入矩陣1n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)scanf ("%d",&juzheng1ij);printf("矩陣2為a行n列,輸入nn");scanf ("%d",&n)
14、;printf("輸入矩陣2:n");for (i = 0;i < b ;i+)for (j = 0;j < n ;j+)scanf ("%d",&juzheng2ij);printf("兩個(gè)矩陣的乘積y為:n");for(i = 0;i < a;i+)for(j = 0;j < n;j+)for(d = 0,k = 0;k < n;k+)d += juzheng1ik * juzheng2kj;printf("%d ",d);printf("n");求轉(zhuǎn)置
15、矩陣把矩陣A的行換成相應(yīng)的列,得到的新矩陣稱為A的轉(zhuǎn)置矩陣,記作或A。理論分析 只需要將輸出是行數(shù)和列數(shù)交換一下就行了,在循環(huán)中將輸出結(jié)果輸出就可以了。對(duì)于數(shù)組下標(biāo)的操作,有時(shí)可以很大的降低算法的復(fù)雜度。所以對(duì)于數(shù)組下標(biāo)操作的小技巧,要留意。代碼實(shí)現(xiàn)#include <stdio.h>int main()int juzheng 100100;int i , j , a , b ;printf("請(qǐng)輸入矩陣的行數(shù)a列數(shù)b n") ;scanf ("%d %d",&a,&b);for (i = 0;i < a ;i+)for
16、 (j = 0;j < b ;j+)scanf ("%d",&juzhengij);printf ("轉(zhuǎn)置矩陣是:阰n");for (i = 0;i < a ;i+)for (j = 0;j < b ;j+)printf("%d ",juzhengji);printf ("n");return 0;求矩陣的逆設(shè)A是數(shù)域上的一個(gè)n階方陣,若在相同數(shù)域上存在另一個(gè)n階矩陣B,使得:AB=BA=I。 則我們稱B是A的逆矩陣,而A則被稱為可逆矩陣。理論分析伴隨矩陣法求逆矩陣如果矩陣A可逆,則
17、60; 其中是A的伴隨矩陣。代碼首先求出A的伴隨矩陣,代碼#include<stdio.h>#define N 10int getA(int arcsNN,int n)if(n=1)return arcs00;int ans = 0;int tempNN;int i,j,k;for(i=0;i<n;i+)for(j=0;j<n-1;j+)for(k=0;k<n-1;k+)tempjk = arcsj+1(k>=i)?k+1:k;int t = getA(temp,n-1);if(i%2=0)ans += arcs0i*t;elseans -= ar
18、cs0i*t;return ans;void getAStart(int arcsNN,int n,int ansNN)if(n=1)ans00 = 1;return;int i,j,k,t;int tempNN;for(i=0;i<n;i+)for(j=0;j<n;j+)for(k=0;k<n-1;k+)for(t=0;t<n-1;t+)tempkt = arcsk>=i?k+1:kt>=j?t+1:t;ansji = getA(temp,n-1);if(i+j)%2 = 1)ansji = - ansji;int main() int arcsNN;in
19、t astarNN;int i,j;int n;while(scanf("%d",&n)!=EOF && n)for(i=0;i<n;i+)for(j=0;j<n;j+)scanf("%d",&arcsij);int a = getA(arcs,n);if(a=0)printf("can not transform!n");elsegetAStart(arcs,n,astar);for(i=0;i<n;i+)for(j=0;j<n;j+)printf("%.3lf &q
20、uot;,(double)astarij/a);printf("n");printf("n");return 0;求行列式相關(guān)概念一個(gè)n階方塊矩陣A的行列式可直觀地定義如下:其中,Sn是集合 1, 2, .,n上置換的全體,即集合 1, 2, .,n到自身上的一一映射(雙射)的全體;表示對(duì)Sn全部元素的求和,即對(duì)于每個(gè)Sn, 在加法算式中出現(xiàn)一次;對(duì)每一個(gè)滿足1i,jn的數(shù)對(duì)(i,j),ai, j是矩陣A的第i行第j列的元素。sgn()表示置換Sn的符號(hào)差,具體地說,滿足1i<jn但(i) >(j)的有序數(shù)對(duì)(i,j)稱為的一個(gè)逆序
21、。如果的逆序共有偶數(shù)個(gè),則sgn()1,如果共有奇數(shù)個(gè),則sgn()-1。理論分析輸入一個(gè)矩陣,按照行列式的定義展開,通過循環(huán),就可以達(dá)到實(shí)現(xiàn)最后的目標(biāo)。行列式的計(jì)算是一個(gè)復(fù)雜的過程,通過編程,可以直接輸入該行列式,就可以輸出其結(jié)果,這樣大大減少了運(yùn)算量,節(jié)約了時(shí)間。#include<stdio.h>int main() int z , r , s , j , i ; double a2020 , m , k ;m =1.0;printf("請(qǐng)輸入階數(shù):");scanf("%d",&r);printf("請(qǐng)輸入數(shù)字?n&qu
22、ot;);for(i=0;i<r;i+)for(j=0;j<r;j+)scanf("%lf",&aij);for(z = 0 ; z < r-1 ; z+)for(i = z ; i < r-1 ; i+)if(azz=0)for(i=z;azz=0;i+)for(j=0;j<r;j+)azj=azj+ai+1j;if(azz!=0)break;k=-ai+1z/azz;for(j=z;j<r;j+)ai+1j=k*(azj)+ai+1j;for(z=0;z<r;z+)m=m*(azz);printf("%f&qu
23、ot;,m);return 0;3. 結(jié)論與反思在Microsoft Visual Studio 2010的編譯環(huán)境下,通過C語言進(jìn)行一些矩陣的基本操作,可以極大的簡(jiǎn)化我們的運(yùn)算,這就是計(jì)算機(jī)科學(xué)的好處。 而矩陣在高等數(shù)學(xué)中扮演極其重要的作用。在其他科學(xué)中也扮演重要角色。矩陣的運(yùn)算是數(shù)值分析領(lǐng)域的重要問題。將矩陣分解為簡(jiǎn)單矩陣的組合可以在理論和實(shí)際應(yīng)用上簡(jiǎn)化矩陣的運(yùn)算。對(duì)一些應(yīng)用廣泛而形式特殊的矩陣,例如稀疏矩陣和準(zhǔn)對(duì)角矩陣,有特定的快速運(yùn)算算法。關(guān)于矩陣相關(guān)理論的發(fā)展和應(yīng)用,請(qǐng)參考矩陣?yán)碚?。在天體物理、量子力學(xué)等領(lǐng)域,也會(huì)出現(xiàn)無窮維的矩陣,是矩陣的一種推廣。通過對(duì)于在C語言下對(duì)于矩陣進(jìn)行相關(guān)
24、的算法分析??梢园l(fā)現(xiàn),對(duì)于大多數(shù)問題,可以調(diào)用一些函數(shù),通過函數(shù)的組合,來實(shí)現(xiàn)一些復(fù)雜的問題。由此其實(shí)最好的方法就是將個(gè)個(gè)方法封裝起來,例如將加減乘除,數(shù)乘等運(yùn)算封裝成一個(gè)一個(gè)函數(shù),完全可以建立屬于自己的一個(gè)頭文件,然后就可以通過調(diào)用頭文件中的函數(shù)來大大簡(jiǎn)化代碼量通過這次結(jié)業(yè)論文,加深了對(duì)于C語言的理解,尤其是對(duì)于二維數(shù)組的使用。數(shù)組,是C語言中重要的組成部分,多練習(xí)之后才可以熟練的使用。所以這一次結(jié)課論文,對(duì)于我來說是一次很好的練習(xí)C語言的機(jī)會(huì)。對(duì)于數(shù)組的使用,要善于使用數(shù)組下標(biāo)和相對(duì)應(yīng)的組內(nèi)元素的關(guān)系。這有點(diǎn)像哈希表,通過組建一組映射來得以建立相關(guān)關(guān)系。這種方法可以極大簡(jiǎn)化算法的時(shí)間復(fù)雜度
25、,這是一種以空間換取時(shí)間的方法。這樣,就可以達(dá)到最終的目的。4 參考文獻(xiàn)C程序設(shè)計(jì),譚浩強(qiáng),清華大學(xué)出版社c primer plus,作者Stephen Prata,譯者云巔工作室,人民郵電出版社矩陣 ,百度百科 線性代數(shù)與空間解析幾何,黃廷祝,高等教育出版社C語言矩陣的運(yùn)算,百度文庫(kù)思考題(1)在下圖乘法豎式中,每一個(gè)星號(hào)代表一個(gè)數(shù)位,若出現(xiàn)的數(shù)字有且僅有2,3,5,7四種,你能將這個(gè)豎式還原嗎? * * * * * * * * * * * * * * * *程序代碼#include <stdio.h>int main ()int a5,b4;int biaozhun4=2,3,
26、5,7;int e , f , g , h , i , k , l , m ;int chengyi,chenger,he,zhunqueshu,diyibu,dierbu;for ( e = 0; e < 4 ; e+)for (f = 0 ; f < 4 ;f+)for (g = 0; g < 4;g+) chengyi = 100 * biaozhune + 10 * biaozhunf + 1 * biaozhung; for (h = 0;h < 4; h+) for (i = 0 ; i < 4; i+) chenger = 10 * biaozhun
27、h + 1*biaozhun i; he = chengyi * chenger; diyibu = chengyi * biaozhuni; b0 = diyibu % 10; b1 = (diyibu / 10) %10; b2 = (diyibu / 100) % 10; b3 = (diyibu / 1000) % 10; if (b0 = 2 | b0 = 3 | b0 = 5 | b0 = 7) && (b1 = 2 | b1 = 3 | b1 = 5 | b1 = 7) && (b2 = 2 | b2 = 3 | b2 = 5 | b2 = 7)
28、&& (b3 = 2 | b3 = 3 | b3 = 5 | b3 = 7) ) diyibu = b0*1+b1*10+b2*100+b3*1000; else continue; a0 = he % 10; a1 = (he / 10) % 10; a2 = (he / 100) % 10; a3 = (he / 1000) % 10; a4 = (he / 10000) % 10; if (a0 = 2 | a0 = 3 | a0 = 5 | a0 = 7) && (a1 = 2 | a1 = 3 | a1 = 5 | a1 = 7) &&
29、 (a2 = 2 | a2 = 3 | a2 = 5 | a2 = 7) && (a3 = 2 | a3 = 3 | a3 = 5 | a3 = 7) &&(a4 = 2 | a4 = 3 | a4 = 5 | a4 = 7) )zhunqueshu =a0*1+a1*10+a2*100+a3*1000+a4*10000;printf ("這個(gè)數(shù)是%dn",zhunqueshu); 思考題二擲骰子問題游戲規(guī)則:每個(gè)骰子有六面,點(diǎn)數(shù)分別是1,2,3,4,5,6游戲者在程序開始時(shí)輸入一個(gè)無符號(hào)整數(shù),作為產(chǎn)生隨機(jī)數(shù)的種子。每輪擲兩次骰子,第一輪如果和數(shù)為7或者11就為勝,游戲結(jié)束;和數(shù)為2,3,12則為負(fù),游戲結(jié)束;和數(shù)為其他值,則以該值作為自己的點(diǎn)數(shù),繼續(xù)第二輪,第三輪。直到某輪的和數(shù)等于點(diǎn)數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 稀土后處理工班組安全測(cè)試考核試卷含答案
- 鑄管制芯工安全知識(shí)競(jìng)賽評(píng)優(yōu)考核試卷含答案
- 漁船機(jī)駕長(zhǎng)常識(shí)評(píng)優(yōu)考核試卷含答案
- 海參池塘養(yǎng)殖培訓(xùn)
- 茶葉拼配師安全素養(yǎng)評(píng)優(yōu)考核試卷含答案
- 礦石破碎篩分工操作知識(shí)能力考核試卷含答案
- 橋梁工程培訓(xùn)
- 老年人入住老人教育培訓(xùn)制度
- 海上作業(yè)安全培訓(xùn)
- 酒店客房清潔保養(yǎng)制度
- 市政設(shè)施巡查及維護(hù)方案
- 大型活動(dòng)安保工作預(yù)案模板
- 2025年文化遺產(chǎn)數(shù)字化保護(hù)與開發(fā):技術(shù)創(chuàng)新與經(jīng)濟(jì)效益研究報(bào)告
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)及答案詳解參考
- 南瑞9622型6kV變壓器差動(dòng)保護(hù)原理及現(xiàn)場(chǎng)校驗(yàn)實(shí)例培訓(xùn)課件
- 統(tǒng)編版(2024)七年級(jí)上冊(cè)道德與法治期末復(fù)習(xí)必背知識(shí)點(diǎn)考點(diǎn)清單
- 山西焦煤考試題目及答案
- 2026年春節(jié)放假前員工安全培訓(xùn)
- (2025版)成人肺功能檢查技術(shù)進(jìn)展及臨床應(yīng)用指南解讀課件
- 《春秋》講解課件
- 青少年抑郁障礙的護(hù)理與康復(fù)訓(xùn)練
評(píng)論
0/150
提交評(píng)論