欢迎来到天天文库
浏览记录
ID:45605187
大小:195.13 KB
页数:18页
时间:2019-11-15
《数值分析编程大作业1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《数值分析》计算实习题目第一题姓名:学号:学院:航空科学与工程学院一、开发平台的选择木题中选择MicrosoftVisualStudio2008作为开发平台,利用VC++作为开发环境,编了一个基于MFC的程序。本程序不仅仅是界面不同,编程的思想和运算的速度都有提高。其优点是通过设计类,将所求数组、精度、带宽等封装为成员变量,将幕法、反幕法、矩阵与向量相乘、求向量的2范数和求条件数等功能封装成类的成员函数这也就是利用了封装性。在定义类的对象Z后可以方便地调用这些成员变量和成员函数。本程序可以很容易地升级为通用性的程序,用户利
2、用可执行文件只需要输入几个参数就可以运算同一类的任意方程,而用户不用像C语言那样改动源代码。应用面向对象的编程思想还有一个最犬的优点是可扩展性。想添加或改变功能只需要改动成员函数就行了而不会影响到程序的其他部分。同时,利用MFC还可以开发出很友好的程序界面。本次程序的初始化界面如下:二、算法的设计方案1、矩阵的存储方案本矩阵为501阶带状矩阵,要求所有零元索均不存储。于是仅定义二维数组m_Airay[ROW_N][COL_N]来存放矩阵A的压缩矩阵,这样可以节省内存空间。在窗口初始化的时候就调用类的构造函数对m_Airay
3、[ROW_N][COL_N]进行初始化。虽然在程序界面上显示了矩阵,但非零元素其实是没有存储的。2、求解矩阵的行列式de(A通过doolittle分解,可知I41=1LU1=1L11(/1=lxl(/l=u,所以只需将doolittle分解后得到的上三角矩阵U的对角线元素相乘,即可得到行列式A的値。3、求最小特征值人、最大特征值入小和按模最小特征值入通过幕法求解;II按模最人的特征值,记为Eigenvalue[0]o将Eigenvalue]。]作为平移量,调用原点平移函数。对得到的新矩阵应用幕法,求其按模最人的特征值。
4、将求出的新特征值加上Eigenvalue]。]后记为Eigenvalue]1]。比较Eigenvalue[0]与Eigenvalue]1]两个数,较大的数为最大特征值入仙;较小的数为最小特征值入。最后通过反幕法计算出按模最小特征值入o其中求解方程组计算向量u时,先利用已经编好的LU分解法进行分解,再编写冋代过程得到uo4、求A的与数从最接近的特征值人伙二1,2,…,39)k利用原点平移,设定每次的平移量为儿,而后利用反幕法求出相应的人值。5、求A的(谱范数)条件数cond(A)2山于A为实对称矩阵,故IIAII2=74ax
5、(^^)=^5oi,IIA-1ll?==11/人I,所以CMd(A)2=11AIIJIA-1II2=IA5()i/AIo6、计算消息的激发在窗体类屮定义一个成员变量m.State,初始化窗体时将它设置为0。当按下“计算”按钮时激发了按钮被按下的消息,程序开始计算,同时将m_State设为lo此时再次按下“计算”按钮将弹出提示框“您已经计算过了!”而不再进行计算了。这样可以保证计算过程只进行一次。当输入新的矩阵重新进行计算时,就再次初始化窗口,此时m_Statc又被初始化为0,可以再次进行计算。三、源代码在光盘中有全部的源代
6、码,请用MicrosoftVisualStudio2008打开。同时还有一个课执行文件可以直接执行。由于有些程序段是MFC直接生成的,这里没有把那部分程序打出。1、类的设计类的头文件为:^pragmaonce//使头文件只被编译一次/*常量R0W_N表示压缩矩阵行的维数*/#defineR0W_N5/*常量C0L_N表示压缩矩阵列的维数*/^defineC0L_N501classArray//存放所求矩阵A的类。类的成员函数中定义了对类的某木操作。{public://声明构造函数和析构函数Array(void);//默认的
7、构造函数Array(doublearray);//重载构造函数,使其能对mArray数组进彳亍针对其他题目的初始化"Array(void);//默认的析构函数public://声明成员变量〃非零元素压缩存储矩阵doublemArray[R0W_N][COLN];//屮间存储矩阵doublem_Array_Change[ROW_N][C0L_N];//定义矩阵的上半带宽intms;//定义矩阵的下半带宽intm_r;//定义迭代精度doublem_Accuracy;public://声明成员函数〃用Doolittle分解法求
8、带状线性方程组的行列式的值voidDoolittle〃求三个整形数的最大值intmax_3(inta,intb,intc);〃对一个向量进行初始化voidVector_lnitialize(doublevector[COL_N]);〃将矩阵恢复到原來的数值voidRestored();//取向量的范数d
此文档下载收益归作者所有