《数学实验》实验报告——解线性方程组

合集下载

数学实验报告中学

数学实验报告中学

一、实验目的本次实验旨在通过实际操作,加深对数学理论知识的理解,提高数学思维能力,培养实际应用数学知识解决实际问题的能力。

二、实验内容1. 实验一:线性方程组的求解(1)实验原理线性方程组是数学中的一个重要内容,本实验采用高斯消元法求解线性方程组。

(2)实验步骤① 设定方程组:设线性方程组为 Ax=b,其中 A 是系数矩阵,x 是未知向量,b 是常数向量。

② 对系数矩阵 A 进行初等行变换,将方程组转化为行阶梯形矩阵。

③ 对行阶梯形矩阵进行初等行变换,将方程组转化为简化行阶梯形矩阵。

④根据简化行阶梯形矩阵,求解未知向量 x。

(3)实验结果以以下方程组为例:x + 2y - z = 42x + y + 3z = 8-x + y + 2z = 1经过高斯消元法求解,得到未知向量 x = 1,y = 2,z = 1。

2. 实验二:矩阵的特征值与特征向量(1)实验原理矩阵的特征值和特征向量是矩阵理论中的重要内容,本实验通过计算矩阵的特征值和特征向量,进一步理解矩阵的性质。

(2)实验步骤① 设定矩阵 A。

② 计算矩阵 A 的特征多项式f(λ)。

③ 求解特征多项式 f(λ) 的根,得到矩阵 A 的特征值。

④ 对每个特征值,求解对应的特征向量。

(3)实验结果以以下矩阵为例:A = [4 2 -12 4 2-1 2 4]计算得到特征值λ1 = 5,λ2 = 1,λ3 = 3。

对应的特征向量分别为:v1 = [111]v2 = [-110]v3 = [11]3. 实验三:概率论的应用(1)实验原理概率论是数学的一个重要分支,本实验通过实际操作,加深对概率论知识的理解,并应用于实际问题。

(2)实验步骤① 设定随机试验和事件。

② 计算事件的概率。

③ 分析事件的独立性。

(3)实验结果以以下随机试验为例:袋中有5个红球,3个蓝球,2个绿球,从中随机抽取3个球。

计算得到抽取3个红球的概率为 P(A) = 10/35 = 2/7。

大学数学实验报告答案

大学数学实验报告答案

实验题目:线性方程组的求解实验目的:1. 理解线性方程组的概念和求解方法。

2. 掌握高斯消元法和矩阵求逆法求解线性方程组。

3. 熟悉MATLAB软件在数学实验中的应用。

实验时间:2021年X月X日实验地点:计算机实验室实验器材:1. 计算机2. MATLAB软件实验内容:一、实验原理线性方程组是数学中一类常见的方程组,其形式如下:\[ Ax = b \]其中,\( A \) 是一个 \( m \times n \) 的系数矩阵,\( x \) 是一个 \( n \) 维的未知向量,\( b \) 是一个 \( m \) 维的常数向量。

线性方程组的求解方法有多种,如高斯消元法、矩阵求逆法等。

本实验主要介绍高斯消元法和矩阵求逆法。

二、实验步骤1. 设计一个线性方程组,并记录系数矩阵 \( A \) 和常数向量 \( b \)。

\[ \begin{cases}2x + 3y - z = 8 \\-x + 2y + 3z = 1 \\4x - y + 2z = 3\end{cases} \]系数矩阵 \( A \) 和常数向量 \( b \) 如下:\[ A = \begin{bmatrix}2 &3 & -1 \\-1 & 2 & 3 \\4 & -1 & 2\end{bmatrix}, \quad b = \begin{bmatrix}8 \\1 \\3\end{bmatrix} \]2. 使用MATLAB软件进行高斯消元法求解线性方程组。

```matlabA = [2 3 -1; -1 2 3; 4 -1 2];b = [8; 1; 3];x = A\b;```3. 使用MATLAB软件进行矩阵求逆法求解线性方程组。

```matlabA_inv = inv(A);x_inv = A_invb;```4. 比较两种方法得到的解,并验证其正确性。

