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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C++课程设计.docx

1、C+课程设计信息系统开发语言(一)课程设计线性方程组求解一、课程设计目的通过课程设计要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。课程设计主要是C+语言程序设计的实现。通过该课程设计,可以将我们课堂上掌握的理论知识与处理数据的业务相结合,以检验我们掌握知识的宽度、深度及对知识的综合运用能力。二、问题描述1)利用迭代法求线性方程组的解。 2)输入线性方程组的系数矩阵和常数列程序正常运行后,屏幕上显示一个文字菜单,当用户选定操作项目所对应的序号时,根据应用程序的提示信息,从键盘上输入相应的数据。输出数据应用程序正常运行后,要在屏幕上显示一个文字菜单, 要求用户输入数据时,要给出清

2、晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。三、问题分析迭代法原理:将原线性方程组Ax=b中系数矩阵的主对角线移到一边并将其系数化为一,然后在给定迭代初值的情况下通过迭代的方法求解线性方程组的值。题目要求用迭代法给线性方程组求解,首先要了解迭代法这一算法是怎么实现求解组方程组。用迭代法求线性方程时,需要输入一些什么数据,来实现方程求解的过程。在求解过程中,方程组如出现无解、有限解、无限解该怎么处理。一般性用迭代法给方程求解如下:给定实数域上光滑的实值函数f(x)以及初值定义数列 (1)称为f(x)的一个迭代序列。给定迭代函数f(x)以及一个初值利用(1)迭代得到数列如果数列收敛于

3、一个,则有 (2)即是方程x=f(x)的解。由此启发我们用如下的方法球方程g(x)=0的近似解。将方程g(x)=0改写为等价的方程 x=f(x), (3)然后选取一初值利用(1)做迭代。迭代数列收敛的极限就是方程g(x)=0的解。用上述方程求方程的根的一个首要问题是迭代是否收敛?经过试验我们知道,使得迭代序列收敛并尽快收敛到方程g(x)=0的某一解的条件是迭代函数f(x)在解的附近的导数的绝对值近两小。这启发我们将迭代方程修改成 (4)我们需要选取使得得 于是 特别地,如果f(x)=g(x)+x ,则我们得到迭代公式 (5)四、算法分析、设计与描述1.算法分析和设计 用雅克比(Jacobi)迭

4、代法求解设有n阶方程组 (6)若系数矩阵非奇异,且(i = 1, 2, n),将方程组(6)改写成 然后写成迭代格式 (7)(7)式也可以简单地写为 (8)对(7)或(8)给定一组初值后,经反复迭代可得到一向量序列,如果X (k)收敛于,则就是方程组(6)的解。这一方法称为雅克比(Jacobi)迭代法或简单迭代法,(7)或(8)称为Jacobi迭代格式。下面介绍迭代格式的矩阵表示:设D = diag (a11, a22, , ann),将AX = b改写为: AX = (D (D - A) x = b DX = (D - A) x + b X = (I D-1A) x + D-1b记 B =

5、I D-1A F = D-1 b则迭代格式的向量表示为 称为雅克比迭代矩阵。2算法描述前面已经提到用雅克比迭代法求线性方程组的解,这是总体思路。(1)计算迭代矩阵:将系数矩阵的所有值分别处以各自所在行的主对角线值,然后将主对角线赋值为0。1)输入矩阵方程矩阵Aij;输入右边向量bi;2)规定迭代精度0.000000001;3)据算迭代矩阵。设有n阶方程组 (9)若系数矩阵非奇异,且(i = 1, 2, n),将方程组(9)改写成然后写成迭代格式 (10)(10)式也可以简单地写为 (11)由上得,bi=bi/Aij当i=j时,xii=0;当ij时,xij=-Aij/Aij(2)输入迭代初值,进

