当前位置:文档之家› 矩阵运算及间接平差程序

矩阵运算及间接平差程序

矩阵运算及间接平差程序
矩阵运算及间接平差程序

/**************************平差程序说明*********************************/

*此程序中含有矩阵运算的相关API函数和间接平差函数

*程序中所有的矩阵采用一维数组存储,运算时通过行参数m,列参数n去提取矩阵中的元素*平差原理采用的是最小二乘的间接平差

*程序中对于解出的X要根据实际需要的精度进行四舍五入

*用此程序前要先根据题的要求列出误差方程,并把其中的参数装入程序中

*/

#include

#include

using namespace std;

//矩阵转置

bool AT(double A[],double B[],int m,int n)

{

for(int i = 0;i < m;i++)

for(int j = 0 ;j < n; j++)

{

B[j*m+i] = A[i*n+j];

}

return true;

}

//矩阵显示

bool Matdis(double A[],int m,int n)

{

for(int i = 0;i < m;i++)

{

cout<

for(int j = 0 ;j < n; j++)

cout<

}

return true;

}

//矩阵乘法

bool AXB(double A[],double B[],double C[],int m,int n,int k)

{

for(int i = 0;i < m;i++)

{

for(int j = 0 ;j < k; j++)

{

C[i*k+j]=0;

for(int s = 0; s < n; s++)

C[i*k+j] += A[i*n+s]*B[s*k+j];

}

}

return true;

}

//矩阵求和

bool Add(double A[],double B[],double C[],int m,int n) {

for(int i = 0;i < m * n;i++)

C[i] = A[i] + B[i];

return true;

}

//矩阵求差

bool minus(double A[],double B[],double C[],int m,int n) {

for(int i = 0;i < m * n;i++)

C[i] = A[i] - B[i];

return true;

}

//矩阵求逆

bool inverse(double C[],double B[],int n)