三、实验结果与分析1. 使用高斯消元法求解得到的解为:\[ x = \begin{bmatrix}2 \\1 \\1\end{bmatrix} \]2. 使用矩阵求逆法求解得到的解为:\[ x = \begin{bmatrix}2 \\1 \\1\end{bmatrix} \]两种方法得到的解相同,验证了实验的正确性。

数学的上机实验报告

数学的上机实验报告

实验题目:线性代数求解方程组一、实验目的1. 理解线性代数中方程组的求解方法。

2. 掌握利用计算机求解线性方程组的算法。

3. 熟悉数学软件(如MATLAB、Python等)在数学问题中的应用。

二、实验内容本次实验主要利用数学软件求解线性方程组。

线性方程组是线性代数中的一个基本问题,其求解方法有很多种,如高斯消元法、矩阵求逆法等。

本实验以高斯消元法为例,利用MATLAB软件求解线性方程组。

三、实验步骤1. 编写高斯消元法算法程序。

2. 输入方程组的系数矩阵和常数项。

3. 调用程序求解方程组。

4. 输出解向量。

四、实验代码及分析1. 高斯消元法算法程序```matlabfunction x = gaussElimination(A, b)[n, m] = size(A);assert(n == m, 'The matrix A must be square.');assert(n == length(b), 'The length of b must be equal to the number of rows in A.');% 初始化解向量x = zeros(n, 1);% 高斯消元for i = 1:n-1% 寻找最大元素[~, maxIdx] = max(abs(A(i:n, i)));maxIdx = maxIdx + i - 1;% 交换行A([i, maxIdx], :) = A([maxIdx, i], :);b([i, maxIdx]) = b([maxIdx, i]);% 消元for j = i+1:nfactor = A(j, i) / A(i, i);A(j, i:n) = A(j, i:n) - factor A(i, i:n); b(j) = b(j) - factor b(i);endend% 回代求解for i = n:-1:1x(i) = (b(i) - A(i, i+1:n) x(i+1:n)) / A(i, i); endend```2. 输入方程组的系数矩阵和常数项```matlabA = [2, 1, -1; 1, 2, 1; -1, 1, 2];b = [8; 5; 2];```3. 调用程序求解方程组```matlabx = gaussElimination(A, b);```4. 输出解向量```matlabdisp('解向量为:');disp(x);```五、实验结果与分析实验结果:```解向量为:2-13```实验分析:通过高斯消元法,我们成功求解了给定的线性方程组。

线性方程组的数值解法实验报告

线性方程组的数值解法实验报告

实验报告——线性方程组的数值解法姓名:班级:学号:日期:一 实践目的1. 熟悉求解线性方程组的有关理论和方法。

2. 会编列主元消去法,全主元消去法,雅克比迭代法及高斯-赛德尔迭代法的程序。

3.通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。

4. 进一步应用数学知识,扩展数学思维,提高编程能力。

二 问题定义及题目分析1.求解线性方程是实际中常遇到的问题。

而一般求解方法有两种,一个是直接求解法,一个是迭代法。

2.直接法是就是通过有限步四则运算求的方程准确解的方法。

但实际计算中必然存在舍入误差,因此这种方法只能得到近似解。

3.迭代法是先给一个解的初始近似值,然后按一定的法则求出更准确的解,即是用某种极限过程逐步逼近准确解的方法。

4.这次实践,将采用直接法:列主元高斯消去法,全主元高斯消去法;迭代法:雅克比迭代法和高斯-赛德尔迭代法。

三 详细设计 设有线性方程组11112211n n a x a x a x b +++=21122222n n a x a x a x b +++= 1122n n nn n n a x a x a x b +++=令A= 111212122212n n n n nn a a a aa a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦ x=12n x x x ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦ b= 12n b b b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦一. 上三角方程组的求解很简单。

所以若能将方程组化为上三角方程组,那就很容易得到方程的解,高斯消去法则是一种简洁高效的方法,可以将方程组化为上三角方程组,但是这种方法必须满足每一步时0kk a =才能求解,还有当kk a 绝对值很小时,作分母会引起较大的舍入误差。

