ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:473.77KB ,
资源ID:11442936      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11442936.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(雅克比法求矩阵特征值特征向量.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

雅克比法求矩阵特征值特征向量.docx

1、雅克比法求矩阵特征值特征向量C语言课程设计报告课程名称: 计算机综合课程设计 学 院: 土木工程学院 设计题目: 矩阵特征值分解 级 别: B 学生姓名: 学 号: 同组学生: 无 学 号: 无 指导教师: 2012年 9 月 5 日C语言课程设计任务书(以下要求需写入设计报告书)学生选题说明: 以所发课程设计要求为准,请同学们仔细阅读; 本任务书提供的设计案例仅供选题参考;也可自选,但难易程度需难度相当; 鼓励结合本专业(土木工程、力学)知识进行选题,编制程序解决专业实际问题。 限2人选的题目可由1-2人完成(A级);限1人选的题目只能由1人单独完成(B级); 设计总体要求: 采用模块化程序

2、设计; 鼓励可视化编程; 源程序中应有足够的注释; 学生可自行增加新功能模块(视情况可另外加分); 必须上机调试通过; 注重算法运用,优化存储效率与运算效率; 需提交源程序(含有注释)及相关文件(数据或数据库文件); (cpp文件、txt或dat文件等) 提交设计报告书,具体要求见以下说明。设计报告格式:1 课程设计任务书(功能简介、课程设计要求);2 系统设计(包括总体结构、模块、功能等,辅以程序设计组成框图、流程图解释);3 模块设计(主要模块功能、源代码、注释(如函数功能、入口及出口参数说明,函数调用关系描述等);4 调试及测试:(调试方法,测试结果的分析与讨论,截屏、正确性分析);5

3、设计总结:(编程中遇到的问题及解决方法);6 心得体会及致谢;参考文献 1.课程设计任务书功能简介:a)输入一个对称正方矩阵A,从文本文件读入;b)对矩阵A进行特征值分解,将分解结果:即U矩阵、S矩阵输出至文本文件;c)将最小特征值及对应的特征向量输出至文本文件;d)验证其分解结果是否正确。提示:A=USUT,具体算法可参考相关文献。功能说明:矩阵特征值分解被广泛运用于土木工程问题的数值计算中,如可用于计算结构自振频率与自振周期、结构特征屈曲问题等。注:以三阶对称矩阵为例 2.系统设计3.模块设计#include#include#includeint main() FILE *fp; int

4、tezheng(double *a,int n,double *s,double *u,double eps,int itmax); /函数调用声明 int i,j,p,itmax=1000; /itmax为最大循环次数 double eps=1e-7,s33,u33; /eps为元素精度,s为对角矩阵S,u为矩阵U double a9;/a为待分解矩阵A i=tezheng(a,3,s,u,eps,1000); if(i0) /i对应函数中的返回值it if(fp=fopen(juzhen.txt,w)=NULL) /打开待输入txt文件 printf(无法打开文件.n); return;

5、printf(U矩阵为:n); /下几句分别向屏幕和txt文件输入矩阵U fprintf(fp,U矩阵为:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%10.6f,uij); fprintf(fp,%10.6f,uij); printf(n); fprintf(fp,n); printf(S对角矩阵为:n); /下几句分别向屏幕和txt文件输入矩阵S fprintf(fp,S对角矩阵为:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%10.6f,sij); fprintf(fp,%10.6f,sij); printf(n

6、); fprintf(fp,n); p=0; for(i=0;i3;i+)/下面几句为求最小特征值及其对应特征向量,并输出到屏幕和txt文件中 if(siis00) p=i; printf(最小特征值为:%10.6fn,spp); fprintf(fp,最小特征值为:%10.6fn,spp); printf(对应特征向量为:n); fprintf(fp,对应特征向量为:n); for(i=0;i3;i+) printf(%10.6fn,uip); fprintf(fp,%10.6fn,uip); int tezheng(double *a,int n,double s33,double u33

7、,double eps,int itmax) FILE *A; char line1000; /存放从文件juzhen A.txt读入的数据 char *k= ; int i,j,p,q,it; double sint,cost,sin2t,cos2t,d,tmp,t1,t2,t3,fm; it=0; if(A=fopen(juzhen A.txt,r)=NULL) printf(无法打开文件n); return; fgets(line,1000,A); /从文件指针A指向的文件,即juzhen A.txt中读入字符数据到数组line中 strtok(line,k); /原型char *str