{//1.set B[][] I;

double * A = new double[n*n],e;

for(int i=0;i

for(int j=0;j

{

A[i*n+j]=C[i*n+j];

if(i==j) B[i*n+j]=1;

else B[i*n+j]=0;

}

//2. inverse and judge the Matrix inversable

for(i=0;i

{

//对主元为零的处理

if(A[i*n+i]==0)

for(int j=i+1;j

{

if(A[j*n+i]!=0)

{

for(int k=0;k

{

A[i*n+k]+=A[j*n+k];

B[i*n+k]+=B[j*n+k];

}

break;

}

}

if(fabs(A[i*n+i])<0.000000000000001)

{

for(int i=0;i

for(int j=0;j

B[i*n+j]=0;

return 0;

}//MAT can't be inversed

// line processing

e=A[i*n+i];

for(int j=0;j

{

A[i*n+j]=A[i*n+j]/e;

B[i*n+j]=B[i*n+j]/e;

}

// row processing

for(j=0;j

{

e=A[j*n+i];

for(int k=0;k

if(i!=j)

{

A[j*n+k]+=-1*e*A[i*n+k];

B[j*n+k]+=-1*e*B[i*n+k];

}

}

}

return true;

}

/*********************************数据区**************************************/ //n为观测值个数

//t为未知参数个数

//X为未知参数,为t行的列向量

//N为平差计算过程中间量,t行t列

//p为观测值的权,为n行的列向量

//W为平差计算过程中间量,n行的列向量

//V为改正数,n行的列向量

//q单位权中误差

//qx为参数的中误差

const int n=5;

const int t=3;

const int nt=n*t;

const int tt=t*t;

const int nn=n*n;

double B[nt] = {

1.0 , 0.0 ,0.0,

-1.0 , 1.0 ,0.0,

0.0 , 1.0 ,0.0,

0.0 , 1.0 ,-1.0,

0.0 , 0.0 , 1.0

};

double l[n] = {0.0 ,-23.0 ,0.0 ,14.0,0};

double p[n] = {2.9,3.7,2.5,3.3,4.0};

double X[t],N[tt],P[nn],N_[tt],W[t],V[n],qx[t];

double q; //单位权中误差

//将权向量转化成权阵

bool initial()

{

for(int i = 0;i < n; i++)

for(int j = 0;j < n; j++)

{

if(i == j) P[i*n+j] = p[i];

else P[i*n+j] = 0;

}

return true;

}

//平差程序主函数

bool Adjust(double B[],double P[],double l[],double V[],double X[])

{

initial(); //数据进行初始化,对权阵转换为方阵double BT[nt],BTP[nt],BX[n];

AT(B,BT,n,t);

AXB(BT,P,BTP,t,n,n);

AXB(BTP,B,N,t,n,t); //求得Nbb=BTPB

inverse(N,N_,t); //对Nbb求逆AXB(BTP,l,W,t,n,1); //求得W=BTPl AXB(N_,W,X,t,t,1); //解出X

cout<<"X的解分别为:"<

Matdis(X,t,1);

AXB(B,X,BX,n,t,1);

minus(BX,l,V,n,1); //V=BX-l

cout<

Matdis(V,n,1);

double pvv[1] = {0};

double VP[n],VT[n];

AT(V,VT,1,n);

AXB(V,P,VP,1,n,n);

AXB(VP,VT,pvv,1,n,1);

q = sqrt(pvv[0]/(n - t));

cout<

cout<

for(int i = 0;i < t; i++)

{

qx[i] = q * sqrt(N_[i*t+i]);

cout<<"q["<

}

return true;

}

//客户端调用函数,在这里用户只需调用Adjust函数即可。

void main()

{

Adjust(B,P,l,V,X);

}

给水管网平差程序LOOP使用说明

给水管网平差程序LOOP使用说明 LOOP是一个功能十分强大的管网水力平差计算程序,可以计算大、中、小型环状和枝状管网,计算速度非常快,曾进行过我国许多城镇的管网设计水力计算。该程序原为英文操作,经华东交通大学沃特科技有限公司(https://www.doczj.com/doc/b04835524.html,)方永忠教授(yzhfang@https://www.doczj.com/doc/b04835524.html,)汉化,提供给国内同行使用,操作简便。有疑问请通过Email进行咨询。 1、程序使用环境 硬件要求:任何PC微机配打印机 软件平台:DOS、WINDOWS 2、数据准备(初用者请先跳过本条) 在使用平差程序前,请准备好计算所需原始数据,包括总体数据、管段数据、节点数据、参考节点数据。 总体数据: 工程名称——对管网工程的方案说明,不影响计算结果 管段总数——最大值250 节点总数——最大值200 高峰因子——即节点流量的缩放系数,一般为1,见"详注1" 最大水力坡度——即管段单位长度水头损失最大允许值,不影响计算结果,只是在计算结果中提出警告,一般取5~8,单位:千分之一(‰) 最大流量修正值——本程序采用的是节点平差算法,此为平差的最大允许误差,值越小则计算精度越高,一般可采用0.01或更小,单位:升/秒 管段数据包括: 管段编号——正整数,1~250 起始节点编号——正整数,1~200 终到节点编号——正整数,1~200 管段长度——正整数,单位:米 管段直径——正整数,单位:毫米 管内壁粗糙系数——海曾?威廉公式中的C系数 节点数据包括: 节点编号——正整数,1~200 节点流量给定方式(FIX)——通常为0表示不节点流量不固定,1表示节点流量固定,见"详注1" 节点流量——流入节点流量为正值,流出节点流量为负值(与我国规定相反),单位:升/秒,见"详注2" 、"详注3" 节点地面高程——节点海拔标高,单位:米 参考节点(即水头已知、流量未知的节点,见"详注3")数据: 节点编号——正整数,1~200 节点水头——已知的节点水头海拔标高,单位:米 详注1: 为了便于多工况水力平差计算,本程序采用两种方式给定节点流量,即固定式和不固定式,固定式:在节点数据中直接给出节点流量,非固定式:节点数据中给出的节点流量先与高峰因子相乘

给水管网设计课程设计要点

给水管网课程设计 青阳镇给水管网课程设计 学生姓名陈兰 学院名称环境工程学院 专业名称给水排水工程 指导教师程斌 2012年10月31日

给水工程的任务是向城镇居民、工矿企业、机关、学校、公共服务部门及各类保障城市发展和安全的用水个人和单位供应充足的水量和安全的水质,包括居民家庭生活和卫生用水、工矿企业生产和生活用水、冷却用水、机关和学校生活用水、城市道路喷洒用水、绿化浇灌用水、消防以及水体环境景观用水等等。 此次设计为苏北地区青阳镇给水管网系统设计,主要设计以下内容。 (1)用水量计算 (2)供水方案选择 (3)管网定线 (4)清水池、水塔相关计算 (5)流量、管径的计算 (6)泵站扬程与水塔高度的设计 (7)管网设计校核 给水工程必须满足各类用户或单位部门对水量、水质和水压对的需求。要求能用确定管网的布置形式,管线的选择,管径的选择,流量的分配及校核,确保管线的合理布置及使用。

1设计资料及任务 (1) 1.1设计原始资料 (1) 1.1.1地形地貌 (1) 1.1.2气象资料 (1) 1.1.3工程水文地质情况 (1) 1.1.4图纸资料 (1) 1.1.5用水资料 (1) 1.2设计任务 (2) 2设计说明书 (2) 2.1设计方案的流程及考虑细则 (2) 2.1.1管网及输水管的定线 (2) 2.1.2输水管径的确定 (2) 2.1.3管网管径平差计算 (2) 2.1.4节点水压计算 (3) 2.1.5管网消防校核计算 (3) 3设计计算书 (3) 3.1设计用水量计算 (3) 3.1.1最高日设计用水量 (3) 3.2供水方案选择 (4) 3.2.1选定水源及位置和净水厂位置 (4) 3.2.2选定供水系统方案 (4) 3.3.管网定线 (4) 3.4设计用水量变化规律的确定 (4) 3.5泵站供水流量设计 (5) 3.5.1供水设计原则 (5) 3.5.2具体要求 (5) 3.5.3二级供水 (5) 3.5.4根据用水量变化曲线确定清水池和水塔的容积 (6) 4 管网布置及水力计算 (7) 4.1管段布线,并确定节点和管道编号 (7) 4.1.1 节点设计流量分配计算 (7) 4.1.2节点设计相关计算 (8) 4.1.3节点设计流量计算 (9) 4.1.4给水管网设计数据计算 (9) 4.1.5平差计算 (10) 4.1.6设计工况水力分析计算结果 (11) 4.1.7 二级泵站流量、扬程及水塔高度设计 (11) 4.2 消防工况校核 (12) 4.2.1设计工况水力分析计算结果 (12) 4.2.2设计工况水力分析计算结果 (13) 5 结语 (14) 参考文献 (15) 附图 (16)

矩阵的运算及其运算规则

矩阵基本运算及应用 201700060牛晨晖 在数学中,矩阵是一个按照长方阵列排列的复数或实数集合。矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。矩阵的运算是数值分析领域的重要问题。将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。在电力系统方面,矩阵知识已有广泛深入的应用,本文将在介绍矩阵基本运算和运算规则的基础上,简要介绍其在电力系统新能源领域建模方面的应用情况,并展望随机矩阵理论等相关知识与人工智能电力系统的紧密结合。 1矩阵的运算及其运算规则 1.1矩阵的加法与减法 1.1.1运算规则 设矩阵,, 则

简言之,两个矩阵相加减,即它们相同位置的元素相加减! 注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的. 1.1.2运算性质 满足交换律和结合律 交换律; 结合律. 1.2矩阵与数的乘法 1.2.1运算规则 数乘矩阵A,就是将数乘矩阵A中的每一个元素,记为或. 特别地,称称为的负矩阵. 1.2.2运算性质 满足结合律和分配律 结合律:(λμ)A=λ(μA);(λ+μ)A =λA+μA. 分配律:λ(A+B)=λA+λB.

已知两个矩阵 满足矩阵方程,求未知矩阵. 解由已知条件知 1.3矩阵与矩阵的乘法 1.3.1运算规则 设,,则A与B的乘积是这样一个矩阵: (1) 行数与(左矩阵)A相同,列数与(右矩阵)B相同,即 . (2) C的第行第列的元素由A的第行元素与B的第列元素对应相乘,再取乘积之和.

求矩阵的基本运算

求矩阵的基本运算 #include #include void jiafa() { int m,n; float a[20][20],b[20][20],c[20][20]; int i,j; printf("请输入矩阵行数:"); scanf("%d",&m); printf("请输入矩阵列数:"); scanf("%d",&n); printf("请输入第一个矩阵:"); for(i=0; i

管网设计计算说明书

目录 第一篇给水管网设计 1.概述 (2) 1.1给水现状 (2) 1.2规划用水单位 (2) 1.3水源选择 (2) 1.4水压要求 (2) 2.设计用水量计算 (3) 3.管网设计 (4) 3.1管网定线 (4) 3.2比流量,沿线流量和节点流量以及流量出分配 (4) 3.3管网平差计算 (8) 4泵站流量扬程计算 (9) 5.管网设计校核 (9) 5.1消防工况校核 (9) 5.2事故工矿校核 (11) 第二篇污水管网设计 1.概述 (12) 2.管道定线及设计管段、面积划分 (12) 3.设计流量、比流量计算 (13) 4.污水管段设计流量计算表 (14) 5.污水干管水力和埋设深度计算 (14) 第三篇雨水管网设计 1.概述 (16) 2.雨水量计算 (16) 2.1暴雨强度公式 (16) 2.2综合径流系数 (16) 3.雨水管网定线 (16) 4.划分设计管段 (17) 5.汇水面积划分 (17) 6.管段设计流量及管道水力计算 (18) 7.各设计管段上、下端的管底标高和埋设深度计算 (19)

第一篇给水管网设计 1. 概述 1.1 给水现状 目前镇区没有统一给水,居民用水多采用自发组织引山泉水及地下水,其水量不能满足镇区用水量的要求,此外,镇区给水管网不成系统,管径和管材都不能满足要求。 1.2 规划用水单位 镇区规划以居住生活用地为主,用水量主要包括:居民生活用水量、工业用水量、公建用水量及市政用水量。规划可根据远期镇区的发展状况、人民生活水平、工业的性质及水资源的情况,同时参考国家有关规及相似城镇的用水标准, 1.3 水源选择 根据水利部门提供资料,本镇区上游的溪水库(在规划围之外,位于本镇的东北方向,溪上游)流域集雨面积为约为10km2,水量充足,水质符合《地面水环境质量标准》(GB3838)二级标准,溪在水质及水量方面均能满足远期镇区供水的要求,故规划拟定以溪水库作为镇区供水水源。供水方式采用统一,均由位于镇区东北角的自来水厂统一供给。 1.4 水压要求

给水管网平差结果

给水管网平差 一、平差基本数据 1、平差类型:反算水源压力。 2、计算公式: 柯尔-勃洛克公式 I=λ*V^2/(2.0*g*D) 1.0/λ^0.5=- 2.0*lg[k/( 3.7*D)+2.5/(Re*λ^0.5)] Re=V*D/ν 计算温度:10 ,ν=0.000001 3、局部损失系数:1.20 4、水源点水泵参数: 水源点水泵杨程单位(m),水源点水泵流量单位:(立方米/小时) 水源节点编号流量1 扬程1 流量2 扬程2 流量3 扬程3 二、节点参数 节点编号流量(L/s) 地面标高(m) 节点水压(m) 自由水头(m) 1 0.521 140.000 170.32 2 30.322 2 -115.740 140.000 171.497 31.497 3 6.54 4 140.000 170.342 30.342 4 5.746 140.000 171.120 31.120 5 1.389 140.000 169.777 29.777 6 10.743 140.000 170.06 7 30.067 7 11.814 140.000 169.717 29.717 8 1.505 140.000 169.160 29.160 9 6.544 140.000 169.522 29.522 10 1.853 140.000 169.072 29.072 11 8.165 140.000 169.243 29.243 12 10.192 140.000 169.242 29.242 13 2.345 140.000 168.000 28.000 14 0.579 136.000 168.985 32.985 15 8.893 136.000 169.011 33.011 16 6.023 136.000 169.013 33.013 17 11.962 136.000 168.897 32.897 18 1.476 136.000 168.554 32.554 19 12.498 136.000 168.893 32.893 20 1.389 136.000 168.602 32.602 21 2.316 136.000 167.692 31.692 22 3.243 136.000 165.822 29.822 三、管道参数 管道编号管径(mm) 管长(m) 流量(L/s) 流速(m/s) 千米损失(m) 管道损失(m) 1-3 100 90.0 0.521 0.092 0.218 0.020 2-4 315 46.1 115.740 1.637 8.172 0.377

C语言程序设计报告 矩阵运算

C程序设计报告 矩 阵 运 算 学院:地质与环境学院 专业:资源勘查工程0901 姓名:王甲 学号:0909030119

目录1.设计任务书 1.1题目 1.2设计要求 1.3程序涉及的知识点 2.功能设计 2.1算法设计 2.2部分模块流程图 3.程序代码设计 3.1源代码 3.2运行结果 4.运行结果 5.程序设计总结 6.致谢 7.参考文献

1设计任务书 1.1 题目 矩阵运算 1.2 设计要求 此程序为矩阵运算的相关程序,用来计算包括两矩阵的加、减、乘运算,求矩阵的转置矩阵、最大值元素、最小值元素及对角线元素之和等运算。 1.2 本系统涉及的知识点 此程序涉及了老师讲授的多个知识点,包括:for、if、printf及scanf 等语句,顺序、选择、循环等结构。 2功能设计 2.1 算法设计 此程序需要实现的功能要求: 利用for、if、printf及scanf 等语句来实现所需功能。 输入矩阵a和b的元素之后,依次计算: 程序一:计算a+b矩阵; 程序二:计算a-b矩阵; 程序三:计算a*b矩阵; 程序四:计算a的转置矩阵; 程序五:计算a矩阵的最小值元素;

程序六:计算a 矩阵的最大值元素; 程序七:计算a 矩阵的主对角线元素之和; 程序八:计算a 矩阵的副对角线元素之和; 程序九:计算a 矩阵的上三角元素之和; 程序九:计算a 矩阵的下三角元素之和; 2.2 部分模块流程图 3 程序源代码 3.1源代码 #include"stdio.h" void main() { int a[3][3],b[3][3],c[3][3], int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0; printf("计算a+b 矩阵:\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) c[i][j]=a[i][j]+b[i][j]; printf("%6d"); printf("\n"); printf(" 请输入a 矩阵元素:\n"); for(i=0;i<3;i++); for(j=0;j<3;j++); scanf("%4d",&a[i][j]); printf("a 矩阵:\n");

给水管网管网平差程序

#include #include #define A 100 main() { int B[A],E[A],IO[A],JO[A],ok=0,i,k,P,LOOP; float xs,L[A],D[A],q[A],Dq[A],h[A],Dh[A],sq[A],s1[A],s[A],w[A],v[A]; FILE *fp; char F[10]; printf(" Please input DA TA file name... "); scanf("%s",F); fp=fopen(F,"r"); fscanf(fp,"%d%d%f",&P,&LOOP,&xs); for(k=1;k<=P;k++) fscanf(fp,"%d%d%f%f%f%d%d", &B[k],&E[k],&L[k],&D[k],&q[k],&IO[k],&JO[k]); fclose(fp); for(k=0;k<=LOOP;k++) Dq[k]=0; for(k=1;k<=P;k++) { if(D[k]<290) D[k]=D[k]-1; D[k]=D[k]/1000; s1[k]=.001736e-6/pow(D[k],5.3)*L[k]; q[k]=xs*(IO[k]<0)?-q[k]:q[k]; w[k]=3.141592654/4*D[k]*D[k]; } a1:ok++; printf(" OK=%d\n",ok); if(ok>0) goto a2; for(k=1;k<=P;k++) { q[k]=q[k]+Dq[abs(IO[k])]-Dq[JO[k]]; v[k]=fabs(q[k])/1000/w[k]; s[k]=(v[k]>=1.2)? s1[k]:s1[k]*.852*pow(1+.867/v[k],.3); h[k]=s[k]*q[k]*fabs(q[k]);} for(i=1;i<=LOOP;i++) { Dh[i]=0; sq[i]=0; for(k=1;k<=P;k++) { if(abs(IO[k])==i) {Dh[i]=Dh[i]+h[k]; sq[i]=sq[i]+s[k]*fabs(q[k]);} if(JO[k]==i) {Dh[i]=Dh[i]-h[k]; sq[i]=sq[i]+s[k]*fabs(q[k]);} } Dq[i]=-Dh[i]/2/sq[i]; } for(i=1;i<=LOOP;i++) if(fabs(Dh[i])>.001) goto a1; a2: printf(" Please input result file name ... "); scanf("%s",F); fp=fopen(F,"w"); fprintf(fp," Pipe=%d Loop=%d OK=%d\n",P,LOOP,ok); fprintf(fp,"----------------------------------------------------------\n");

MATLAB矩阵运算基础练习题

第2章 MATLAB 矩阵运算基础 2.1 在MA TLAB 中如何建立矩阵?? ?? ??194375,并将其赋予变量a ? 2.2 请产生一个100*5的矩阵,矩阵的每一行都是[1 2 3 4 5] 2.3产生一个1x10的随机矩阵,大小位于(-5 5) 2.2 有几种建立矩阵的方法?各有什么优点? 可以用四种方法建立矩阵: ①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷; ②通过M 文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB 的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。 2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求? 进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a 与b 相乘(a*b )时必须满足a 的列数等于b 的行数。 2.4 数组运算和矩阵运算的运算符有什么区别? 在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b 为矩阵乘,a.*b 为数组乘。 2.5 计算矩阵??????????897473535与???? ??????638976242之和,差,积,左除和右除。 2.6 求?? ?? ??+-+-+-+-++=i 44i 93i 49i 67i 23i 57i 41i 72i 53i 84x 的共轭转置。 2.7 计算???? ??=572396a 与??????=864142b 的数组乘积。 2.8 “左除”与“右除”有什么区别? 在通常情况下,左除x=a\b 是a*x=b 的解,右除x=b/a 是x*a=b 的解,一般情况下,a\b ≠b/a 。 2.9 对于B AX =,如果??????????=753467294A ,???? ??????=282637B ,求解X 。 2.10 已知:???? ??????=987654321a ,分别计算a 的数组平方和矩阵平方,并观察其结果。 2.11 ??????-=463521a ,?? ????-=263478b ,观察a 与b 之间的六种关系运算的结果。

C语言矩阵的运算

C语言课程设计题目矩阵的运算 西安科技大学 二0 一一年十一月

一、设计目的 1. 综合C语言相关知识制作简单的应用程序 2. 灵活对程序代码进行利用,修改和编写; 3. 熟练将C语言所学知识和其它知识相结合 二、功能描述 编写一个矩阵运算程序,能够进行矩阵加、减、乘、转置,求矩阵的最大值,最小值,对角线元素的和等 三、流程图

定义及预处理m1=0,m2=0,m3=0,m4=0,l=0;i,j,k,d,max,min; a[M][N],b[M][N],c[N][P] 输出“输入a矩阵” j++,输入a矩阵元素 直到j>=N,i++ 直到i>=M 输出“a矩阵” j++,输出a矩阵 直到j>=N,i++,输出换行 直到i>=M 输出“输入b矩阵” j++,输入b矩阵元素 直到j>=N,i++ 直到i>=M 输出“b矩阵” j++,输出b矩阵 直到j>=N,i++,输出换行 直到i>=M 输出“输入c矩阵” j++,输入c矩阵元素 直到j>=P,i++ 直到i>=N

输出“c 矩阵” 直到i>=N 直到j>=P,i++,输出换行 j++,输出c 矩阵 输出“输入a,b 矩阵之和” 直到i>=M 直到j>=N,i++,输出换行 j++,输出a 矩阵与b 矩阵对应元素 输出“输入a,b 矩阵之差” 直到i>=M 直到j>=N,i++,输出换行 j++,输出a 矩阵与b 矩阵对应元素 输出“输入a,c 矩阵之积” 直到i>=N 直到j>=P,i++ j++,输出换行,直到k 〉=M k++,输出 a[i][k]*c[k][j]; 输出“a 矩阵的转置” 直到j>=N 直到i>=M,j++,输出换行 i++,输出a[i][j] 输出“a 矩阵的最大值” max=a[0][0] 直到i>=M 直到i>=M 直到j>=N,i++ max

数学实验矩阵的运算doc资料

数学实验矩阵的运算

数学实验报告 学院: 班级: 学号: 姓名: 完成日期:

实验四矩阵的运算 (一)投入产出分析 一.实验目的 1.理解投入产出分析中的基本概念和模型; 2.从数学和投入产出理论的角度,理解矩阵乘法、逆 矩阵等的含义。 二.问题描述 设国民经济由农业、制造业和服务业三个部门构成,已知某年它们之间的投入产出关系、部需求、初始投入等如表1-1所示 表1-1国民经济三产部门之间的投入产出表 根据表回答下列问题: (1)如果农业、制造业、服务业外部需求为 50,150,100,问三个部门总产出分别为多少? (2)如果三个部门的外部需求分别增加一个单位,问他们的总产出分别为多少? 三.实验过程

1.问题(1)的求解 (1)求直接消耗矩阵A 根据直接消耗的计算公式 a ij=x ij/x j 和各部门中间需求; x n a n 运行如下代码可得直接消耗系数表。 X=[15 20 30;30 10 45;20 60 0]; X_colsum=[100 200 150]; X_rep=repmat(X_colsum,3,1) A=X./ X_rep 运行结果为: A = 0.1500 0.1000 0.2000 0.3000 0.0500 0.3000 0.2000 0.3000 0 (2)求解 根据公式 X=(I-A)-1y 在运行如下代码 y=[50;150;100]; n=size(y,1);

W=eye(n)-A; X=W\y 运行结果为 X = 139.2801 267.6056 208.1377 即三个部门的总产出分别为139.2801,267.6056, 208.1377亿元。 2.问题2求解 设外部需求由y增加至y+Δy,则产出x的增量为Δx=(I-A)-1(y+Δy)- (I-A)-1y=(I-A)-1Δy 利用问题(1)求得的I-A矩阵,再运行如下的MATLAB代码可得问题的结果: dx=inv(W) 运行结果: dx = 1.3459 0.2504 0.3443 0.5634 1.2676 0.4930 0.4382 0.4304 1.2167 根据上述结果可知,当农业的外部需求增加1个单位时,农业、制造业、服务业的总产出分别增加

c语言 矩阵计算器

#include #define M 20 #define N 20 float A[M][N]; //定义了含有400个浮点型数组元素的二维数组 float B[M][N]; float C[M][N]; int i,j,m,n,p,q,k; int main() { printf(" ###########################################\n"); printf(" ### 欢迎您使用矩阵计算器系统。###\n"); printf(" ### 系统功能:###\n"); printf(" ### 计算两个矩阵相加,相减; ###\n"); printf(" ### 矩阵相乘;矩阵转置; ###\n"); printf(" ### ###\n"); printf(" #########################################\n\n"); int x; do{ printf("请选择您需要的运算,若退出则选择0后按回车键结束\n"); printf("******************************************************************\n") ; printf("0,退出\n"); printf("1,矩阵相加\n"); printf("2,矩阵相减\n"); printf("3,矩阵相乘\n"); printf("4,矩阵转置\n"); printf("******************************************************************\n") ; scanf("%d",&x); switch (x) {

matlab中的矩阵的基本运算命令

1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。 X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 2.上三角阵和下三角阵的抽取 函数tril %取下三角部分 格式L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。函数triu %取上三角部分 格式U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。 (1)“:”变维 (2)Reshape函数变维 格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×… B = reshape(A,[m n p…]) %同上 B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。 1.3 矩阵分解 1.3.1 Cholesky分解 函数chol 格式R = chol(X) %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。 [R,p] = chol(X) %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。 1.3.2 LU分解

矩阵运算程序设计

目录 1 课题分析 (1) 2 模块化分析 (1) 2.1 输入模块 (1) 2.1.1 输入模块要求 (1) 2.1.2 输入模块程序说明 (1) 2.2 判断模块 (3) 2.3 求和求差模块 (3) 2.4 乘法模块 (5) 2.4.1 求乘积模块概要 (5) 2.4.2 子程序段说明 (5) 2.4.3 乘法模块流程图 (8) 3 运行分析 (9) 4 心得体会 (11) 参考文献 (13)

矩阵运算程序设计 1 课题分析 根据给定的任务:能用键盘输入矩阵的参数(行、列及元素值),在进行运算前,先判断两个矩阵是否符合运算规则实现这两个矩阵的加,实现这两个矩阵的减,实现这两个矩阵的乘。进行模块化分析,所以程序中应该包括输入模块,保存需要处理的数据。判断模块,根据矩阵运算规则判断输入的数据能否进行矩阵加法,减法或者乘法运算,并调用相应的计算程序。计算模块,包括矩阵的加法,矩阵的减法和矩阵的乘法运算。输出模块,显示运算的结果。 2 模块化分析 2.1 输入模块 2.1.1 输入模块要求 先能用键盘输入矩阵的参数,行数和列数,然后根据输入各元素值,在输入数据之前有明显的提示信息,输入完后要保持各数据。运算完后要将各类计算的结果显示在屏幕上,并且要有明显的提示信息。 2.1.2 输入模块程序说明 输入的行列数保存到N和M中,为后来的比较和输入做准备,本程序段只是针对矩阵1的行和列,矩阵2则在此基础上经行替换即可以得到。 LEA DX,INFORMATION1 ;取信息提示地址偏移量 MOV AH,09h ;9号功能调用显示提示信息 INT 21H LEA DX,input1 ;提示输入矩阵1 的行数 MOV AH,09h ;9号功能调用显示提示信息 INT 21H

矩阵运算实验报告

实验报告 --矩阵运算 一.实验目的。 1.通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2.通过实践进一步领会程序设计的特点和应用,提高运用C++ 语言以及面向对象知识解决实际问题的能力。 3.通过实践掌握用C++ 语言编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识; 4.学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。为后续的相关课程的学习打下基础。 二.实验要求。 1.学会建立模板类; 2.实现矩阵的“加”、“减”、“乘”、“数乘”、“转置”; 3.动态存分配并用随机数填充; 4.注意“加”、“减”、“乘”要进行条件的判断; 三.设计思路。

3.1算法基本流程 1)获取用户输入的矩阵1的行数和列数,动态生成一个一维数组 2)利用随机数生成数组成员,并利用两个循环输出数组,使其符合矩阵的格式 3)矩阵2同矩阵1的处理方法 4)通过两个矩阵的行数和列数比较来判断能否进行加减乘等运算,如不能,输出相关信息 5)如能够进行计算,则利用数组进行相应运算,并按照正确格式输出 6)通过改变一维数组中元素的顺序来实现转置并输出 3.2算法流程图

四.基本界面。

五.关键代码。 5.1关键类的声明 class CMatrixclass { public: CMatrixclass() { int m_Row = 0; //行 int m_Col = 0; //列 m_pElements = NULL; //一维数组

矩阵的运算实例程序

设计一个矩阵相乘的程序 假设有 1 5 7 3 3 9 1 4 1 4 A= 3 6 3 9 B= 5 6 7 9 0 3 1 2 8 7 3 2 7 2 5 6 0 3 1 9 9 7 4 7 8 0 3 2 5 4 求出A*B的矩阵 程序构思: 我们所知的矩阵乘法运算的算式如下: C ij = A ik X B kj的k从1到n 的和,那么可以用一个3层循环来运算此算式: C(1,1)=A(1,1)*B(1,1)+A(1,2)*B(2,1)+A(1,3)*B(3,1)+A(1,4)*B(4,1) =(1*3)+(5*5)+(7*3)+(3*9) =3+25+21+27 =76 同理 C(1,2)=A(1,1)*B(1,2)+A(1,2)*B(2,2)+A(1,3)*B(3,2)+A(1,4)*B(2,2) =(1*9)+(5*6)+(7*2)+(3*7) =9+30+14+21 =74 依此类推,我们可以求得矩阵A与矩阵B的矩阵乘积。 void main(void) { int matrixa[5][4]={1,5,7,3, 3,6,3,9, 1,2,8,7, 0,3,1,9, 3,2,5,4}; int matrixb[4][6]={3,9,1,4,1,4, 5,6,7,9,0,3, 3,2,7,2,5,6, 9,7,4,7,8,0}; int matrixc[5][6]; int i,j,k; for(i=0;i<5;i++) for(j=0;j<6;j++) { matrixc[i][j]=0; for(k=0;k<4;k++) matrixc[i][j]+=matrixa[i][k]*matrixb[k][j];

稀疏矩阵的运算(完美版)

专业课程设计I报告(2011 / 2012 学年第二学期) 题目稀疏矩阵的转换 专业软件工程 学生姓名张鹏宇 班级学号 09003018 指导教师张卫丰 指导单位计算机学院软件工程系 日期 2012年6月18号

指导教师成绩评定表

附件: 稀疏矩阵的转换 一、课题内容和要求 1.问题描述 设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。 2.需求分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 二、设计思路分析 (1)设计函数建立稀疏矩阵,初始化值。 (2)设计函数输出稀疏矩阵的值。 (3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。 (4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。 (5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。 (6)构造函数进行稀疏矩阵的转置,并输出结果。 (7)退出系统。 三、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主

控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。 2.存储结构设计 本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。 3.系统功能设计 本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType 实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。 (1)稀疏矩阵的加法: 此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。 (2)稀疏矩阵的乘法: 此功能由函数void Xiangcheng( )实现。当用户选择该功能,系统提示输

矩阵基本性质

矩阵的基本性质 矩阵的第?第列的元素为。我们?或()表?的单位矩阵。 1.矩阵的加减法 (1),对应元素相加减 (2)矩阵加减法满足的运算法则 a.交换律: b.结合律: c. d. 2.矩阵的数乘 (1),各元素均乘以常数 (2)矩阵数乘满足的运算法则 a.数对矩阵的分配律: b.矩阵对数的分配律: c.结合律: d. 3.矩阵的乘法 (1),左行右列对应元素相乘后求和为C的第行第列的元素(2)矩阵乘法满足的运算法则 a.对于一般矩阵不满足交换律,只有两个方正满足且有 b.分配律: c.结合律: d.数乘结合律: 4.矩阵的转置, (1)矩阵的幂:,,…,

(2)矩阵乘法满足的运算法则 a. b. c. d. 5.对称矩阵:即;反对称矩阵:即 (1)设为(反)对称矩阵,则仍是(反)对称矩阵。 (2)设为对称矩阵,则或仍是对称矩阵的充要条件=。 (3)设为(反)对称矩阵,则,也是(反)对称矩阵。 (4)对任意矩阵,则分别是对称矩阵和反对称矩阵且. (5) 6. Hermite矩阵:即;反Hermite矩阵,即 a. b. c. d. e. f.(当矩阵可逆时) 7.正交矩阵:若,则是正交矩阵 (1) (2)

8.酉矩阵:若,则是酉矩阵 (1) (2) (3), (4) 9.正规矩阵:若,则是正规矩阵;若,则是实正规矩阵 10.矩阵的迹和行列式 (1)为矩阵的迹;或为行列式 (2);注:矩阵乘法不满足交换律 (3) (4),为酉矩阵,则 (5) (6) (7) (8) (9) (10) (11) (12),,则其中为奇异分解值的特征值 11.矩阵的伴随矩阵 (1)设由行列式的代数余子式所构成的矩阵

矩阵的基本运算

矩阵的基本运算 (摘自:华东师范大学数学系;https://www.doczj.com/doc/b04835524.html,/)§3.1 加和减 §3.2矩阵乘法 §3.2.1 矩阵的普通乘法 §3.2.2 矩阵的Kronecker乘法 §3.3 矩阵除法 §3.4矩阵乘方 §3.5 矩阵的超越函数 §3.6数组运算 §3.6.1数组的加和减 §3.6.2数组的乘和除 §3.6.3 数组乘方 §3.7 矩阵函数 §3.7.1三角分解 §3.7.2正交变换 §3.7.3奇异值分解 §3.7.4 特征值分解 §3.7.5秩 §3.1 加和减

如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差.如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息.如: A= B= 1 2 3 1 4 7 4 5 6 2 5 8 7 8 0 3 6 0 C =A+B返回: C = 2 6 10 6 10 14 10 14 0 如果运算对象是个标量(即1×1矩阵),可和其它矩阵进行加减运算.例如: x= -1 y=x-1= -2 0 -1 2 1 §3.2矩阵乘法 Matlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍. §3.2.1 矩阵的普通乘法 矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的.计算方法和线性代数中所介绍的完全相同. 如:A=[1 2 ; 3 4]; B=[5 6 ; 7 8]; C=A*B, 结果为 C=×==

即Matlab返回: C = 19 22 43 50 如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵. §3.2.2 矩阵的Kronecker乘法 对n×m阶矩阵A和p×q阶矩阵B,A和B的Kronecher乘法运算可定义为: 由上面的式子可以看出,Kronecker乘积A B表示矩阵A的所有元素与 B之间的乘积组合而成的较大的矩阵,B A则完全类似.A B和B A均为np ×mq矩阵,但一般情况下A B B A.和普通矩阵的乘法不同,Kronecker乘 法并不要求两个被乘矩阵满足任何维数匹配方面的要求.Kronecker乘法的Matlab命令为C=kron(A,B),例如给定两个矩阵A和B: A= B= 则由以下命令可以求出A和B的Kronecker乘积C: A=[1 2; 3 4]; B=[1 3 2; 2 4 6]; C=kron(A,B) C = 1 3 2 2 6 4 2 4 6 4 8 12 3 9 6 4 12 8

矩阵乘法运算的C语言程序

#include #define N 30 #define M 30 void juzhen_mul(int m,int n,int *p1[M],int m1,int n1,int *p2[M]) { int i,j,x=0; int c[N][M]={0}; for(i=0;i

} } void main() { int a[N][M],b[N][M]; int n,m,n1,m1,i,j; int *pa[M],*pb[M]; printf("请选择A矩阵的行数和列数:\n"); scanf("%d %d",&m,&n); for(i=0;i

} printf("请选择B矩阵的行数和列数:\n"); scanf("%d %d",&m1,&n1); for(i=0;i

相关主题
文本预览
相关文档 最新文档