因此在消元过程中应尽量选择绝对值较大的系数作为主元素。

1.列主元消去法很好的解决这一问题。

将1x 的系数1(1)k a k n ≤≤中绝对值最大者作为主元素,交换第一行和此元素所在的行,然后主元消去非主元项1x 的系数,。

数学实验——线性代数方程组的数值解

数学实验——线性代数方程组的数值解

数学实验——线性代数⽅程组的数值解实验5 线性代数⽅程组的数值解法分1 黄浩 43⼀、实验⽬的1.学会⽤MATLAB软件数值求解线性代数⽅程组,对迭代法的收敛性和解的稳定性作初步分析;2.通过实例学习⽤线性代数⽅程组解决简化的实际问题。

⼆、For personal use only in study and research; not forcommercial use三、四、实验内容1.《数学实验》第⼆版(问题1)问题叙述:通过求解线性⽅程组,理解条件数的意义和⽅程组性态对解的影响,其中是n阶范德蒙矩阵,即是n阶希尔伯特矩阵,b1,b2分别是的⾏和。

(1)编程构造(可直接⽤命令产⽣)和b1,b2;你能预先知道⽅程组和的解吗?令n=5,⽤左除命令求解(⽤预先知道的解可验证程序)。

(2)令n=5,7,9,…,计算和的条件数。

为观察他们是否病态,做以下试验:b1,b2不变,和的元素,分别加扰动后求解;和不变,b1,b2的分量b1(n),b2(n)分别加扰动后求解。

分析A与b的微⼩扰动对解的影响。

取10^-10,10^-8,10^-6。

(3)经扰动得到的解记做,计算误差,与⽤条件数估计的误差相⽐较。

模型转换及实验过程:(1)⼩题.由b1,b2为,的⾏和,可知⽅程组和的精确解均为n ⾏全1的列向量。

在n=5的情况下,⽤matlab编程(程序见四.1),构造,和b1,b2,使⽤⾼斯消去法得到的解x1,x2及其相对误差e1,e2(使⽤excel计算⽽得)为:由上表可见,当n=5时,所得的解都接近真值,误差在10^-12的量级左右。

(2)⼩题分别取n=5,7,9,11,13,15,计算和的条件数c1和c2,(程序见四.2),结果如下:由上表可见,⼆者的条件数都⽐较⼤,可能是病态的。

为证实和是否为病态,先保持b不变,对做扰动,得到该情况下的⾼斯消元解,(程序见四.3),结果如下:(为使结果清晰简洁,在此仅列出n=5,9,13的情况,n=7,11,15略去)=10^-10时:=10^-8时:=10^-6时:由上表可见:a)对于希尔伯特阵,随着阶数的增加,微⼩扰动对解带来的影响越来越⼤,到了n=9时,已经有了6倍误差的解,到了n=13时,甚⾄出现了22倍误差的解元素;⽽随着的增加,解的偏差似乎也有增加的趋势,但仅凭上述表格⽆法具体判断(在下⼀⼩题中具体叙述)。

数学实验报告的总结(3篇)

数学实验报告的总结(3篇)

第1篇一、实验背景随着科技的不断发展,数学实验在各个领域中的应用越来越广泛。

数学实验作为一种以计算机为工具,通过模拟、计算和验证等方法,对数学理论进行实践探索和研究的方法,已经成为数学研究的重要手段。

本次实验旨在通过数学实验,加深对数学理论的理解,提高数学应用能力,培养创新意识和团队协作精神。

二、实验目的1. 熟悉数学实验的基本方法,掌握数学实验的基本步骤。

2. 通过实验,加深对数学理论的理解,提高数学应用能力。

3. 培养创新意识和团队协作精神,提高自身综合素质。

三、实验内容本次实验主要包括以下内容:1. 实验一:线性方程组的求解通过编写程序,实现线性方程组的直接法、迭代法等求解方法,并对比分析各种方法的优缺点。