6、行迭代将迭代初值存入yn矩阵,然后利用迭代式nn=nn+xij*yj; yi=nn+bi;经过有限次迭代得到误差要求以内的值(3)流程图步骤实现开始输入方程组的元n;输入方程组等式左边的系数矩阵,即曾广矩阵AKK;输入方程组等式右边的向量bi。给方程最高次数K赋值。计算方程组的迭代矩阵y。判断max|xi-yi|是否成立,成立则方程存在接,否则方程无解。判断kN?是否成立;成立则输出方程的解yi;不成立,则返回循环,直到出结果为止。结束五、程序设计1程序设计的基本思路从上面的算法分析可以看到,本题面临的计算问题的关键是矩阵运算。可以定义一个矩阵Matrix作为基类,用来存放系数矩阵成员A,以及

7、存放方程编右边量b,方程迭代矩阵X,迭代初始变量y。Matrix- bi:double* - Aii:double*- xij:double*- yi:double*+one(int i,int n,int j):void+two(int i,int n,int j):void+three(int i,int n,int j):void+four(int I,int n,int j):void2程序代码及说明/Matrix.h 文件一,Matrix类定义#ifndef _MATRIX_H#define _MATRIX_Hclass matrix /类Matrix类定义public: /外部接口

8、 void one(int i,int n,int j); /赋方程系数矩阵 void two(int i,int n,int j); /赋方程右端向量 void three(int i,int n,int j) /赋示迭代矩阵 void four(int i,int n,int j); /赋迭代初值private: double*bi; /存放右端向量数值 double*Aii; /存放方程系数矩阵 double*xij; /存放迭代矩阵 double*yi; /存放迭代初值#endif/ Matrix.ccp 文件二, Matrix类实现 /包含类的定义头文件#includeMatrix.

9、h#includeusing namespace std;void matrix:one(int i,int n,int j) /显示方程系数矩阵 for(i=0;in;i+) for(j=0;jAij;void matrix:two(int i,int n,int j) /显示方程右端向量 for(i=0;ibi;void matrix:three(int i,int n,int j) /显示迭代矩阵 for(i=0;in;i+) bi=bi/Aii; for(j=0;jn;j+) if(i=j) xii=0; else xij=-Aij/Aii; void matrix:four /显示代

10、初值 cout输入迭代初值endl; for(i=0;iyi; int f=1;/线性方程求解.cpp 文件三,主函数#includeMatrix.h /包含类的定义头文件#include#includeusing namespace std;void matrix:one(int i,int n,int j) for(i=0;in;i+) for(j=0;jAij;void matrix:two(int i,int n,int j) for(i=0;ibi;void matrix:three(int i,int n,int j) for(i=0;in;i+) bi=bi/Aii; for(j

11、=0;jn;j+) if(i=j) xii=0; else xij=-Aij/Aii; void matrix:four cout输入迭代初值endl; for(i=0;iyi; int f=1;void main() #define kk 50 /定义最大方程元数 int hh,gg,mm; double Akkkk,xkkkk,bkk,ykk,akk,zkk,m,nn,d,e=1,w,fff ; matrix cxy: cout输入的方程元数n; cout请输入方程系数矩阵:endl; cxy.one( ); /按n行n列输出矩阵 cout请输入右边向量:endl; cxy.two();

12、/给 bi输入n个数 cout输入你想要的迭代精度(建议1e-5以上)!fff; /输入迭代精度值 cout输入最大迭代次数(建议300次以上)!mm; /输入迭代次数 cout计算出迭代矩阵为:endl; cxy.three( ) /输出迭代矩阵 cout ; /输出空格 for(i=1;in+1;i+) couttXi t; /输出Xi cout精度; /输出跌打精度值 coutendl; /换行 cout迭代初值为: ; /输出迭代初值 coutsetiosflags(ios:fixed); /输出浮点型数据 cxy.four(); /给yi输入n个数 coutfff) /雅克比迭代法实

13、现方程部分 for(i=0;in;i+) zi=yi; nn=0; for(j=0;je) e=fabs(zi-yi); if(i=0) coutsetiosflags(ios:fixed); cout第setw(3)setprecision(3)f+次迭代 ; coutsetiosflags(ios:fixed); coutsetw(8)setprecision(8)yi ; coute; coutmm) cout迭代次数大于mm次endl; cout认为方程发散,迭代不收敛endl; exit(1); coutendl; coutendl; cout方程迭代了f-1次,达到你所要求的精度f

