资源描述
数值分析实验报告实验序号:实验一实验名称:实验目的:用Microsoft visual C+编写一个功能与Windows计算器一样的计算器。二 实验内容:(1)算法介绍:计算方法分析:Gauss 消元法的基本做法就是把方程组转化成为一个如下图的等价的三角方程组,这个过程叫做消元。得到三角方程组后,就可以逐个求出Xn, Xn-1,,XI,这个过程叫回代。谓忒- 忒二叫?i.程序代码分析:建立两个数组a和b,通过循环语句将n阶增广矩阵输入进去,通过对列的循环对每一 列进行消去未知数,通过n小步n大步把矩阵化简成上三角形矩阵,最后通过迭代法解得方 程组得解。(2)算法分析:程序中只用到一个主函数,求解线形方程组得算法都放在主函数中利用以下函数进行求解:aij = aij - (aik / akk) * akj;迭代:xn = ann + 1 / ann;for(i = n - 1;i = 1;i -)sum = 0.0;for(j = n;j = i + 1;j -)sum = sum + aij * xj;/cout sum endl;xi = (ain + 1 - sum) / aii;(3)原代码:#include#include #include #define N 1000 using namespace std;double aNN;double bN;int main()int n,i,j,k; double m; double xN;printf(”*Gauss 消元法*:nn); while(printf(”输入矩阵的阶数:)scanf(%d,&n);printf(输入增广矩阵:n);for(i=1;i=n;i+)for(j=1;j=n;j+)scanf(%lf,&aij); ;scanf(%lf,&bi);for(i=1;in;i+)for(k=i+1;k=n;k+)m=aki*1/aii*1;for(j=i;j=n;j+)akj= akj-aij*m;bk= bk-bi*m*1;printf(”经过第d大步后增广矩阵为:n,i);for(int l=1;l=n;l+)for(j=1;j0;i-)double sum=0;for(j=i+1;j=n;j+)sum =sum+aij*xj*1;xi=(bi-sum)*1/aii*1;printf(”线性方程组的解为:n);for(i=1;i=n;i+)if(xi=0)xi=abs(xi);printf(x%d=%fn,i,xi);return 0;三 实验截图实验结果分析:消去第k个元素时,对矩阵作加法和乘法各(n-k) * (n-k)次,除法运算(n-k)次, 对右端作加法和乘法各(n-k)次,加法和乘法运算分别各n*(n-l)*(n-l/2)/3和n*(n-l)/2 次,消元时还有n*(n-1)/2次除法运算,另外回代过程加法和乘法运算各n*(n-1)/2,除法 运算 n 次。可以看出,主要的计算量值是在消元过程中对系数矩阵所做,乘法和加法各约n*n*n/3 次,而对右端项消元过程和回代过程所用运算量皆为n*n/2,总共n*n次乘法和加法运算。 在变矩阵为上三角形矩阵的过程中,要进行一系列的四舍五入,在计算机中进行运算 时就 会出现大量的舍入误差,因此对于有些方程求不出准确解只能求得近似解。此方法只是最一 般的算法,还有待于进一步优化。
展开阅读全文