二维数组传参传值
二维数组传参||传值
先给出问题:
像下面这样的数组,在函数中如何传参?也就是说如何保证虚参与实参类型一致。
char str_arr[3][10] = {"yes","no","uncertain"};
char *str_array[] = {"yes","no","unsure"};
函数原型:
void func1( char (*a)[10] )
void func2( char **a )
调用:
func1( str_arr );
func2( str_array);
如果向func2()中传入str_arr会怎么样呢?编译器会警告:传递参数 1 (属于‘func2’)时在不兼容的指针类型间转换。即虚参与实参类型不一致。
同理,也不能向func1()中传入str_array。
我们给出完整的测试程序:
/********二维数组传参测试程序***************/
#include
void func1( char (*a)[10])
{
int i;
for(i=0;i<3;i++)
printf("%s/n",a[i]);
}
void func2( char **a )
{
int i;
for(i=0;i<3;i++)
printf("%s/n",*(a+i));
}
int main()
{
char str_arr[3][10] = {"yes","no","uncertain"};
char *str_array[] = {"yes","no","unsure"};
char *str[3] = {"a","b","c"};/*这两种表达效果一样*/
func1(str_arr);
func2(str_array);
return 0;
}
/******************end*******************/
运行结果:
[root@localhost ansi_c]# gcc test.c
[root@localhost ansi_c]# ./a.out
yes
no
uncertain
yes
no
unsure
[root@localhost ansi_c]#
如果将
func1(str_arr);
func2(str_array);
改成:
func1(str_array);
func2(str_arr);
会怎么呢?
[root@localhost ansi_c]# gcc test.c
test.c: 在函数‘main’ 中:
test.c:22: 警告:传递参数1 (属于‘func1’)时在不兼容的指针类型间转换test.c:23: 警告:传递参数1 (属于‘func2’)时在不兼容的指针类型间转换
这两种数组的正确赋值应该如下:
char str_arr[3][10] = {"yes","no","uncertain"};
char *str_array[] = {"yes","no","unsure"};
char (*pa)[10] = str_arr;
char **p = str_array;
pa和p才是和他们相一致的类型。
当然,如果不是传参的话,在main()函数中就不会发生这么多烦恼了。/*************非传参时的情况************************/
#include
int main()
{
char str_arr[3][10] = {"yes","no","uncertain"};
char *str_array[] = {"yes","no","unsure"};
char *str[3] = {"a","b","c"};
int i;
for(i=0;i<3;i++)
printf("%s/n",str_arr[i]);
for(i=0;i<3;i++)
printf("%s/n",str_array[i]);
return 0;
}
/*************************************/
运行结果:
[root@localhost ansi_c]# gcc test1.c
[root@localhost ansi_c]# ./a.out
yes
no
uncertain
yes
no
unsure
[root@localhost ansi_c]#
这说明了一点,在没传参之前,main()函数清楚它们都是二维数组。对于上面给出的两种函数原型:函数原型:
void func1( char (*a)[10] )
void func2( char **a )
这两种传参方法有什么不同呢?这们对实参有什么要求呢?
上面只是抛出了一个问题,我在这里的主题是想搞清楚二维数组传参有什么奥秘,而非只针对这一个问题提出解决方法。
后面从基础的开始讨论。
我们先看看教材上怎么讲这一块的,
谭浩强的《C程序设计》二维数组作为参数传递,原文如下(略有改变,请原谅):
[原文开始]
可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void Func(int array[3][10]);
void Func(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:void Func(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:
void Func(int array[3][]);
实参数组维数可以大于形参数组,例如实参数组定义为:
void Func(int array[3][10]);
而形参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。
[原文结束]
也就是说多维数组传参要指定第二维或者更高维的大小,可以省略第一维的大小。
像int array[3][4],要传参的话,函数原型可以为下面三种的任一种:
void func(int a[3][4])
void func(int a[][4])
void func(int (*a)[4])
调用时为:func(array);
同时教材里也说了,如果在型参里不说明列数,则编译器无法决定应为多少行多少列。那么能不能把
int array[3][4]的数组名array 传给void func(int **a)呢?
看下面:
/**********************************/
#include
int main()
{
int array[3][4];
int **p = array;
}
**********************************/
root@localhost ansi_c]# gcc test2.c
test2.c: 在函数‘main’ 中:
test2.c:5: 警告:从不兼容的指针类型初始化
[root@localhost ansi_c]#
虽然从本质上讲int array[3][4] 的数组名相当于二级指针,但它不等同于一般的二级指针,因为它还含有数组相关的信息,所以在main函数中:
char str_arr[3][10] = {"yes","no","uncertain"};
for(i=0;i<3;i++)
printf( "%s/n",str_arr+i );
它可以通过下标,每次跳过10个字节来寻址。我们再看看编译器是怎样处理数组的:对于数组int p[m][n];
如果要取p[i][j]的值(i>=0 && i 编译器是这样寻址的: p + i*n + j; 我们再看一个例子: /*********************二维数组传参*****************************/ #include void fun( int *a, int m, int n) { int i,j; for( i=0; i { for(j=0;j { printf("%d ", *( a+i*n+j ) ); } putchar('/n'); } } void func( int *a, int m, int n) { int i,j; for( i=0;i { printf("%d ",a[i]); } putchar('/n'); } int main() { int a[3][3] = { {2, 2, 2}, {3, 3, 3} }; fun( (int *)a, 3,3); func( &a[0][0],3,3); func( (int *)a, 3,3); return 0; } ********************end******************************/ [root@localhost ansi_c]# gcc test4.c [root@localhost ansi_c]# ./a.out 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3 [root@localhost ansi_c]# 我们来看其中的要点, 数组为: int a[3][3] = { {1, 1, 1}, {2, 2, 2}, {3, 3, 3} }; 函数原型和调用为: 原型: void fun( int *a, int m, int n) { ............. printf("%d ", *( a+i*n+j ) ); ............. } 调用: fun( (int *)a, 3,3); 原型: void func( int *a, int m, int n) { ............. printf("%d ",a[i]); ............. } 调用: func( &a[0][0],3,3); func( (int *)a, 3,3); 我们发现这两种方式都能正常执行,我们把一个二级指针,强制转换成了一级指针传了进去,并在函数中模仿编译器数组的寻址方式:*( a+i*n+j )。 我们再看看二维字符数组的例子: /*******************二维字符数组*******************************/ #include void f( char **a, int n) { int i; printf("%c/n",*( (char*)a+0 ) ); printf("%c/n",((char * )a)[n] ); puts("------------OK"); for(i=0;i<3;i++) printf("%s/n",(char*)a+i*n ); } int main() { char str_arr[3][10] = {"yes","no","uncertain"}; f( (char **)str_arr, 10); return 0; } /****************end*************************/ 运行结果: [root@localhost ansi_c]# ./a.out y n ------------OK yes no uncertain [root@localhost ansi_c]# 这里也做了强制类型转换,转换成字符指针, printf("%s/n",(char*)a+i*n ); 每个字符串的地址就是数组中字符'y'、'n'、'u'的地址, printf("%c/n",*( (char*)a+0 ) );字符在数组中的排列是顺序的,可以用*( (char*)a+i )或((char * )a)[i] 表示。 当然这个程序也可以改成这样,完全不用二级指针: /*****************************************************************/ #include void f( char *a, int n) { int i; printf("%c/n",*( a+0 ) ); printf("%c/n",(a)[n] ); puts("------------OK"); for(i=0;i<3;i++) printf("%s/n",a+i*n ); } int main() { char str_arr[3][10] = {"yes","no","uncertain"}; f( (char *)str_arr, 10); return 0; } /*****************************************************************/ 归根结底,还是把它转成一级指针来用。 下面做个小结: 数组传参 数组: int array[4][10]; 函数原型: void func1( int a[][10] ); void func2( int (*a)[10] ); void func3( int *p, int col, int row ); 函数调用: func1( array ); func2( array ); func3( (int *)array, 4, 10 ); 容易出错的地方: int arr[][10]; int **p = arr; 这种方式是错误的. 应该是 int (*p)[10] = arr; 同理,也不能将arr传给fun( int **p) 另外数组传参之后会降级为指针,如: #include void Test(char a[][2]) { int size = sizeof( a );//4 } int main(void) { char a[3][2] = {'a','b','c','d','e','f'}; int size =sizeof( a );//6 Test( a ); return 0; } 来源:https://www.360docs.net/doc/4011140775.html,/d_life/blog/item/912062ef1fd363e9ce1b3e2a.html 函数原型:要求传入一个动态二维数组 void func1(int **p,int row, int column) { } 调用: int main() { int m,n; int **b; cin >> m; cin >> n; b = new int *[m]; for(int i=0; i { b[i] = new int[n]; }; func1(b,m,n); return 0; } 我习惯的做法是不用指针数组,定义一个大块(这种情况主要面向每行行数相同):比如现在有一个W*H 的矩阵(H个长度为W的数组),你就直接定义一个float型指针: float* pfBuffer;然后动态分配大小pfBuffer = new float[W*H];这个buffer在用完之后要调用delete pfBuffer;来释放.你传递这个float指针,传递行列数之后,你如果要访问y行x列的话,只要算一下它在哪儿, int addr = y*W+x;就是其"地址"了,你要访问它,直接使用pfBuffer[addr]就OK了,实际上我做图象处理的时候全部这样做,因为这样的地址访问很明了,不会给阅读带来不便,而且作为大部分的时候,我们用矩阵比较多,列数不等的情况很少。这只是个人见解。 一、实验名称:用QR 算法求矩阵的特征值 二、实验目的:1、通过实验进一步熟悉掌握求矩阵特征值的QR 方法及原理。 2、理解QR 方法的计算流程。 3、能够编程实现QR 方法。 三、实验内容:给定矩阵 ??? ? ? ??=111132126A , ?? ??? ?? ? ? ?=0100098 20 087630 7654465432H ,采用QR 方法计算A 和H 矩阵的全部特征值。 四、实验要求: (1) 根据QR 算法原理编写程序求矩阵A 及矩阵H 的全部特征值(要求误差<10 5 -)。 (2) 直接用MATLAB 的内部函数eig 求矩阵A 及矩阵H 的全部特征值,并与(1)的结果比较。 五、QR 方法计算矩阵特征值的程序: function [namda,time,data_na]=qr_tz(A,tol) if nargin==1; tol=1e-5; end wucha=1; time=0; while (wucha>tol)&(time<500) [q,r]=qr(A); A1=r*q; tz0=diag(A1); tz1=diag(A); wucha=norm(tz0-tz1); A=A1; time=time+1; data_na(time,:)=tz1; end namda=tz1; disp(‘特征值为’) namda disp(‘第一个特征在值’) time n1=length(data_na); n2=(1:n1)’; temp1=[n2,data_na]; subplot(2,2,1:2) plot(date_na(:,1)) title(‘迭代次数为’) grid subplot(2,2,3) plot(data-na(:,2)) title(‘第二个特征值’)grid subplot(2,2,4) plot(data-na(:,3)) title(‘第三个特征值’) grid 六、实验结果: >> A=[6,2,1;2,3,1;1,1,1];[namda,time,data_na]=qr_tz(A,1e-5);特征值为 namda = 迭代次数为 time = 6 图 1 求矩阵特征值算法及程序简介 1.幂法 1、幂法规范化算法 (1)输入矩阵A、初始向量( 0),误差eps; (2) k 1; (3)计算V(k)A(k 1); (4)m k max(V(k)) ,m k1max( V ( k 1)); (5) (k)V(k)/m k; (6)如果m k m k 1eps,则显示特征值1和对应的特征向量x(1) ),终止; (7)k k 1, 转(3) 注:如上算法中的符号max(V )表示取向量V 中绝对值最大的分量。本算法使用了数据规范化处理技术以防止计算过程中出现益出错误。 2、规范化幂法程序 Clear[a,u,x]; a=Input[" 系数矩阵A="]; u=Input[" 初始迭代向量u(0)="]; n=Length[u]; eps=Input[" 误差精度eps ="]; nmax=Input[" 迭代允许最大次数nmax="]; fmax[x_]:=Module[{m=0,m1,m2}, Do[m1=Abs[x[[k]]]; If[m1>m,m2=x[[k]];m=m1], {k,1,Length[x]}]; m2] v=a.u; m0=fmax[u]; m1=fmax[v]; t=Abs[m1-m0]//N; k=0; While[t>eps&&k 本科毕业设计题目:一些特殊矩阵特征值的求法与应用 作者:高英 学号: 2010012491 所属学院:金融与数学书院 专业班级:应数1002班 指导教师:赵建中职称:院长 完成时间: 2014 年 4月 10日 皖西学院教务处制 独创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 学生签名:日期:年月日 论文版权使用授权书 本人完全了解皖西学院有关保留、使用学位论文的规定,即:学校有权保留送交论文的复印件和磁盘,允许论文被查阅和借阅,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。同意皖西学院可以用不同方式在不同媒体上发表、传播学位论文的全部或部分内容。 (保密的学位论文在解密后应遵守此协议) 学生签名:日期:年月日 导师签名:日期:年月 目录 摘要 .......................................................... 错误!未定义书签。Abstract ...................................................... 错误!未定义书签。第1章绪论 .................................................. 错误!未定义书签。 1.1 课题研究背景及目的................................... 错误!未定义书签。 1.2 研究现状 (1) 1.3研究方法 (2) 1.4研究内容 (2) 第2章几类特殊矩阵的概念及主要性质............................ 错误!未定义书签。 2.1 正交矩阵............................................. 错误!未定义书签。 2.2 幂零矩阵 (2) 2.3 对称矩阵 (3) 2.4 三对角矩阵 (4) 第3章矩阵特征值的求法与应用 (4) 3.1 一般矩阵的求法与应用 (4) 3.2 特殊矩阵的求法与应用 (7) 结语 (20) 致谢 (20) 参考文献 (21) 幂法求矩阵最大特征值 摘要 在物理、力学和工程技术中的很多问题在数学上都归结为求矩阵特征值的问题,而在某些工程、物理问题中,通常只需要求出矩阵的最大的特征值(即主特征值)和相应的特征向量,对于解这种特征值问题,运用幂法则可以有效的解决这个问题。 幂法是一种计算实矩阵A的最大特征值的一种迭代法,它最大的优点是方法简单。对于稀疏矩阵较合适,但有时收敛速度很慢。 用java来编写算法。这个程序主要分成了三个大部分:第一部分为将矩阵转化为线性方程组;第二部分为求特征向量的极大值;第三部分为求幂法函数块。其基本流程为幂法函数块通过调用将矩阵转化为线性方程组的方法,再经过一系列的验证和迭代得到结果。 关键词:幂法;矩阵最大特征值;j ava;迭代 POWER METHOD TO CALCULATE THE MAXIMUM EIGENV ALUE MATRIX ABSTRACT In physics, mechanics and engineering technology of a lot of problems in math boil down to matrix eigenvalue problem, and in some engineering, physical problems, usually only the largest eigenvalue of the matrix (i.e., the main characteristics of the value) and the corresponding eigenvectors, the eigenvalue problem for solution, using the power law can effectively solve the problem. Power method is A kind of computing the largest eigenvalue of real matrix A of an iterative method, its biggest advantage is simple.For sparse matrix is right, but sometimes very slow convergence speed. Using Java to write algorithms.This program is mainly divided into three most: the first part for matrix can be converted to linear equations;The second part is the eigenvector of the maximum;The third part is the exponentiation method of function block.Its basic process as a power law function block by calling the method of matrix can be converted to linear equations, then after a series of validation and iteration to get the results. Key words: Power method; Matrix eigenvalue; Java; The iteration 第八章 矩阵的特征值与特征向量的数值解法 某些工程计算涉及到矩阵的特征值与特征向量的求解。如果从原始矩阵出发,先求出特征多项式,再求特征多项式的根,在理论上是无可非议的。但一般不用这种方法,因为了这种算法往往不稳定.常用的方法是迭代法或变换法。本章介绍求解特征值与特征向量的一些方法。 §1 乘幂法 乘幂法是通过求矩阵的特征向量来求特征值的一种迭代法,它适用于求矩阵的按模最大的特征值及对应的特征向量。 定理8·1 设矩阵An ×n 有n 个线性无关的特征向量X i(i=1,2,…,n),其对应的特征值λi (i =1,2,…,n)满足 |λ1|>|λ2|≧…≧|λn | 则对任何n维非零初始向量Z 0,构造Zk = AZ k-1 11()lim ()k j k k j Z Z λ→∞ -= (8·1) 其中(Zk )j表示向量Z k 的第j个分量。 证明 : 只就λi是实数的情况证明如下。 因为A 有n 个线性无关的特征向量X i ,(i = 1,2,…,n)用X i(i = 1,2,…,n)线性表示,即Z 0=α1X 1 + α2X2 +用A 构造向量序列{Z k }其中 ? 21021010, ,k k k Z AZ Z AZ A Z Z AZ A Z -=====, (8.2) 由矩阵特征值定义知AXi =λi X i (i=1,2, …,n),故 ? 0112211122211121k k k k k n n k k k n n n k n k i i i i Z A Z A X A X A X X X X X X ααααλαλαλλλααλ===++ +=+++???? ??=+ ?????? ? ∑ (8.3) 同理有 1 1 11 1121k n k i k i i i Z X X λλααλ---=? ? ????=+ ????? ? ? ∑ (8.4) 将(8.3)与(8.4)所得Zk 及Z k-1的第j 个分量相除,设α1≠0,并且注意到 |λi |<|λ1|(i=1,2,…,n )得 9 矩阵特征值计算 在实际的工程计算中,经常会遇到求n 阶方阵 A 的特征值(Eigenvalue)与特征向量(Eigenvector)的问题。对于一个方阵A,如果数值λ使方程组 Ax=λx 即(A-λI n )x=0 有非零解向量(Solution Vector)x,则称λ为方阵A的特征值,而非零向量x为特征值λ所对应的特征向量,其中I n 为n阶单位矩阵。 由于根据定义直接求矩阵特征值的过程比较复杂,因此在实际计算中,往往采取一些数值方法。本章主要介绍求一般方阵绝对值最大的特征值的乘幂(Power)法、求对称方阵特征值的雅可比法和单侧旋转(One-side Rotation)法以及求一般矩阵全部特征值的QR 方法及一些相关的并行算法。 1.1 求解矩阵最大特征值的乘幂法 1.1.1 乘幂法及其串行算法 在许多实际问题中,只需要计算绝对值最大的特征值,而并不需要求矩阵的全部特征值。乘幂法是一种求矩阵绝对值最大的特征值的方法。记实方阵A的n个特征值为λi i=(1,2, …,n),且满足: │λ1 │≥│λ2 │≥│λ3 │≥…≥│λn │ 特征值λi 对应的特征向量为x i 。乘幂法的做法是:①取n维非零向量v0 作为初始向量;②对于 k=1,2, …,做如下迭代: 直至u k+1 ∞ - u k u k =Av k-1 v k = u k /║u k ║∞ <ε为止,这时v k+1 就是A的绝对值最大的特征值λ1 所对应的特征向∞ 量x1 。若v k-1 与v k 的各个分量同号且成比例,则λ1 =║u k ║∞;若v k-1 与v k 的各个分量异号且成比例,则λ1 = -║u k ║∞。若各取一次乘法和加法运算时间、一次除法运算时间、一次比较运算时间为一个单位时间,则因为一轮计算要做一次矩阵向量相乘、一次求最大元操作和一次规格化操作,所以下述乘幂法串行算法21.1 的一轮计算时间为n2+2n=O(n2 )。 算法21.1 单处理器上乘幂法求解矩阵最大特征值的算法 输入:系数矩阵A n×n ,初始向量v n×1 ,ε 输出:最大的特征值m ax Begin while (│diff│>ε) do (1)for i=1 to n do (1.1)sum=0 (1.2)for j= 1 to n do sum=sum+a[i,j]*x[j] end for 第3章 矩阵特征值与特征向量的计算 一些工程技术问题需要用数值方法求得矩阵的全部或部分特征值及相关的特征向量。 3.1 特征值的估计 较粗估计ρ(A ) ≤ ||A || 欲将复平面上的特征值一个个用圆盘围起来。 3.1.1 盖氏图 定义3.1-1 设A = [a ij ]n ?n ,称由不等式∑≠=≤-n i j j ij ii a a z 1 所确定的复区域为A 的第i 个盖氏图, 记为G i ,i = 1,2,…,n 。 >≤-=<∑≠=}:{1n i j j ij ii i a a z z G 定理3.1-1 若λ为A 的特征值,则 n i i G 1 =∈ λ 证明:设Ax = λx (x ≠ 0),若k 使得∞ ≤≤==x x x i n i k 1max 因为 k n j j kj x x a λ=∑=1 ?∑≠= -n k j j kj k kk x a x a )(λ ?∑∑∑ ≠=≠=≠≤≤= -n k j j kj n k j j k j kj n k j k j kj kk a x x a x x a a 11λ ? n i i k G G 1 =? ∈λ 例1 估计方阵????? ?? ?? ???----=41 .03.02.05.013.012.01 .035.03.02.01.01A 特征值的范围 解: G 1 = {z :|z – 1|≤ 0.6};G 2 = {z :|z – 3|≤ 0.8}; G 3 = {z :|z + 1|≤ 1.8};G 4 = {z :|z + 4|≤ 0.6}。 注:定理称A 的n 个特征值全落在n 个盖氏圆上,但未说明每个圆盘内都有一个特征值。 3.1.2 盖氏圆的连通部分 称相交盖氏圆之并构成的连通部分为连通部分。 孤立的盖氏圆本身也为一个连通部分。 定理3.1-2 若由A 的k 个盖氏圆组成的连通部分,含且仅含A 的k 个特征值。 证明: 令D = diag(a 11,a 12,…,a nn ),M = A – D ,记 )10(00 0)(2 1 22111222 11≤≤?? ?? ? ? ? ??+??????? ? ?=+=εεεε n n n n nn a a a a a a a a a M D A 则显然有A (1) = A ,A (0) = D ,易知A (ε)的特征多项式的系数是ε的多项式,从而A (ε)的特征 值λ1(ε),λ2(ε),…,λn (ε)为ε的连续函数。 A (ε)的盖氏圆为:)10(,}||||:{)(11≤≤?=≤ -=∑∑≠=≠=εεεεi n i j j ij n i j j ij ii i G a a a z z G 因为A (0) = D 的n 个特征值a 11,a 12,…,a nn ,恰为A 的盖氏圆圆心,当ε由0增大到1时,λi (ε)画出一条以λi (0) = a ii 为始点,λi (1) = λi 为终点的连续曲线,且始终不会越过G i ; 不失一般性,设A 开头的k 个圆盘是连通的,其并集为S ,它与后n – k 个圆盘严格分离,显然,A (ε)的前k 个盖氏圆盘与后n – k 个圆盘严格分离。 当ε = 0时,A (0) = D 的前k 个特征值刚好落在前k 个圆盘G 1,…,G k 中,而另n – k 个特征值则在区域S 之外,ε从0变到1时, k i i G 1 )(=ε与 n k i i G 1 )(+=ε始终分离(严格) 。连续曲线始终在S 中,所以S 中有且仅有A 的k 个特征值。 注:1) 每个孤立圆中恰有一个特征值。 2) 例1中G 2,G 4为仅由一个盖氏圆构成的连通部分,故它们各有一个特征值,而G 1,G 3构成的连通部分应含有两个特征值。 3) 因为例1中A 为实方阵,所以若λ为A 的特征值,则λ也是A 的特征值,所以G 2,G 4 毕业论文(设计)题目:矩阵特征值和特征向量的求法与应用 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期: 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日 C语言课程设计报告 课程名称:计算机综合课程设计 学院:土木工程学院 设计题目:矩阵特征值分解 级别: B 学生姓名: 学号: 同组学生:无 学号:无 指导教师: 2012年 9 月 5 日 C语言课程设计任务书 (以下要求需写入设计报告书) 学生选题说明: ?以所发课程设计要求为准,请同学们仔细阅读; ?本任务书提供的设计案例仅供选题参考;也可自选,但难易程度需难度相当; ?鼓励结合本专业(土木工程、力学)知识进行选题,编制程序解决专业实际问题。 ?限2人选的题目可由1-2人完成(A级);限1人选的题目只能由1人单独完成(B级);设计总体要求: ?采用模块化程序设计; ?鼓励可视化编程; ?源程序中应有足够的注释; ?学生可自行增加新功能模块(视情况可另外加分); ?必须上机调试通过; ?注重算法运用,优化存储效率与运算效率; ?需提交源程序(含有注释)及相关文件(数据或数据库文件); (cpp文件、txt或dat文件等) ?提交设计报告书,具体要求见以下说明。 设计报告格式: 目录 1.课程设计任务书(功能简介、课程设计要求); 2.系统设计(包括总体结构、模块、功能等,辅以程序设计组成框图、流程图解释); 3.模块设计(主要模块功能、源代码、注释(如函数功能、入口及出口参数说明,函数调用关系描述等); 4.调试及测试:(调试方法,测试结果的分析与讨论,截屏、正确性分析); 5.设计总结:(编程中遇到的问题及解决方法); 6.心得体会及致谢; 参考文献 1.课程设计任务书 功能简介: a)输入一个对称正方矩阵A,从文本文件读入; b)对矩阵A进行特征值分解,将分解结果:即U矩阵、S矩阵输出至文本文件; c)将最小特征值及对应的特征向量输出至文本文件; d)验证其分解结果是否正确。 提示:A=USU T,具体算法可参考相关文献。 功能说明: 矩阵特征值分解被广泛运用于土木工程问题的数值计算中,如可用于计算结构自振频率与自振周期、结构特征屈曲问题等。 注:以三阶对称矩阵为例 2.系统设计 3.模块设计 #include 摘要:首先给出了求解矩阵特征值和特征向量的另外两种求法,然后运用特征值的性质讨论了矩阵合同、相似的充要条件,以及逆矩阵的求解等相关问题. 关键词:矩阵的特征多项式,特征值,特征向量,对角矩阵,逆矩阵 Abstract:Firstly,it is given matrix eigenvalues and eigenvectors of two other methods, then with the properties of eigenvalue the contract of matrix discussed,we deeply discuss the sufficient and necessary conditions for the similar matrix contract, and the inverse matrix of the related problem solving. Keywords:matrix characteristic polynomial, eigenvalue, eigenvector, diagonal matrices, inverse matrix 目录 1 前言 (4) 2 矩阵的特征值和特征向量的求法 (4) 2.1 矩阵的初等变换法 (4) 2.2 矩阵的行列互逆变换法 (6) 3 矩阵特征值的一些性质及应用 (7) 3.1 矩阵之间的关系 (7) 3.1.1 矩阵的相似 (7) 3.1.2 矩阵的合同 (7) 3.2 逆矩阵的求解 (8) 3.3 矩阵相似于对角矩阵的充要条件 (8) 3.4 矩阵的求解 (9) 3.5 矩阵特征值的简单应用 (10) 结论 (11) 参考文献 (12) 致谢 (13)用QR算法求矩阵的特征值
求矩阵特征值算法及程序
一些特殊矩阵特征值得求法与应用 (2)
幂法求矩阵最大特征值
第八章矩阵的特征值与特征向量的数值解法
并行计算-矩阵特征值计算--
3矩阵特征值与特征向量的计算
矩阵特征值和特征向量的求法与应用(参考模板)
雅克比法求矩阵特征值特征向量
矩阵的特征值与特征向量的求法