2. 实验二:矩阵运算实现矩阵的加法、减法、乘法、转置等基本运算,以及求逆矩阵、特征值和特征向量等高级运算。

3. 实验三:数值积分通过编写程序,实现定积分、变积分、高斯积分等数值积分方法,并分析各种方法的误差和适用范围。

4. 实验四:常微分方程的数值解法实现欧拉法、龙格-库塔法等常微分方程的数值解法,并对比分析各种方法的稳定性、精度和适用范围。

四、实验过程1. 确定实验内容,明确实验目的。

2. 设计实验方案,包括实验步骤、算法选择、数据准备等。

3. 编写实验程序,实现实验方案。

4. 运行实验程序,收集实验数据。

5. 分析实验数据,得出实验结论。

6. 撰写实验报告,总结实验过程和结果。

五、实验结果与分析1. 实验一:线性方程组的求解通过实验,验证了直接法和迭代法在求解线性方程组时的有效性。

直接法在求解大规模线性方程组时具有较好的性能,而迭代法在求解稀疏线性方程组时具有较好的性能。

2. 实验二:矩阵运算实验结果表明,矩阵运算的程序实现具有较高的精度和效率。

在实际应用中,可以根据具体需求选择合适的矩阵运算方法。

3. 实验三:数值积分通过实验,验证了各种数值积分方法的有效性。

高斯积分具有较高的精度,但在求解复杂函数时,需要调整积分区间和节点。

实验五-解线性方程组的迭代法报告

实验五-解线性方程组的迭代法报告

实验五 解线性方程组的迭代法一、问题提出对实验四所列目的和意义的线性方程组,试分别选用Jacobi 迭代法,Gauss-Seidel 迭代法和SOR 方法计算其解。

二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如34510,10,10ε---=由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。

三、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤(1)k k xx ε+∞-<或k>(给予的迭代次数),对迭代法敛散性的意义;4、 体会初始解0x ,松弛因子的选取,对计算结果的影响。