14、ffendl; cout最后结果为:endl; coutendl; for(i=0;in;i+) coutXi+1=yi; cout 附加项和宏文件,选中 FileTool Developer Studio Add-in 附加项,这个时候就会出现 A 和 O 的文件栏按钮: Add File To Project Open今后再打开文件/工程或是添加文件到工程的时候,用这两个按钮,不要用VC6默认的了,这样就不会再出问题了。更详细方案请参考:2程序运行结果分析(多组数据测试)按照提示依次输入 方程元数,系数矩阵,右边向量和迭代初值。结果如下:1)有限解情况:本例的方程组来自凌道盛的著作非线性有

15、限元及程序,计算结果与原著作完全吻合。2)无限解情况:本例的方程组来自XX百科,计算结果与原答案一致,详情请登入:3)无解情况本例的方程组来自XX百科,计算结果与原答案一致,详情请登入:七、总结与体会经过一个学期对C+课程设计的学习,我学习到了一些基本知识,解了C+语言程序设计中面向对象的思想,这些知识都为我在课程实践和进一步的学习打下了一定的基础。在近三周的C+课程设计中,我体会颇多,学到了很多东西。我加强了对C+课程设计这门课程的认识!总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大好处。像解线性方程组这样的程序设计,经历了平时在课堂和考试中不会出现的问题和考验。而

16、这些问题,这并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们挑战难题,学会用已掌握的知识去解决具体问题的能力,进一步培养了独立思考问题和解决问题的能力。特别是学会了在Visual C+中如何调试程序的方法。当然,老师的指导和同学的帮助也是不可忽视的,他们给了我许多提示和帮助,教会了我编译复杂程序的方法。在老师和同学的帮助下,通过自己的努力,终于完成了这次求线性方程组的简单课程设计。我经过这段时间的编程,对其中的艰辛,我是深有体会。从刚开始上网查资料,了解什么是迭代法,通过迭代法如何求得线性方程组的解,然后选择自己认为比较简单的迭代法雅克比迭代求线性方程组的解。选择了一个大致的算法后,

17、就没有一开始那么无从下手了,按课程设计的模板开始写课程设计的目的、问题描述、问题分析、算法分析与设计。算法分析与设计,其实就是运用选择的方法一步一步实现程序,也是一个大致的设计思路,这要求我们对自己所选算法的熟悉掌握,大量查找资料研读。对于迭代法,以前没接触过,书本上只有关于用高斯消元法求线性方程组的解,所以查阅资料是免不了的。接下来是画流程图,这可是一个大问题,在WORD在画流程图本身就是一项挑战,罢了,慢慢来吧!也就是把算法步骤用图文表示出来。通过前面的算法分析与设计和流程图的构建,相信对于程序设计的思路描述,应该是简单的。接下来在选择程序、理解程序到后来的调试程序以及改进程序这个过程中,

18、我遇到了各种各样的困难和挫折。但是我坚定信念,对自己充满了信心,想尽一切办法克服重重困难。通过课程设计的训练,我进一步学习和掌握了对程序的设计和编写,从中体会到了面向对象程序设计的方便和巧妙。懂得了在进行编写一个程序之前,要有明确的目标和整体的设计思想。另外某些具体的细节内容也是相当的重要。这些宝贵的编程思想和从中摸索到的经验都是在编程的过程中获得的宝贵财富。这些经验对我以后的编程会有很大的帮助的,我要好好利用。虽然这次课程设计是在参考程序的基础之上进行的,但是我觉得对自己是一个挑战和锻炼。我很欣慰自己能在程序中加入自己的想法和有关程序内容,也就是对它的程序改进了一番改进,并有创新。但是我感觉自己的创新还不够典型,总之还不是很满意。另外由于时间的紧迫和对知识的了解不够广泛,造成了系统中还存在许多不足,功能上还不够完善。以后我会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设计让我充分认识到了自己的不足,认识到了动手能力的重要性。我会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!总而言之,这次C+程序设计让我收获很大。

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

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