矩阵和数组的操作 实验报告

合集下载

Matlab实验报告(二)矩阵和数组操作

Matlab实验报告(二)矩阵和数组操作

Matlab实验报告(二)矩阵和数组操作一、实验目的1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。

2.学习矩阵和数组的加减运算与乘法。

3.掌握对数组中元素的寻访与赋值,会对数组进行一般的操作。

二、预备知识1.常用的产生特殊矩阵的函数?eye(m,n) 单位阵?rand(m,n) 随机矩阵?randn(m,n) 正态分布的随机矩阵?zeros(m,n) 零矩阵?ones(m,n) 全部元素都为1的矩阵?compan(A) 矩阵A的伴随矩阵?bankel(m,n) n维Hankel矩阵?invhilb(n) n维逆Hilbert矩阵?magic(n) n维Magic矩阵?toeplitz(m,n) Toeplitz矩阵?wilkinson(n) n维Wilkinson特征值测试矩阵?handamard(n) n 维Handamard矩阵?hilb(n) n维Hilbert矩阵?kron(A,B) Kronecker 张量积?pascal(n) n维Pascal矩阵?vander(A) 由矩阵A产生Vandermonde矩阵2.通过矩阵的结构变换,获得新矩阵表2 矩阵结构变化产生新矩阵L=tril(A) L=tril(A,k) 0 U=triu(A) U主对角线及以上的元素取矩阵A的元素,其余为0 L主对角线及以下元素取矩阵A 的元素,其余为0 L及第k条对角线及以下元素取矩阵A的元素,其余为U=triu(A,k) 0 B=rot90(A) B=rot90(A,k) B=fliplr(A) B=flipud(A) B=reshape(A,m,n) U 第k条对角线及以上的元素取矩阵A的元素,其余为矩阵A逆时针旋转90°得到B 矩阵A逆时针旋转k*90°得到B 矩阵A左右翻转得到B 矩阵A上下翻转得到B 将矩阵A的元素重新排列,得到m*n的新矩阵(m*n就等于A的行列式之积。

矩阵的基本操作实验报告(3篇)

矩阵的基本操作实验报告(3篇)

第1篇一、实验目的1. 理解矩阵的基本概念及其应用。

2. 掌握矩阵的创建、显示、赋值、转置、求逆、求行列式等基本操作。

3. 熟悉C语言在矩阵操作中的应用。

二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 语言:C语言三、实验内容1. 矩阵的创建与赋值2. 矩阵的显示3. 矩阵的转置4. 矩阵的求逆5. 矩阵的行列式求解6. 矩阵的加法、减法、乘法四、实验步骤1. 创建矩阵```cinclude <stdio.h>define MAX_SIZE 10int main() {int matrix[MAX_SIZE][MAX_SIZE];int row, col, i, j;printf("请输入矩阵的行数和列数:\n");scanf("%d %d", &row, &col);printf("请输入矩阵的元素:\n");for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {scanf("%d", &matrix[i][j]);}}return 0;}```2. 显示矩阵```cvoid printMatrix(int matrix[][MAX_SIZE], int row, int col) { int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {printf("%d ", matrix[i][j]);}printf("\n");}}```3. 矩阵转置```cvoid transposeMatrix(int matrix[][MAX_SIZE], int row, int col, int transposed[][MAX_SIZE]) {int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {transposed[j][i] = matrix[i][j];}}}```4. 矩阵求逆```c// 略,求逆算法较为复杂,可参考相关资料```5. 矩阵的行列式求解```c// 略,行列式求解算法较为复杂,可参考相关资料```6. 矩阵的加法、减法、乘法```cvoid addMatrix(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE], int row, int col, int result[][MAX_SIZE]) {int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {result[i][j] = matrix1[i][j] + matrix2[i][j];}}}void subtractMatrix(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE],int row, int col, int result[][MAX_SIZE]) {int i, j;for (i = 0; i < row; i++) {for (j = 0; j < col; j++) {result[i][j] = matrix1[i][j] - matrix2[i][j];}}}void multiplyMatrix(int matrix1[][MAX_SIZE], int matrix2[][MAX_SIZE],int row1, int col1, int col2, int result[][MAX_SIZE]) {int i, j, k;for (i = 0; i < row1; i++) {for (j = 0; j < col2; j++) {result[i][j] = 0;for (k = 0; k < col1; k++) {result[i][j] += matrix1[i][k] matrix2[k][j];}}}}```五、实验结果与分析1. 创建矩阵、显示矩阵、转置矩阵等操作均能正常进行。

MATLAB中关于矩阵初等变换实验报告

MATLAB中关于矩阵初等变换实验报告

实验一一、实验目的熟悉MATLAB中关于矩阵初等变换的方法及矩阵运算的各种命令二、实验内容1、启动与退出2、数、数组、矩阵的输入>> a=5a =5>> b=2-5ib =2.0000 - 5.0000i>> a=5,a =5>> b=[1,2,3,4]b =1 2 3 4>> c=1:2:11c =1 3 5 7 9 11>> d=linspace(1,11,6)d =1 3 5 7 9 11>> A=[2,3,5;1,3,5;6,9,4]A =2 3 51 3 56 9 43.矩阵大小和定位:>> A=[3,5,6;2,5,8;3,5,9;3,7,9]; >> d=numel(A)d =12>> [n,m]=size(A)n =4m =3>> [i,j]=find(A>3)i =12341234j =222233334.矩阵的块操作>> A(2,:);>> A([1,3],:);>> A(2:3,1:2)ans =2 53 5>> A=[3,5,6;2,5,8;3,5,9;3,7,9]; >> A([1,3],:)=A([3,1],:)A =3 5 92 5 83 5 63 7 9>> A(2,:)=4;>> A(find(A==3))=-3;>> A(2,:)=[]A =-3 5 6-3 5 9-3 7 9>> A=[3,5,6;2,5,8;3,5,9;3,7,9]A =3 5 62 5 83 5 93 7 9>> diag(A,1)ans =58>> tril(A,1)ans =3 5 02 5 83 5 93 7 9>> triu(A,1)ans =0 5 60 0 80 0 00 0 05.矩阵的翻转操作>> A=[3,5,6;2,5,8;3,5,9;3,7,9]; >> flipud(A)ans =3 7 93 5 92 5 83 5 6>> fliplr(A)ans =6 5 38 5 29 5 39 7 3>> rot90(A)ans =6 8 9 95 5 5 73 2 3 36.特殊矩阵的产生>> a=eye(3)a =1 0 00 1 00 0 1>> b=ones(2,3)b =1 1 11 1 1>> c=zeros(3,4)c =0 0 0 00 0 0 00 0 0 0>> d=rand(2,3)d =0.9501 0.6068 0.89130.2311 0.4860 0.7621 >> magic(4)ans =16 2 3 135 11 10 89 7 6 124 14 15 17.数的运算>> 4+2ans =6>> 4*2ans =8>> 4/2ans =2 >> 4\2ans =0.5000>> 4^3ans =64>> sqrt(9)ans =3>> exp(3)ans =20.0855>> log(4)ans =1.3863>> log2(4)ans =28.矩阵的运算>> a=[1,2,3;4,5,6;7,8,9]a =1 2 34 5 67 8 9>> a'ans =1 4 72 5 83 6 9>> det(a)ans =>> rank(a)ans =2>> inv(a)Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 1.541976e-018. ans =1.0e+016 *-0.4504 0.9007 -0.45040.9007 -1.8014 0.9007-0.4504 0.9007 -0.4504 >> eig(a)ans =16.1168-1.1168-0.0000>> [X,D]=eig(a)X =-0.2320 -0.7858 0.4082-0.5253 -0.0868 -0.8165-0.8187 0.6123 0.4082D =16.1168 0 00 -1.1168 00 0 -0.0000 >> trace(a)ans =15>> 3*aans =3 6 912 15 1821 24 27>> b=[2 3 4;4 5 6;6 7 8]b =2 3 44 5 66 7 8>> a+bans =3 5 78 10 1213 15 17>> a-bans =-1 -1 -10 0 01 1 1>> a*bans =28 34 4064 79 94100 124 148>> a/bWarning: Matrix is singular to working precision.ans =NaN NaN NaNNaN NaN NaNNaN NaN NaN>> a\bWarning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 1.541976e-018. ans =-0.6667 -5.6667 -6.66671.3333 10.3333 11.33330 -4.0000 -4.0000>> a^2ans =30 36 4266 81 96102 126 150>> a.*bans =2 6 1216 25 3642 56 729.变量的存储和调用>> a=2,b=3,c=5;a =2b =3>> save data a b c>> load data10.列出工作空间所有变量>> whosName Size Bytes Classa 1x1 8 double arrayb 1x1 8 double arrayc 1x1 8 double arrayGrand total is 3 elements using 24 bytes11.联机求助>> help sqrtSQRT Square root.SQRT(X) is the square root of the elements of X. Complexresults are produced if X is not positive.See also sqrtm, realsqrt, hypot.Overloaded functions or methods (ones with the same name in other directories) help sym/sqrt.mReference page in Help browserdoc sqrt12.多维数组建立>> a1=[1 2 3;4 5 6;7 8 9];a2=a1',a3=a1-a2a2 =1 4 72 5 83 6 9a3 =0 -2 -42 0 -24 2 0>> a4=cat(3,a1,a2,a3)a4(:,:,1) =1 2 34 5 67 8 9a4(:,:,2) =1 4 72 5 83 6 9a4(:,:,3) =0 -2 -42 0 -24 2 013.弥量积>> a=[2 3;4 6;7 9];b=[2 4;6 8]; >> c=kron(a,b)%ac =4 8 6 1212 16 18 248 16 12 2424 32 36 4814 28 18 3642 56 54 72 14.矩阵的范数>> a=[2 3;4 6;7 9];>> n=norm(a)n =13.9560>> n=norm(a,1)n =18>> n=norm(a,2)n =13.9560>> n=norm(a,inf)n =16>> n=norm(a,'fro')13.964215.LU分解>> a=[1 2 3;4 5 6;7 8 90;]a =1 2 34 5 67 8 90>> [L,U]=lu(a)L =0.1429 1.0000 00.5714 0.5000 1.00001.0000 0 0 U =7.0000 8.0000 90.00000 0.8571 -9.85710 0 -40.5000 >> [L,U,P]=lu(a)L =1.0000 0 00.1429 1.0000 00.5714 0.5000 1.0000 U =7.0000 8.0000 90.00000 0.8571 -9.85710 0 -40.5000P =0 0 11 0 00 1 016.QR分解>> a=[1 2 3;4 5 6;7 8 9;10 11 12];>> [Q,R]= QR(a)??? Undefined command/function 'QR'.>> [Q,R]=qr(a)Q =-0.0776 -0.8331 0.5405 -0.0885 -0.3105 -0.4512 -0.6547 0.5209 -0.5433 -0.0694 -0.3121 -0.7763-0.7762 0.3124 0.4263 0.3439 R =-12.8841 -14.5916 -16.29920 -1.0413 -2.08260 0 -0.00000 0 0。

实验2 矩阵与数组

实验2 矩阵与数组
A=rand(4,5)为生成一个4行5列的随机矩阵, A(A<0.5)=0为所生成的4行5列的随机矩阵中的元素若小于0.5的则为零其他元素不变。
8.A=[1 2 3 4;5 6 7 8; 9 10 11 12];
b=[1 -1 2 -2];
B=A-[b;b;b]
B = 0 3 1 6
4 7 5 10
z =3.2563 58.9597 +10.2691i
2.
A=[3 -7 8 15 67;0 5 8 -10 11;5 -7 6 18 29];
A(:,3)
ans =
8
8
6
A(2,:)
ans =
0 5 8 -10 11
3.
x=[2 8 5;9 7 1];
b=[2 4 5];
max(x)
min(x)
ans =9 8 5
A =
1 1 2
-1 0 3
4 -5 6
2矩阵的结构操作
输入矩阵后,可以对矩阵进行的主要操作包括矩阵的扩充,矩阵元素的提取,矩阵元素的部分删除等。下面对其作简单的介绍
(1)矩阵的扩充
例如,用下述命令可以在上述矩阵 下面再加上一个行向量:
>> A(4,:)=[1 3 2]
A =
1 1 2
-1 0 3
4 -5 6
5.
x=[1 4;8 3];
inv(x)
diag(x)
sum(x,1)
sum(x,2)
ans =-0.1034 0.1379
0.2759 -0.0345
ans = 1
3
ans =9 7
ans = 5
11
sum(x(:))

c语言数组实验报告

c语言数组实验报告

c语言数组实验报告C 语言数组实验报告一、实验目的本次实验旨在深入理解和掌握 C 语言中数组的基本概念、使用方法以及常见的操作。

通过实际编程和调试,提高对数组的运用能力,为今后解决更复杂的程序设计问题打下坚实的基础。

二、实验环境操作系统:Windows 10编译器:Visual Studio 2019三、实验内容1、一维数组的定义、初始化和遍历定义一个包含整数的一维数组,如`int arr10;`使用初始化列表为数组赋值,例如`int arr5 ={1, 2, 3, 4, 5};`通过循环遍历数组,输出每个元素的值。

2、一维数组的查找和修改实现线性查找算法,在数组中查找特定的元素。

根据找到的元素位置,修改其值。

3、二维数组的定义、初始化和遍历定义二维数组,如`int arr234;`以不同的方式初始化二维数组,如按行初始化或整体初始化。

使用双重循环遍历二维数组。

4、二维数组的应用:矩阵运算实现两个矩阵的相加和相乘运算。

四、实验步骤1、一维数组的定义、初始化和遍历编写代码如下:```cinclude <stdioh>int main(){int arr10;int i;//初始化数组for (i = 0; i < 10; i++){arri = i + 1;}//遍历数组并输出for (i = 0; i < 10; i++){printf("%d ", arri);}return 0;}```编译并运行代码,观察输出结果,验证数组的初始化和遍历是否正确。

2、一维数组的查找和修改以下是实现线性查找并修改元素值的代码:```cinclude <stdioh>int main(){int arr5 ={10, 20, 30, 40, 50};int target = 30;int found = 0;int i;//查找元素for (i = 0; i < 5; i++){if (arri == target) {found = 1;break;}}if (found) {printf("找到元素%d,位于索引%d\n", target, i);arri = 100; //修改元素值} else {printf("未找到元素%d\n", target);}//输出修改后的数组for (i = 0; i < 5; i++){printf("%d ", arri);}return 0;}```运行程序,输入不同的目标值,查看查找和修改的结果。

实验一____Matlab的数组及矩阵运算(1)

实验一____Matlab的数组及矩阵运算(1)

姓名: 学号: 班级:实验一 Matlab 的数组及矩阵运算实验目的:1、 了解Matlab 软件,学会Matlab 软件的一些基本操作;2、 学习用Matlab 软件进行矩阵的生成、拼接、剪切及运算。

实验内容:1、设有分块矩阵 33322322E R A O S ⨯⨯⨯⨯⎛⎫= ⎪⎝⎭ ,其中E,R,O,S 分别为单位阵、随机阵、零阵和对角阵,试通过数值计算验证22E R RS A o S +⎛⎫= ⎪⎝⎭2、某零售店有9种商品的单件进价(元)、售价(元)及一周的销量如表所示,问哪种商品的利润最大,哪种商品的利润最小;按收入由小到大,列出所有商品及收入;求这一周该10种商品的总收入和总利润。

实验过程:第一题:1、首先由题意创建E ,R ,O ,S 矩阵2、 将E ,R ,O ,S 由题意拼接成矩阵A3、 分别计算2A 与⎥⎦⎤⎢⎣⎡+2S O ES R E 并比较结果 实验源代码如下:E=eye(3);O=zeros(2,3);R=rand(3,2);S=[3 0;0 3];A=[E R ;O S];B=[E R+R*S;O S^2];A2=A^2B程序运行结果:A2 =1.0000 0 0 3.6873 1.6228 0 1.0000 02.95283.7419 0 0 1.0000 0.7051 3.6676 0 0 0 9.0000 0 0 0 0 0 9.0000B =1.0000 0 0 3.6873 1.6228 0 1.0000 02.95283.7419 0 0 1.0000 0.7051 3.6676 0 0 0 9.0000 0 0 0 0 0 9.0000 第二题:1、创建三个向量分别:shoujia:单件售价、jinjia:单件进价、xiaoliang:销量2、计算利润:lirun=shoujia-jinjia再对利润向量分别用max和min求其最大值和最小值,及其所对应的序号3、计算收入:Shouru=xiaoliang.*shoujia,再对收入向量用sort函数排序4、用sum函数计算zhongshouru和zhonglirun程序源代码如下:jinjia=[7.15 8.25 3.20 10.30 6.68 12.03 16.85 17.51 9.30];shoujia=[11.10 15.00 6.00 16.25 9.90 18.25 20.80 24.15 15.50];xiaoliang=[568 1205 753 580 395 2104 1538 810 694] lirun=shoujia-jinjia;[zhuidalirun,lmax]=max(lirun)[zhuixiaolirun,lmin]=min(lirun)Shouru=xiaoliang.*shoujia[shourupaixu,shangpinxu]=sort(shouru) zhoungshouru=sum(shouru)zhonglirun=sum(lirun.*xiaoliang)程序运行结果如下:zhuidalirun =6.7500lmax =2zhuixiaolirun =2.8000lmin =3shourupaixu =1.0e+004 *Columns 1 through 70.3911 0.4518 0.6305 0.94251.0757 1.8075 1.9562Columns 8 through 93.1990 3.8398shangpinxu =5 3 1 4 9 2 8 7 6zhoungshouru =1.4294e+005zhonglirun =4.6052e+004实验结果:1、由第一题的运行结果可以看出,由于矩阵A^2与⎥⎦⎤⎢⎣⎡+2S O ES R E中对应元素相等,因此⎥⎦⎤⎢⎣⎡+=22^S O ES R E A 2、由第二题的运行结果可以看出:上述九种商品中,利润最大的是2号商品,其最大利润为6.75元,利润最小的是3号商品,其利润为2.8元;按收入排序为:hourupaixu =1.0e+004 *Columns 1 through 70.3911 0.4518 0.63050.9425 1.0757 1.8075 1.9562Columns 8 through 93.1990 3.8398其对应的商品序号为:shangpinxu =5 3 1 4 9 2 8 7 6一周商品的总收入为: 142940元一周商品的总利润为: 46052元。

实验二 矩阵和数组的操作

实验二 矩阵和数组的操作

实验二矩阵和数组的操作一、实验目的和要求1、掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等2、掌握矩阵和数组的加减运算与乘法3、掌握对数组中元素的寻访与赋值,会对数组进行一般的操作二、试验环境计算机MA TLAB软件三、实验内容和步骤1、用三种方法创建一个3×3矩阵,然后利用矩阵编辑器,将其扩充为4×5矩阵,并保存,试着调用它(1)直接输入法如在命令区输入A=[3,2,1;4,5,6;7,8,9](2)直接利用MATLAB提供的函数创建一个3×3矩阵如在命令窗口输入rand(3,3)即得到一个3×3的随机矩阵(3)利用MATLAB提供的“Matrix Editor”完成输入步骤1 在命令区输入A=1步骤2 用鼠标单机工具栏的工作区浏览器,MATLAB弹出变量浏览器,选中变量A,用鼠标左键双击A,打开矩阵编辑器步骤3 做左下角两个文本框中分别输入希望的得到的矩阵的行数和列数即可。

如将3行3列改成4行5列,其可以得到一个4×5矩阵。

若想修改其中的元素,只需用鼠标选中表格中我们想要修改的元素,将原来的元素修改为我们需要的值步骤5 要命令区输入save data A(data为我们给变量文件起的名称,系统会自动沿设定好的路线以“.mat”格式存储文件,即可保存上面例子中创建的矩阵A步骤6 要命令输入save data 即可把保存在文件夹中的矩阵读到MA TLAB的工作区的内存中来。

2、建立一个等差数列,然后由它产生一个对角阵步骤1、在命令区输入a=linspace(0,1.5,5)产生一个等差数列步骤2、在命令区输入b=diag(a)产生一个对角阵3、利用MATLAB的函数inv(A)求方阵A的逆矩阵步骤1、在命令区输入A=[1,2;5,6]得到一个2×2的方阵步骤2、再输入B=inv(A)求出A的逆矩阵四、练习例:以矩阵格式输入数据,自定义一个三阶帕斯卡矩阵A=1 1 11 2 31 3 6⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦。

有关矩阵数学实验报告

有关矩阵数学实验报告

有关矩阵数学实验报告引言矩阵是数学中一个重要的概念,广泛应用于线性代数、图论、计算机科学等众多领域。

本实验旨在通过实际操作和计算,加深对矩阵的理解,并探索矩阵在现实问题中的应用。

本报告将从实验目的、实验步骤、实验结果和实验结论几个方面进行介绍。

实验目的1. 了解矩阵的基本概念和运算规则;2. 掌握矩阵的求逆、转置和乘法等操作;3. 实践利用矩阵解决实际问题。

实验步骤1. 实验准备:安装并学习使用相应的矩阵数学软件;2. 实验1:矩阵加法和乘法- 创建两个相同维度的矩阵A和B;- 计算A + B和A * B;- 分析结果并进行讨论。

3. 实验2:矩阵求逆和转置- 创建一个可逆矩阵C;- 计算C的逆矩阵C'和C的转置矩阵C^T;- 检验计算结果是否正确。

4. 实验3:矩阵在实际问题中的应用- 选择一个实际问题,并将其抽象成矩阵形式;- 利用矩阵运算解决问题;- 分析结果,并与传统解法进行对比。

实验结果1. 实验1结果分析:经过计算发现,矩阵的加法和乘法满足交换律和结合律,与数的加法和乘法类似。

但是,矩阵乘法不满足交换律,即A * B ≠B * A。

这进一步说明矩阵并不是普通数的简单扩展。

2. 实验2结果检验:针对可逆矩阵C,计算得到的逆矩阵C'和转置矩阵C^T经过验证均正确,满足逆矩阵和转置矩阵的定义和性质。

3. 实验3结果分析:我们选择了一个线性方程组问题,利用矩阵运算求解。

与传统解法相比,矩阵运算更简洁、高效,尤其对于高维度复杂问题具有很大优势。

实验结论通过本次实验,我们对矩阵的概念和运算规则有了更深入的理解。

矩阵不仅仅是一种数学工具,它在现实问题的建模和求解中发挥着重要作用。

矩阵的加法、乘法、逆矩阵和转置等运算规则的学习,为我们处理实际问题提供了更多的方法和思路。

在未来的学习和研究中,矩阵将会贯穿于我们的整个数学和科学计算的领域,为我们带来更大的便利和创造力。

c语言 数组 实验报告

c语言 数组 实验报告

c语言数组实验报告C语言数组实验报告引言:C语言是一种广泛应用于软件开发领域的编程语言,而数组则是C语言中常用的数据结构之一。

本实验报告旨在介绍数组在C语言中的基本概念、用法以及实际应用。

一、数组的定义和声明数组是一种由相同类型的元素组成的数据结构,可以通过一个共同的名字和索引来访问其中的元素。

在C语言中,数组的定义和声明通常包括两个步骤:确定数组的类型和大小,并为其分配内存空间。

二、数组的初始化数组的初始化是指在声明数组的同时为其赋初值。

C语言提供了多种初始化数组的方式,如直接初始化、循环初始化等。

通过初始化,可以为数组的元素赋予初始值,方便后续的操作和使用。

三、数组的访问和操作通过数组名和索引,可以访问和操作数组中的元素。

在C语言中,数组的索引从0开始,因此第一个元素的索引为0,第二个元素的索引为1,以此类推。

可以使用赋值操作符(=)来修改数组中的元素值,也可以使用循环结构对数组进行遍历和操作。

四、多维数组除了一维数组,C语言还支持多维数组的定义和使用。

多维数组是指包含多个维度的数组,可以理解为数组的数组。

通过多维数组,可以更灵活地表示和处理复杂的数据结构和问题。

五、数组的应用举例1. 数组的排序:通过对数组元素进行比较和交换,可以实现对数组的排序操作,如冒泡排序、快速排序等。

2. 数组的搜索:通过遍历数组,可以实现对数组中特定元素的搜索操作,如线性搜索、二分搜索等。

3. 数组的统计:通过遍历数组并进行统计,可以实现对数组中元素的求和、求平均值等操作。

4. 数组的矩阵运算:通过多维数组,可以实现对矩阵的加法、减法、乘法等运算。

结论:通过本次实验,我们深入了解了C语言中数组的定义、初始化、访问和操作等基本概念和用法。

数组作为一种重要的数据结构,广泛应用于各个领域的软件开发中。

掌握数组的使用技巧,对于提高编程效率和代码质量具有重要意义。

在今后的学习和实践中,我们将进一步探索和应用数组的相关知识,提升自己的编程能力。

实验四 数组的应用实验报告

实验四  数组的应用实验报告

实验四数组的应用实验报告班级姓名:一、设计要求实现稀疏矩阵的基本运算。

二、算法分析1、算法:将一个稀疏矩阵对应存储到一个一维数组中,然后在进行矩阵的加减运算时依次扫描矩阵的行值和列值,并以行优先。

2、稀疏矩阵的存储:以一维数组顺序存放非零元素的行号、列号和数值,行号用-1表示结束标志。

三、代码分析#include <stdio.h>#define m 2 //定义矩阵行数为2,此处可修改并进行不同规模矩阵的调试#define n 2 //定义矩阵列数为2,此处可修改并进行不同规模矩阵的调试#define max 50//转存稀疏矩阵的算法void creatematrix(int a[m][n],int b[50]){int i,j,k=0;for (i=0;i<m;i++) //m为矩阵行数for (j=0;j<n;j++) //n为矩阵列数if (a[i][j]!=0) //当元素为非零元素时{b[k]=i;k++; //存放元素的行号b[k]=j;k++; //存放元素的列号b[k]=a[i][j];k++; //存放元素的数值}b[k]=-1; //结束标志}//稀疏矩阵的加法void matrixadd(int a[max],int b[max],int c[max]){int i=0,j=0,k=0;while (a[i]!=(-1)&&b[j]!=(-1)) //结束标志未出现时进入循环{if (a[i]==b[j]) //当矩阵A中与矩阵B中两元素行号相等时{if (a[i+1]==b[j+1]) //判断两元素列号是否相等{c[k]=a[i];//矩阵相加后,行号依然为原矩阵A、B中元素的行号c[k+1]=a[i+1];//列号依然为原矩阵A、B中元素的行号c[k+2]=a[i+2]+b[j+2];//相加后元素值为矩阵A、B中元素值相加k=k+3;//依次储存存完行号、列号、数值需三个数组元素空间//储存3个值后进入下一循环i=i+3; //同上j=j+3; //同上}else if (a[i+1]<b[j+1])//当矩阵A元素列号小于矩阵B元素列号时{c[k]=a[i];//矩阵相加后,得到的矩阵行号为矩阵A元素的行号c[k+1]=a[i+1]; //列号为矩阵A元素的列号c[k+2]=a[i+2]; //相加后元素为矩阵A中的元素值k=k+3; //储存后循环i=i+3; //储存后循环}else //当矩阵A元素列号大于矩阵B元素列号时的情况{c[k]=b[j];c[k+1]=b[j+1];c[k+2]=b[j+2];k=k+3;j=j+3;}}else if (a[i]<b[j]) //当矩阵A元素行号小于矩阵B元素行号时情况{c[k]=a[i];c[k+1]=a[i+1];c[k+2]=a[i+2];k=k+3;i=i+3;}else{c[k]=b[j];c[k+1]=b[j+1];c[k+2]=b[j+2];k=k+3;j=j+3;}}if (a[i]==-1)while (b[j]!=-1)//当矩阵A行计算结束而矩阵B行计算未结束时情况{c[k]=b[j];c[k+1]=b[j+1];c[k+2]=b[j+2];k=k+3;j=j+3;}if (b[j]==-1)while (a[i]!=-1) //当矩阵B行计算结束而矩阵A行计算未结束时情况{c[k]=a[i];c[k+1]=a[i+1];c[k+2]=a[i+2];k=k+3;i=i+3;}c[k]=-1; //计算结束}//主函数void main(){int e[m][n],f[m][n],a[max],b[max],c[max];int i,j,k;for (i=0;i<m;i++)for (j=0;j<n;j++)scanf("%d",&e[i][j]); //输入矩阵A并储存for (i=0;i<m;i++)for (j=0;j<n;j++)scanf("%d",&f[i][j]); //输入矩阵B并储存creatematrix(e,a); //将矩阵A转化为一维数组creatematrix(f,b); //将矩阵B转化为一维数组matrixadd(a,b,c); //将矩阵A、B相加i=0;j=0;k=0;printf("\n数组A的内容:\n");while (a[i]!=-1){printf("%5d,%5d,%5d\n",a[i],a[i+1],a[i+2]);//依次打印矩阵A各元素的行号、列号、元素值i=i+3;}printf("\n数组B的内容:\n");while (b[j]!=-1){printf("%5d,%5d,%5d\n",b[j],b[j+1],b[j+2]); //依次打印矩阵B各元素的行号、列号、元素值j=j+3;}printf("\n数组C的内容:\n");while (c[k]!=-1){printf("%5d,%5d,%5d\n",c[k],c[k+1],c[k+2]); //依次打印矩阵A+B各元素的行号、列号、元素值k=k+3;}}四、程序调试① 2*2矩阵的相加② 3*3矩阵的相加② 5*3矩阵的相加输入状态:输出状态:五、程序编写以上已对稀疏矩阵的加法的代码进行分析,对于稀疏矩阵的基本运算也是基于这个理论进行的。

阵列处理实验报告

阵列处理实验报告

一、实验名称阵列处理实验二、实验目的1. 理解阵列处理的基本概念和原理。

2. 掌握使用数组进行数据存储和操作的方法。

3. 学习通过编程实现简单的阵列处理算法。

4. 提高编程能力和问题解决能力。

三、实验原理阵列处理是计算机科学和工程领域中的一个重要概念,它涉及到对一组数据(即数组)进行高效的存储、检索和操作。

在计算机中,数组是一种数据结构,它允许存储多个具有相同数据类型的元素,并通过索引来访问这些元素。

本实验通过编程实现对数组的创建、初始化、遍历、排序、搜索等基本操作,从而加深对阵列处理的理解。

四、实验设备1. 计算机一台2. 编程软件(如Visual Studio、Eclipse等)3. 实验指导书五、实验内容1. 创建和初始化数组2. 遍历数组3. 数组排序4. 数组搜索5. 阵列处理应用实例六、实验步骤1. 创建和初始化数组- 创建一个整数类型的数组,并初始化为随机值。

- 创建一个字符类型的数组,并初始化为字符串。

2. 遍历数组- 使用循环结构遍历数组,打印出每个元素。

3. 数组排序- 实现一个简单的冒泡排序算法,对整数数组进行排序。

- 使用内置的排序函数对字符数组进行排序。

4. 数组搜索- 实现二分搜索算法,在已排序的整数数组中查找特定元素。

- 使用线性搜索在字符数组中查找特定字符。

5. 阵列处理应用实例- 编写一个程序,实现将一个二维数组转换为矩阵转置的功能。

七、实验结果与分析1. 创建和初始化数组- 成功创建并初始化了整数和字符数组。

2. 遍历数组- 成功遍历并打印了数组的所有元素。

3. 数组排序- 成功使用冒泡排序算法对整数数组进行了排序。

- 成功使用内置排序函数对字符数组进行了排序。

4. 数组搜索- 成功实现了二分搜索算法,找到了整数数组中的特定元素。

- 成功实现了线性搜索,找到了字符数组中的特定字符。

5. 阵列处理应用实例- 成功编写了程序,实现了二维数组到矩阵转置的功能。

八、实验总结通过本次实验,我对阵列处理有了更深入的理解。

MATLAB的矩阵和数组的运算

MATLAB的矩阵和数组的运算

武夷学院实验报告课程名称:实用统计软件项目名称:MATLAB的矩阵和数组的运算姓名:专业:班级:学号:同组成员:无一、实验准备1:(一)、实验环境软件准:计算机、MATLAB软件、实验教材(二)、实验所需知识点准备:实验原理:数组运算侧重数值之间的运算,在进行加、减时是数组中对应位置上数值进行加减,这与矩阵运算一致。

数组乘与矩阵乘意义完全不同。

矩阵乘遵循左侧矩阵的第一行与右侧矩阵第一列对应相乘然后相加,得到新矩阵里第一项,与此类推得到之后的项。

数组乘指对应位置的数值相乘。

特殊矩阵的产生通常有特定的函数指令,而这些指令通常是英文。

因此在运用时要牢记英文含义。

1.矩阵与数组的输入.对于较小较简单的矩阵,从键盘上直接输入矩阵是最常用的数值矩阵创建方法.用这种方法输入矩阵时注意以下三点:(1)整个输入矩阵以方括号“[ ]”为其首尾;(2)矩阵的元素必须以逗号“,”或空格分隔;(3)矩阵的行与行之间必须用分号“;”或回车键隔离.2.常用矩阵的生成. Matlab为方便编程和运算,提供了一些常用矩阵的生成指令:eye(n) 单位矩阵全1矩阵零矩阵eye(m,标准型矩阵ones(m,全1矩阵zeros(m,零矩阵eye(size(A)) 与A同型的标准型矩阵ones(size(A)) 与A同型的全1矩阵zeros(size(A)) 与A同型的零矩阵3.矩阵元素的标识.矩阵的元素、子矩阵可以通过标量、向量、冒号的标识来援引和赋值.(1)矩阵元素的标识方式A(ni,nj). ni,nj都是标量.若它们不是整数,则在1注:1、实验准备部分包括实验环境准备和实验所需知识点准备。

2、若是单人单组实验,同组成员填无。

式中会自动圆整到最临近整数.ni指定元素的行位置,nj指定元素的列位置.(2)子矩阵的序号向量标识方式A(v,w).4.矩阵运算和数组运算.矩阵运算的指令和意义如下:A' 矩阵A的共轭转置矩阵,当A是实矩阵时,A' 是A的转置矩阵.s-B B-s 标量和矩阵相减(Matlab约定的特殊运算,含意同上).A+B 两个同型矩阵A与B相加.s*A 数与矩阵A相乘A-B 两个同型矩阵A与B相减.A*B 矩阵A与矩阵B相乘,要求A的列数等于B的行数.s+B 标量和矩阵相加(Matlab约定的特殊运算,等于s加B的每一个分量)元行位置,nj指定元素的列位置.(2)子矩阵的序号向量标识方式A(v,w).4.矩阵运算和数组运算.矩阵运算的指令和意义如下:A' 矩阵A的共轭转置矩阵,当A是实矩阵时,A' 是A的转置矩阵.s-B B-s 标量和矩阵相减(Matlab约定的特殊运算,含意同上).A+B 两个同型矩阵A与B相加.s*A 数与矩阵A相乘A-B 两个同型矩阵A与B相减.A*B 矩阵A与矩阵B相乘,要求A的列数等于B的行数.s+B 标量和矩阵相加(Matlab约定的特殊运算,等于s加B的每一个分量)二、实验过程记录2:(一)、实验目的:1、学会矩阵和数组运算的基本规律;2、会进行编程运算来检验结果。

数组应用实验报告

数组应用实验报告

数组应用实验报告
《数组应用实验报告》
在计算机科学领域,数组是一种非常重要的数据结构,它可以存储多个相同类型的数据,方便进行管理和操作。

在本次实验中,我们将探讨数组的应用,并通过实验报告来展示其在不同场景下的使用情况。

实验一:数组的创建和初始化
在本实验中,我们首先学习了如何创建和初始化数组。

通过编写简单的代码,我们成功创建了一个包含整数类型的数组,并对其进行了初始化。

我们发现,数组的索引是从0开始的,这意味着我们可以通过索引来访问数组中的元素。

实验二:数组的遍历和操作
接下来,我们学习了如何遍历数组并对其进行操作。

我们使用循环结构来遍历数组中的每个元素,并进行相应的操作。

我们发现,使用数组可以方便地对一组数据进行统一的处理,比如求和、平均值等操作。

实验三:多维数组的应用
在这个实验中,我们学习了多维数组的应用。

通过创建二维数组,我们可以模拟二维空间中的数据结构,比如矩阵、图像等。

我们发现,多维数组可以方便地表示复杂的数据结构,并且可以通过多重循环来对其进行遍历和操作。

实验四:数组的应用案例
最后,我们通过实际案例来展示数组的应用。

我们使用数组来实现一个简单的学生成绩管理系统,通过输入学生的成绩,然后计算平均分、最高分、最低分等统计数据。

我们发现,数组的使用大大简化了数据的管理和操作,提高了程序的效率和可维护性。

综上所述,本次实验通过实验报告展示了数组在不同场景下的应用情况。

通过学习和实践,我们深刻理解了数组的重要性和灵活性,相信在今后的编程工作中,我们将能够更加熟练地运用数组来解决实际问题。

MATLAB第二章实验报告

MATLAB第二章实验报告

深 圳 大 学 实 验 报 告课程名称: MATLAB实验名称: MATLAB 的数值计算学 院:指导教师:报告人: 组号:学号 实验地点实验时间: 年 月 日提交时间:二、内容和步骤1.创建矩阵(1)直接输入(2)用from:step:to方式(3)用linspace函数:(4)使用特殊矩阵函数,并修改元素(5)获取子矩阵块:.练习:b=logspace(0,4*3.14,20)b =1.0e+12 *1 至17 列0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 0.0004 0.0018 0.0082 0.037718 至20 列0.1729 0.7924 3.63082.矩阵运算:(1)利用矩阵除法解线性方程组(2)利用矩阵的基本运算求解矩阵方程练习:(3)计算矩阵的特征值和特征向量。

验证特征值和特征向量与该矩阵的关系练习:将矩阵的乘除运算改为数组的点乘和点除运算:(4)利用数学函数进行矩阵运算w=logspace(-2,1,10)w =0.0100 0.0215 0.0464 0.1000 0.2154 0.4642 1.0000 2.1544 4.6416 10.0000LW=-20*log10(sqrt((2*w).^2 + 1))LW =-0.0017 -0.0081 -0.0373 -0.1703 -0.7396 -2.6993 -6.9897 -12.9151 -19.4040 -26.0314FW=-atan(2*w)*180/piFW =-1.1458 -2.4673 -5.3037 -11.3099 -23.3106 -42.8711 -63.4349 -76.9341 -83.8517 -87.13763.生成多维数组:c(18)=[]c =1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8练习:使用数组c编辑窗口查看变量a,b和c。

MATLAB原理及应用实验报告第二章

MATLAB原理及应用实验报告第二章

《MATLAB原理及应用》实验报告实验二数组(矩阵)及其运算一.实验目的1、掌握MATLAB软件环境下进行的数值数组(矩阵)的创建和访问的基本方法。

2、掌握数值数组(矩阵)的算术运算、逻辑运算二.实验设备计算机、MATLAB软件三.实验内容1.矩阵的创建(1)矩阵的创建方法1:输入元素列表①矩阵行中的元素以空格()或逗号(,)间隔②矩阵行之间用分号(;)或回车(enter)间隔③整个元素列表用方括号([])括起来>> a=[1 2 3;4 5 6;7 8 9]>> a=[1:3;4:6;7:9];a1=1:6%用冒号(:)可以操作简便方法2:利用MATLAB内部函数产生矩阵>>b=eye(3)>>c=ones(2,5)>>d=zeros(3,2)>>e=linspace(-3,6,10)>>f=logspace(0,4,5)>>r=rand(1,6) %产生[0,1]之间均匀分布的随机向量R(1×6)(2)矩阵元素的提取与替换在MATLAB中,矩阵中元素可以通过其在矩阵中的行标和列标来确定。

对矩阵中的元素进行提取与替换,也可以按行标和列表进行。

【实验2-1】在命令窗口输入:>>A=[1,2,3;4,5,6]运行后显示:A =1 2 34 5 6在命令窗口输入:>>b=A(1,2)运行后显示:b =2在命令窗口输入:>>A(2,3)=-3运行后显示:A =1 2 34 5 -3(3)矩阵的操作>>A=[1,2,3;4,5,6;7,8,9]>>B=diag(A)%X为矩阵时,V=diag(X,k)得到列向量V,它取自X的第K个对角线的元素, %k=0,表示主对角线,等同于V=diag(X)>>C=diag(B) %产生对角阵>>D=rot90(A) %将矩阵A逆时针旋转90度。

实验二 Matlab数组操作和矩阵操作

实验二  Matlab数组操作和矩阵操作

实验二Matlab数组操作和矩阵操作一、实验目的:掌握数组的创建,运算,矩阵的创建,掌握基本的矩阵运算及常用的函数。

多项式运算、代数方程求解、函数的极值问题、微积分问题求解、数值插值运算。

二、实验内容:进行以下实验,并记录相关数据,包括显示格式,可用截图。

1、输入矩阵并对其进行行、列或小矩阵元素的寻访与组合,矩阵直接输入赋值(1)对矩阵进行行和列寻访在第2(2)步基础上,在指令窗中输入a(1, : )+回车得第一行的寻访结果如下:ans = 1 2 3输入a( : ,1) 得第一列的寻访结果如下:ans = 147(2)对小矩阵的寻访和组合在第3(1)步基础上,在指令窗中输入:s=ones(2,2);s=a([1 2],[1 2])运行结果显示如下:s = 1 24 5(3)对(2)步中所得的s进行转置和对角元素的提取等操作在指令窗中输入:s.'+回车运行得s转置显示的结果如下:ans = 1 42 5在指令窗中输入:diag(s)+回车运行得s 对角元素显示结果如下:ans = 15(4)复数的赋值以及转换复数的赋值:x=[12 3 6;7 8 9;4 5 7];y=[0.4 5 6;-7 8 -9;5 6 4];cn=x+i*y运行结果如下:cn =12.0000 + 0.4000i 3.0000 + 5.0000i 6.0000 + 6.0000i7.0000 - 7.0000i 8.0000 + 8.0000i 9.0000- 9.0000i4.0000 +5.0000i 5.0000 +6.0000i7.0000 + 4.0000i复数的转换:real(cn)+回车结果如下:ans =12 3 67 8 94 5 7imag(cn)+回车结果如下:ans =0.4000 5.0000 6.0000-7.0000 8.0000 -9.00005.00006.0000 4.00004. 操作如下的程序:(1). 输入 A=[7 1 5;2 5 6;3 1 5],B=[1 1 1; 2 2 2;3 3 3],在命令窗口中执行下列表达式,掌握其含义:A(2, 3) A(:,2) A(3,:) A(:,1:2:3) A(:,3).*B(:,2) A(:,3)*B(2,:) A*B A.*BA^2 A.^2 B/A B./A>> A=[7 1 5;2 5 6;3 1 5];>> B=[1 1 1; 2 2 2;3 3 3];>> A(2,3) %提取矩阵A的第2行第3列元素ans =6>>A(:,2) %提取矩阵A的第2列所有元素ans =151>> A(3,:) %提取矩阵A的第3行所有元素ans =3 1 5>> A(:,1:2:3) %提取矩阵A的第1列和第3列所有元素ans =7 52 63 5>>A(:,3).*B(:,2) %矩阵A的第3列元素与矩阵B第2列元素对应相乘ans =51215>>A(:,3)*B(2,:) %矩阵A的第3列与矩阵B第2行相乘ans =10 10 1012 12 1210 10 10>> A*B %矩阵A与矩阵B相乘ans =24 24 2430 30 3020 20 20>> A.*B %矩阵A与矩阵B对应元素相乘ans =7 1 54 10 129 3 15>> A^2 %矩阵A与矩阵A相乘ans =66 17 6642 33 7038 13 46>> A.^2 %矩阵A与矩阵A对应元素相乘ans =49 1 254 25 369 1 25>> B/A %矩阵B与矩阵A的逆相乘ans =0.1842 0.2105 -0.23680.3684 0.4211 -0.47370.5526 0.6316 -0.7105>> B./A %矩阵B除以矩阵A中对应元素ans =0.1429 1.0000 0.20001.0000 0.4000 0.33331.0000 3.0000 0.6000(2).输入 C=1:2:20,则 C(i)表示什么?其中 i=1,2,3, (10)C(i)=2*i-1(3).查找已创建变量的信息,删除无用的变量;(4). 理解下面程序各指令的含义,并运行结果:cleart =0:0.001:2*pi;subplot(2,2,1); polar(t, 1+cos(t))subplot(2,2,2); plot(cos(t).^3,sin(t).^3)subplot(2,2,3);polar(t,abs(sin(t).*cos(t)))subplot(2,2,4);polar(t,(cos(2*t)).^0.5)2、已知⎥⎦⎤⎢⎣⎡=654321a ⎥⎦⎤⎢⎣⎡-=531142b ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=201c ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=063258741d下列运算是否合法,为什么?如合法,结果是多少?(1) result1 = a' (2) result2 = a * b (3) result3 = a + b (4) result4 = b * d(5) result5 = [b ; c' ] * d (6) result6 = a . * b (7) result7 = a . / b (8) result8 = a . * c (9) result9 = a . \ b (10) result10 = a . ^2 (11) result11 = a ^2 (12) result12 = 2 . ^ a(1) 合法,求a 的转置。

实验6 matlab矩阵运算与数组运算

实验6   matlab矩阵运算与数组运算
1
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

数组实验报告

数组实验报告

数据结构实验报告报告名称数组专业网络工程班级1001学号29姓名张剑指导教师陈淑红李珍辉黄哲2012 年5月21 日一、实验目的:熟悉稀疏矩阵的“三元组表”和“十字链表”存储结构,运用它们进行矩阵简单运算处理:如实现矩阵的转置、两个矩阵的相加。

二、实验内容与基本要求:编写用“三元组表”存储稀疏矩阵,进行矩阵处理的程序。

(1)矩阵转置(2)矩阵加三、概要设计:1.数据结构:ADT Array{数据对象:ji= 0,1,…,bi-1 , 1,2, …,n ;D = { aj1j2…jn | n>0称为数组的维数,bi是数组第i维的长度,ji是数组元素第i维的下标,aj1j2…jn∈ElemSet }数据关系:R = {R1, R2, …, Rn}Ri={<aj1j2 …ji…jn , aj1j2 …ji+1…jn>|0≦jk≦bk-1 ,1≦k≦n且k≠i,0≦ji≦bi-2,aj1j2 …ji+1…jn∈D }2.抽象数据类型:InitArray(&A,n,bound1,…,boundn)操作结果:若维数n和各维长度合法,则构造相应的数组A,并返回OK。

DestoryArray(&A)操作结果:销毁数组A。

Value(A,&e,index1,…,indexn)初始条件:A是n维数组,e为元素变量,随后是n个下标值。

操作结果:若各下标越界,则e赋值为所指定的A的元素值,并返回OK。

Assign(&A,e,index1,…,indexn)初始条件:A是n维数组,e为元素变量,随后是n个下标值。

操作结果:若各下标不越界,则将e赋值为所指定的A的元素,并返回OK。

四、详细设计:#include <stdio.h>#define N 4typedef int ElemType;#define MaxSize 100 /*矩阵中非零元素最多个数*/typedef struct{ int r; /*行号*/int c; /*列号*/ElemType d; /*元素值*/} TupNode; /*三元组定义*/typedef struct{ int rows; /*行数值*/int cols; /*列数值*/int nums; /*非零元素个数*/TupNode data[MaxSize];} TSMatrix; /*三元组顺序表定义*/void CreatMat(TSMatrix &t,ElemType A[N][N]){int i,j;t.rows=N;t.cols=N;t.nums=0;for (i=0;i<N;i++){for (j=0;j<N;j++)if (A[i][j]!=0){t.data[t.nums].r=i;t.data[t.nums].c=j;t.data[t.nums].d=A[i][j];t.nums++;}}}void DispMat(TSMatrix t){int i;if (t.nums<=0)return;printf("\t%d\t%d\t%d\n",t.rows,t.cols,t.nums);printf("\t------------------\n");for (i=0;i<t.nums;i++)printf("\t%d\t%d\t%d\n",t.data[i].r,t.data[i].c,t.data[i].d);}void TranMat(TSMatrix t,TSMatrix &tb){int p,q=0,v; /*q为tb.data的下标*/tb.rows=t.cols;tb.cols=t.rows;tb.nums=t.nums;if (t.nums!=0){for (v=0;v<t.cols;v++) /*tb.data[q]中的记录以c域的次序排列*/ for (p=0;p<t.nums;p++) /*p为t.data的下标*/if (t.data[p].c==v){tb.data[q].r=t.data[p].c;tb.data[q].c=t.data[p].r;tb.data[q].d=t.data[p].d;q++;}}}int MatAdd(TSMatrix a,TSMatrix b,TSMatrix &c){int i=0,j=0,k=0;ElemType v;if (a.rows!=b.rows || a.cols!=b.cols)return 0; /*行数或列数不等时不能进行相加运算*/c.rows=a.rows;c.cols=a.cols; /*c的行列数与a的相同*/while (i<a.nums && j<b.nums) /*处理a和b中的每个元素*/{if (a.data[i].r==b.data[j].r) /*行号相等时*/{if(a.data[i].c<b.data[j].c) /*a元素的列号小于b元素的列号*/{c.data[k].r=a.data[i].r;/*将a元素添加到c中*/c.data[k].c=a.data[i].c;c.data[k].d=a.data[i].d;k++;i++;}else if (a.data[i].c>b.data[j].c)/*a元素的列号大于b元素的列号*/ {c.data[k].r=b.data[j].r; /*将b元素添加到c中*/c.data[k].c=b.data[j].c;c.data[k].d=b.data[j].d;k++;j++;}else /*a元素的列号等于b元素的列号*/{v=a.data[i].d+b.data[j].d;if (v!=0) /*只将不为0的结果添加到c中*/{c.data[k].r=a.data[i].r;c.data[k].c=a.data[i].c;c.data[k].d=v;k++;}i++;j++;}}else if (a.data[i].r<b.data[j].r) /*a元素的行号小于b元素的行号*/{c.data[k].r=a.data[i].r; /*将a元素添加到c中*/c.data[k].c=a.data[i].c;c.data[k].d=a.data[i].d;k++;i++;}else /*a元素的行号大于b元素的行号*/{c.data[k].r=b.data[j].r; /*将b元素添加到c中*/c.data[k].c=b.data[j].c;c.data[k].d=b.data[j].d;k++;j++;}c.nums=k;}return 1;}int value(TSMatrix c,int i,int j){int k=0;while (k<c.nums && (c.data[k].r!=i || c.data[k].c!=j))k++;if (k<c.nums)return(c.data[k].d);elsereturn(0);}int MatMul(TSMatrix a,TSMatrix b,TSMatrix &c){int i,j,k,p=0;ElemType s;if (a.cols!=b.rows) /*a的列数不等于b的行数时不能进行相乘运算*/return 0;for (i=0;i<a.rows;i++)for (j=0;j<b.cols;j++){s=0;for (k=0;k<a.cols;k++)s=s+value(a,i,k)*value(b,k,j);if (s!=0) /*产生一个三元组元素*/{c.data[p].r=i;c.data[p].c=j;c.data[p].d=s;p++;}}c.rows=a.rows;c.cols=b.cols;c.nums=p;return 1;}void main(){printf("**********改程序实现如下功能**********");printf("\n");ElemType a1[N][N]={{1,0,3,0},{0,1,0,0},{0,0,1,0},{0,0,1,1}};ElemType b1[N][N]={{3,0,0,0},{0,4,0,0},{0,0,1,0},{0,0,0,2}};TSMatrix a,b,c,d;CreatMat(a,a1);CreatMat(b,b1);printf("a的三元组:\n");DispMat(a);printf("\n\n");printf("b的三元组:\n");DispMat(b);printf("\n\n");printf("a转置为c\n");TranMat(a,c);printf("c的三元组:\n");DispMat(c);printf("\n\n");printf("b转置为d\n");TranMat(b,d);printf("b的三元组:\n");DispMat(d);printf("\n\n");printf("c=a+b\n");MatAdd(a,b,c);printf("c的三元组:\n");DispMat(c);printf("\n\n");printf("c=a*b\n");MatMul(a,b,c);printf("c的三元组:\n");DispMat(c);}五、调试分析及测试结果:测试数据:1.输出矩阵a={{1,0,3,0},{0,1,0,0},{0,0,1,0},{0,0,1,1}};b={{3,0,0,0},{0,4,0,0},{0,0,1,0},{0,0,0,2}}.2.求a,b的转置3.求a+b4.求a*b测试结果及分析:1.编译后,运行程序,输出三元组表,如图所示图一图二2.实现矩阵的转置运算,运行结果如图二,与算术方法所得结果一致,程序这确。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告
课程名称:MATLAB上机实验实验项目:矩阵和数组的操作
实验地点:
专业班级:学号
学生姓名:
指导教师:
年月日
实验二矩阵和数组的操作
一.实验环境
计算机 MATLAB软件
二.实验目的
1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。

2.学习矩阵和数组的加减运算与乘法。

3.掌握对数组元素的寻访与赋值,会对数组进行一般的操作。

三.实验内容与步骤
1.用三种方法创建一个3×3矩阵,然后利用矩阵编辑器,将其扩充为4×5矩阵,并保存,试着调用它。

2.建立一个等差数列,然后由它产生一个对角阵。

3.利用MATLAB的函数inv(A)求方阵的逆矩阵。

解:1.
(1)
>> A=[3,2,1;4,5,6;7,8,9]
A =
3 2 1
4 5 6
7 8 9
(2)
A=rand(3,3)
A =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
2.
> a=linspace(0.1,5,5)
a =
0 0.3750 0.7500 1.1250 1.5000
>> B=diag(a)
B =
0 0 0 0 0
0 0.3750 0 0 0
0 0 0.7500 0 0
0 0 0 1.1250 0
0 0 0 0 1.5000
3.
>> A=[1,2;5,6]
A =
1 2
5 6
>> B=inv(A)
B =
-1.5000 0.5000
1.2500 -0.2500
四.练习题
1.创建一个5×5矩阵,提取主对角线以上的部分。

>> A=rand(5,5)
A =
0.4447 0.1763 0.8936 0.1389 0.1988
0.6154 0.4057 0.0579 0.2028 0.0153
0.7919 0.9355 0.3529 0.1987 0.7468
0.9218 0.9169 0.8132 0.6038 0.4451
0.7382 0.4103 0.0099 0.2722 0.9318
>> B=triu(A)
B =
0.4447 0.1763 0.8936 0.1389 0.1988
0 0.4057 0.0579 0.2028 0.0153
0 0 0.3529 0.1987 0.7468
0 0 0 0.6038 0.4451
0 0 0 0 0.9318
2.A=rand(3),B=magic(3),C=rand(3,4),计算A×B×C
>> A=rand(3),B=magic(3),C=rand(3,4)
A =
0.4660 0.5252 0.8381
0.4186 0.2026 0.0196
0.8462 0.6721 0.6813
B =
8 1 6
3 5 7
4 9 2
C =
0.3795 0.7095 0.1897 0.3028
0.8318 0.4289 0.1934 0.5417
0.5028 0.3046 0.6822 0.1509
>> D=A*B*C
D =
16.2278 13.1844 9.2577 9.6107
4.8656 4.7624 3.7848 2.6921
18.5715 15.9959 11.7862 10.7667
3.创建一个3×3矩阵,并求其转置,逆矩阵。

>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>> B=A'
B =
1 4 7
2 5 8
3 6 9
>> C=inv(A)
C =
1.0e+016 *
-0.4504 0.9007 -0.4504
0.9007 -1.8014 0.9007
-0.4504 0.9007 -0.4504
4.用两种方法求Ax=b的解(A为4阶随机矩阵,b为4阶列向量)。

第一种方法:
>> A=rand(4,4)
A =
0.6979 0.5936 0.6449 0.2897
0.3784 0.4966 0.8180 0.3412
0.8600 0.8998 0.6602 0.5341
0.8537 0.8216 0.3420 0.7271
>> b=[1;2;3;4]'
b =
1
2
3
4
>> B=inv(A)
B =
5.5841 -1.5631 -4.4313 1.7633
-6.0656 -1.0402 9.2146 -3.8633
1.2126 1.6437 -1.7053 -0.0019
-0.2722 2.2375 -4.4079 3.6715
>> x=B*b
x =
-3.7828
4.0446
-0.6235
5.6652
第二种方法:
>> linsolve(A,b)
ans =
-3.7828
4.0446
-0.6235
5.6652
5.创建一个4阶随机矩阵A,计算A3。

>>A= rand(4,4)
A =
0.3093 0.7027 0.6213 0.8801
0.8385 0.5466 0.7948 0.1730
0.5681 0.4449 0.9568 0.9797
0.3704 0.6946 0.5226 0.2714
>> B=A^3
B =
3.1558 3.4377
4.4070 3.5635
3.1635 3.5662
4.4434 3.5408
3.7880
4.1643
5.2663 4.1574
2.4193 2.6992
3.4251 2.8220
6.求100—999之间能被21整除的数的个数。

>> A=100:999;
>> a=mod(A,21);
>> b=find(a==0);
>> x=length(b)
x =
43
7.设有矩阵A和B
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
B =
3 0 16
17 -6 9
0 23 -4
9 7 0
4 13 11
[1]求它们的乘积C=A×B
[2]将矩阵C的右下角3×2子矩阵赋给D
>> A=[1:5;6:10;11:15;16:20;21:25]
A =
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
>> B=[3,0,16;17,-6,9;0,23,-4;9,7,0;4,13,11]
B =
3 0 16
17 -6 9
0 23 -4
9 7 0
4 13 11
>> C=A*B
C =
93 150 77 258 335 237 423 520 397 588 705 557 753 890 717
>> D=C(3:5,2:3)
D =
520 397
705 557
890 717。

相关文档
最新文档