四、实验学时:2学时五、实验步骤:1.进入C 或matlab 开发环境;2.根据实验内容和要求编写程序;3.调试程序;4.运行程序;5.撰写报告,讨论分析实验结果.解:J迭代算法:程序设计流程图:源程序代码:#include<stdlib.h>#include<stdio.h>#include<math.h>void main(){float a[50][51],x1[50],x2[50],temp=0,fnum=0;int i,j,m,n,e,bk=0;printf("使用Jacobi迭代法求解方程组:\n");printf("输入方程组的元:\nn=");scanf("%d",&n);for(i=1;i<n+1;i++)x1[i]=0;printf("输入方程组的系数矩阵:\n");for(i=1;i<n+1;i++){j=1;while(j<n+1){scanf("%f",&a[i][j]);j++;}}printf("输入方程组的常数项:\n");for(i=1;i<n+1;i++){scanf("%f",&a[i][n+1]);}printf("\n");printf("请输入迭代次数:\n");scanf("%d",&m);printf("请输入迭代精度:\n");scanf("%d",&e);while(m!=0){for(i=1;i<n+1;i++){for(j=1;j<n+1;j++){if (j!=i)temp=a[i][j]*x1[j]+temp;}x2[i]=(a[i][n+1]-temp)/a[i][i];temp=0;}for(i=1;i<n+1;i++){fnum=float(fabs(x1[i]-x2[i]));if(fnum>temp) temp=fnum;}if(temp<=pow(10,-4)) bk=1;for(i=1;i<n+1;i++)x1[i]=x2[i];m--;}printf("原方程组的解为:\n");for(i=1;i<n+1;i++){if((x1[i]-x2[i])<=e||(x2[i]-x1[i])<=e){printf("x%d=%7.4f ",i,x1[i]);}}}运行结果:GS迭代算法:#include<iostream.h>#include<math.h>#include<stdio.h>const int m=11;void main(){int choice=1;while(choice==1){double a[m][m],b[m],e,x[m],y[m],w,se,max; int n,i,j,N,k;cout<<"Gauss-Seidol迭代法"<<endl;cout<<"请输入方程的个数:";cin>>n;for(i=1;i<=n;i++){cout<<"请输入第"<<i<<"个方程的各项系数:"; for(j=1;j<=n;j++)cin>>a[i][j];}cout<<"请输入各个方程等号右边的常数项:\n"; for(i=1;i<=n;i++){cin>>b[i];}cout<<"请输入最大迭代次数:";cin>>N;cout<<"请输入最大偏差:";cin>>e;for(i=1;i<=n;i++){x[i]=0;y[i]=x[i];}k=0;while(k!=N){k++;for(i=1;i<=n;i++){w=0;for(j=1;j<=n;j++){if(j!=i)w=w+a[i][j]*y[j];}y[i]=(b[i]-w)/double(a[i][i]);}max=fabs(x[1]-y[1]);for(i=1;i<=n;i++){se=fabs(x[i]-y[i]);if(se>max)max=se;}if(max<e){cout<<endl;for(i=1;i<=n;i++)cout<<"x"<<i<<"="<<y[i]<<endl; break;}for(i=1;i<=n;i++){x[i]=y[i];}}if(k==N)cout<<"迭代失败!!"<<endl;choice=0;}}SOR方法:# include <stdio.h># include <math.h>#include<stdlib.h>/**********定义全局变量**********/float **a; /*存放A矩阵*/float *b; /*存放b矩阵*/float *x; /*存放x矩阵*/float p; /*精确度*/float w; /*松弛因子*/int n; /*未知数个数*/int c; /*最大迭代次数*/int k=1; /*实际迭代次数*//**********SOR迭代法**********/void SOR(float xk[]){int i,j;float t=0.0;float tt=0.0;float *xl;xl=(float *)malloc(sizeof(float)*(n+1)); for(i=1;i<n+1;i++){t=0.0;tt=0.0;for(j=1;j<i;j++)t=t+a[i][j]*xl[j];for(j=i;j<n+1;j++)tt=tt+a[i][j]*xk[j];xl[i]=xk[i]+w*(b[i]-t-tt)/a[i][i];}t=0.0;for(i=1;i<n+1;i++){tt=fabs(xl[i]-xk[i]);tt=tt*tt;t+=tt;}t=sqrt(t);for(i=1;i<n+1;i++)xk[i]=xl[i];if(k+1>c){if(t<=p)printf("\nReach the given precision!\n"); elseprintf("\nover the maximal count!\n");printf("\nCount number is %d\n",k);}elseif(t>p){k++;SOR(xk);}else{printf("\nReach the given precision!\n"); printf("\nCount number is %d\n",k);}}/**********程序*****开始**********/void main(){int i,j;printf("SOR方法\n");printf("请输入方程个数:\n");scanf("%d",&n);a=(float **)malloc(sizeof(float)*(n+1)); for(i=0;i<n+1;i++)a[i]=(float*)malloc(sizeof(float)*(n+1));printf("请输入三对角矩阵:\n");for(i=1;i<n+1;i++)for(j=1;j<n+1;j++)scanf("%f",&a[i][j]);for(i=1;i<n+1;i++)for(j=1;j<n;j++)b=(float *)malloc(sizeof(float)*(n+1)); printf("请输入等号右边的值:\n");for(i=1;i<n+1;i++)scanf("%f",&b[i]);x=(float *)malloc(sizeof(float)*(n+1)); printf("请输入初始的x:");for(i=1;i<n+1;i++)scanf("%f",&x[i]);printf("请输入精确度:");scanf("%f",&p);printf("请输入迭代次数:");scanf("%d",&c);printf("请输入w(0<w<2):\n");scanf("%f",&w);SOR(x);printf("方程的结果为:\n");for(i=1;i<n+1;i++)printf("x[%d]=%f\n",i,x[i]);}程序运行结果讨论和分析:①迭代法具有需要计算机的存贮单元较少,程序设计简单,原始系数矩阵在计算过程中始终不变等优点.②迭代法在收敛性及收敛速度等方面存在问题.[注:A必须满足一定的条件下才能运用以下三种迭代法之一.在Jacobi中不用产生的新数据信息,每次都要计算一次矩阵与向量的乘法,而在Gauss利用新产生的信息数据来计算矩阵与向量的乘法.在SOR中必须选择一个最佳的松弛因子,才能使收敛加速.]经过计算可知Gauss-Seidel方法比Jacobi方法剩点计算量,也是Jacobi方法的改进.可是精确度底,计算量高,费时间,需要改进.SOR是进一步改进Gauss-Seidel 而得到的比Jacobi,Gauss-Seidel方法收敛速度快,综合性强.改变松弛因子的取值范围来可以得到Jacobi,Gauss-Seidel方法.③选择一个适当的松弛因子是关键.结论:线性方程组1和2对于Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法均不收敛,线性方程组3收敛。