8、tok(char *s, const char *delim);说明:strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回被分割出片段的指针。 for(i=0;in*n;i+) ai = atof(strtok(NULL,k); /atof函数功能: 把字符串转换成浮点数 fclose(A); /释放A指针 for(i=0;in;i+) /以下几

9、句初始化矩阵U uii=1.0; for(j=0;jn;j+) if(i!=j) uij=0.0; while(ititmax) it+; d=0.0; for(i=1;in;i+) /该for循环找矩阵A中非对角元素中的最大值,并记下其位置 for(j=0;jd) d=tmp; p=i;q=j; if(deps) /该if条件句用数组元素精度控制循环结束与否 for(i=0;in;i+) for(j=0;jn;j+) sij=ai*n+j; return (it); sint=2*ap*n+q; /以下几句为递推公式,求S矩阵主对角元素 sin2t=2*ap*n+q/(sqrt(4*ap*n

10、+q*ap*n+q+(aq*n+q-ap*n+p)*(aq*n+q-ap*n+p); if(aq*n+q-ap*n+p0.0) sin2t=-sin2t; cos2t=sqrt(1.0-sin2t*sin2t); sint=sin2t/(sqrt(2.0*(1.0+cos2t); cost=sqrt(1.0-sint*sint); tmp=ap*n+p; t1=tmp*cost*cost; t2=aq*n+q*cost*cost; t3=ap*n+q*sin2t; ap*n+p=t1+aq*n+q-t2-t3; aq*n+q=tmp-t1+t2+t3; ap*n+q=0.0; /置该非对角元素

11、为0.0,下次循环最大便不是它了 aq*n+p=0.0; /同上 for(j=0;jn;j+) /以下两for语句求S矩阵非主对角元素 if(j!=p)&(j!=q) tmp=ap*n+j; ap*n+j=tmp*cost-aq*n+j*sint; aq*n+j=tmp*sint+aq*n+j*cost; for(i=0;in;i+) if(i!=p)&(i!=q) ai*n+p=ap*n+i; ai*n+q=aq*n+i; for(i=0;in;i+) /该for语句递推求矩阵U fm=uip; uip=fm*cost-uiq*sint; uiq=fm*sint+uiq*cost; retu

12、rn (0); 4.调试及测试 1.0 2.0 3.0矩阵A= 2.0 2.0 5.0 3.0 5.0 1.01.屏幕输出如下:2.文本文件输出见文件“juzhen.txt”。3.结果正确性分析利用数学软件Mathematica 8.0计算特征值(即矩阵S主对角线元素)及对应特征向量组U如下截图。(Eigenvalues 为计算矩阵特征值函数,Eigenvectors 为计算矩阵特征向量函数)5.设计总结拿到这个题目,我首先想到用解方程组的方法来求解矩阵U和S,但是后来发现:假如这是一个三阶矩阵,那么通过A=USUT可以得到含9个方程的方程组,而矩阵U和S中共12个未知数,故通过这种方法建模被

13、否定了。后查阅资料,理解了这是一个矩阵特征分解的问题,故转化为两部分求解:特征值和特征向量。可以通过雅克比变换来求解。从txt文本文件中读入数据又是一大障碍,本以为存在文本文件中的浮点数据只需通过浮点格式字符串就能将其读出,结果运行后屏幕显示一团乱。后查阅资料得知,文本文件中的数据都是字符数据。故先是将其中的字符数据读出,然后用字符与浮点之间的转换函数还原浮点数据。最后碰到的一个问题是主函数与被调用函数之间的衔接问题,就是一个指针所指的实参和形参,要么都是一维数组,要么都是二维数组,否则就会出错。6.心得体会及致谢起先听说我们这是编程课,感觉很激动,心想上学期所学内容终于有用武之地。但拿到题目

14、后,我像立刻被泼了一盆冷水似的,感觉这个题目无从下手。咬着牙挣扎了两天仍然是毫无头绪,于是乎我想到了放弃,找到老师表达想换题目的想法。起初对老师的拒绝感到很不爽,可老师建议我去查阅资料,先把矩阵论中没学过的只是给搞懂然后再去编程。我先查阅了一些关于算法的书籍,结果其中的程序看不懂,故又借了关于矩阵的书一起研究。经过一个多星期的努力,终于懂了,编出来了。在此,谢谢老师的建议。我想这对我以后自学任何东西都是有帮助的。参考文献:1、基于MATLAB的实用数值计算 石辛民 郝整清 编著 清华大学出版社北京交通大学出版社 2006年2月第1版2、C语言算法速查手册 程晓旭 耿鲁静 张海 王勇 编著 人民邮电出版社 2009年10月第1版3、Mathematica 4 教程 丁大正 编著 电子工业出版社 2002年3月第1版4、XX百科附:所用原理所用函数:欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1