解线性方程组的直接方法实验报告

 解线性方程组的直接方法实验报告

解线性方程组的直接方法实验报告解线性方程组的直接方法实验报告1.实验目的:1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;4、通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

2.实验过程:实验代码:#include "stdio.h"#include "math.h"#includeusing namespace std;//Gauss法void lzy(double **a,double *b,int n){int i,j,k;double l,x[10],temp;for(k=0;k<n-1;k++){for(j=k,i=k;j<n;j++){if(j==k)temp=fabs(a[j][k]);else if(temp<fabs(a[j][k])) {temp=fabs(a[j][k]);i=j;}}if(temp==0){cout<<"无解" ; return;}else{for(j=k;j<n;j++){temp=a[k][j];a[k][j]=a[i][j];a[i][j]=temp;}temp=b[k];b[k]=b[i];b[i]=temp;}for(i=k+1;i<n;i++){l=a[i][k]/a[k][k];for(j=k;j<n;j++)a[i][j]=a[i][j]-l*a[k][j];b[i]=b[i]-l*b[k];}}if(a[n-1][n-1]==0){cout<<"无解" ; return;}x[n-1]=b[n-1]/a[n-1][n-1]; for(i=n-2;i>=0;i--){temp=0;for(j=i+1;j<n;j++)temp=temp+a[i][j]*x[j];x[i]=(b[i]-temp)/a[i][i];}for(i=0;i<n;i++){printf("x%d=%lf ",i+1,x[i]);printf(" ");}}//平方根法void pfg(double **a,double *b,int n) {int i,k,m;double x[8],y[8],temp;for(k=0;k<n;k++){temp=0;for(m=0;m<k;m++)temp=temp+pow(a[k][m],2);if(a[k][k]<temp)return;a[k][k]=pow((a[k][k]-temp),1.0/2.0);for(i=k+1;i<n;i++){temp=0;for(m=0;m<k;m++)temp=temp+a[i][m]*a[k][m]; a[i][k]=(a[i][k]-temp)/a[k][k]; }temp=0;for(m=0;m<k;m++)temp=temp+a[k][m]*y[m];y[k]=(b[k]-temp)/a[k][k];}x[n-1]=y[n-1]/a[n-1][n-1];for(k=n-2;k>=0;k--){temp=0;for(m=k+1;m<n;m++)temp=temp+a[m][k]*x[m];x[k]=(y[k]-temp)/a[k][k];}for(i=0;i<n;i++){printf("x%d=%lf ",i+1,x[i]);printf(" ");}}//追赶法void zgf(double **a,double *b,int n){int i;double a0[10],c[10],d[10],a1[10],b1[10],x[10],y[10]; for(i=0;i<n;i++) {a0[i]=a[i][i];if(i<n-1)c[i]=a[i][i+1];if(i>0)d[i-1]=a[i][i-1];}a1[0]=a0[0];for(i=0;i<n-1;i++){b1[i]=c[i]/a1[i];a1[i+1]=a0[i+1]-d[i+1]*b1[i];}y[0]=b[0]/a1[0];for(i=1;i<n;i++)y[i]=(b[i]-d[i]*y[i-1])/a1[i];x[n-1]=y[n-1];for(i=n-2;i>=0;i--)x[i]=y[i]-b1[i]*x[i+1];for(i=0;i<n;i++){printf("x%d=%lf ",i+1,x[i]);printf(" ");}}int main{int n,i,j;double **A,**B,**C,*B1,*B2,*B3;A=(double **)malloc(n*sizeof(double)); B=(double **)malloc(n*sizeof(double));C=(double **)malloc(n*sizeof(double));B1=(double *)malloc(n*sizeof(double));B2=(double *)malloc(n*sizeof(double));B3=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++){A[i]=(double *)malloc((n)*sizeof(double)); B[i]=(double *)malloc((n)*sizeof(double)); C[i]=(double *)malloc((n)*sizeof(double)); } cout<<"第一题(Gauss列主元消去法):"<<endl<<endl; cout<<"请输入阶数n:"<<endl;cin>>n;cout<<" 请输入系数矩阵: ";for(i=0;i<n;i++)for(j=0;j<n;j++){。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
k=k+1;
break;
else
f=[f,k];
M2=[M2,-u(1:r,k)];
end
k=k+1;
end
end
M2=[M2,-u(1:r,k:n)];
f=[f,k:n];
for i=1:(n-r)
y=zeros((n-r),1);
y(i)=1;
x=M1\(M2*y);
c=zeros(n,1);
for j=1:r
c(e(j))=x(j);
end
for j=1:(n-r)
c(f(j))=y(j);
end
C=[C,c];
end
结果分析:
1、
Elapsed time is 0.004000 seconds.
err =5.9797e-012
res =8.1628e-010
Elapsed time is 0.003000 seconds.
toc
err=norm(y-x)
res=norm(A*y-b)tBiblioteka cy=A\b;toc
err=norm(y-x)
res=norm(A*y-b)
tic
a=det(A)
for i=1:100
B=A;
B(1:100,i)=b;
y(i)=det(B)/a;
end
toc
err=norm(y-x)
res=norm(A*y-b)
err =5.0572e-012
res = 2.1790e-011
a = -1.3898e+225
Elapsed time is 0.083000 seconds.
err = 5.0860e-012
res = 1.4895e-009
2、
总结体会:
通过本次实验,我基本上掌握了MATLAB求矩阵的秩、行列式和逆矩阵的命令,并通过编程比较可知用逆矩阵法、除法、克拉默法则求解方程Ax=B时除法最省时,最精确;而且利用了以上方法求解给定的恰定,超定和欠定线性方程组,可以很快的求出结果;可见,利用MATLAB求解线性方程组是非常方便的,很有利于我们各方面涉及到这类问题的学习和工作。而由于本来对线性代数的知识就掌握得不是很好,所以做起这样的题目来确实很吃力,不过使用matlab软件解决了计算烦琐的问题,所以相对来说,题目也基本上能得到解决。在做实验过程中,我对线性代数的知识又有了进一步的认识,而且对于它结合matlab在现实问题中的应用也有了初步的了解,这也是一个不小的收获吧。
《数学实验》实验报告
班级
****
学号
****
姓名
****
成绩
试验内容
解线性方程组
试验
类别
自选试验
试验
时间
试验问题:
1.比较用逆矩阵法、除法、克拉默法则解方程Ax=b的用时和误差
2.求解方程组最多零解
试验目的:
1.了解MATLAB在实际问题中的应用
2.学会利用MATLAB做图并求解实际问题
问题分析(可含问题的背景、相关知识、数学建模与求解的方法等):
对于方程Ax=b,如果A为方阵,则此方程称为恰定方程。解恰定方程可以用:
(1)克拉默法则(最慢)
(2)方阵的逆
(3)Matlab定义的矩阵的除法(最快)
试验步骤(根据问题分析及试验目的所计划的试验步骤):
1、
A=rand(100)*1.e2;
x=ones(100,1);
b=A*x;
tic
y=inv(A)*b;
2、
function C=solution(A)
[l,u]=lu(A);
M1=[];M2=[];e=[];f=[];C=[];
r=rank(A);rf=size(A);n=rf(1,2);
k=1;
for i=1:r
while k<=n
if u(i,k)~=0
e=[e,k];
M1=[M1,u(1:r,k)];
相关文档
最新文档