《数学实验》实验报告——解线性方程组
数学实验报告中学
![数学实验报告中学](https://img.taocdn.com/s3/m/f9905f7fbdd126fff705cc1755270722192e592d.png)
一、实验目的本次实验旨在通过实际操作,加深对数学理论知识的理解,提高数学思维能力,培养实际应用数学知识解决实际问题的能力。
二、实验内容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。
大学数学实验报告答案
![大学数学实验报告答案](https://img.taocdn.com/s3/m/80c81c9fc9d376eeaeaad1f34693daef5ff71331.png)
实验题目:线性方程组的求解实验目的: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} \]两种方法得到的解相同,验证了实验的正确性。
数学的上机实验报告
![数学的上机实验报告](https://img.taocdn.com/s3/m/76407c77905f804d2b160b4e767f5acfa1c783b3.png)
实验题目:线性代数求解方程组一、实验目的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```实验分析:通过高斯消元法,我们成功求解了给定的线性方程组。
线性方程组的数值解法实验报告
![线性方程组的数值解法实验报告](https://img.taocdn.com/s3/m/4add2346e518964bcf847c4f.png)
实验报告——线性方程组的数值解法姓名:班级:学号:日期:一 实践目的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 的系数,。
数学实验——线性代数方程组的数值解
![数学实验——线性代数方程组的数值解](https://img.taocdn.com/s3/m/245dc35ff6ec4afe04a1b0717fd5360cba1a8dfc.png)
数学实验——线性代数⽅程组的数值解实验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篇)](https://img.taocdn.com/s3/m/930c9f7215791711cc7931b765ce0508763275d3.png)
第1篇一、实验背景随着科技的不断发展,数学实验在各个领域中的应用越来越广泛。
数学实验作为一种以计算机为工具,通过模拟、计算和验证等方法,对数学理论进行实践探索和研究的方法,已经成为数学研究的重要手段。
本次实验旨在通过数学实验,加深对数学理论的理解,提高数学应用能力,培养创新意识和团队协作精神。
二、实验目的1. 熟悉数学实验的基本方法,掌握数学实验的基本步骤。
2. 通过实验,加深对数学理论的理解,提高数学应用能力。
3. 培养创新意识和团队协作精神,提高自身综合素质。
三、实验内容本次实验主要包括以下内容:1. 实验一:线性方程组的求解通过编写程序,实现线性方程组的直接法、迭代法等求解方法,并对比分析各种方法的优缺点。
2. 实验二:矩阵运算实现矩阵的加法、减法、乘法、转置等基本运算,以及求逆矩阵、特征值和特征向量等高级运算。
3. 实验三:数值积分通过编写程序,实现定积分、变积分、高斯积分等数值积分方法,并分析各种方法的误差和适用范围。
4. 实验四:常微分方程的数值解法实现欧拉法、龙格-库塔法等常微分方程的数值解法,并对比分析各种方法的稳定性、精度和适用范围。
四、实验过程1. 确定实验内容,明确实验目的。
2. 设计实验方案,包括实验步骤、算法选择、数据准备等。
3. 编写实验程序,实现实验方案。
4. 运行实验程序,收集实验数据。
5. 分析实验数据,得出实验结论。
6. 撰写实验报告,总结实验过程和结果。
五、实验结果与分析1. 实验一:线性方程组的求解通过实验,验证了直接法和迭代法在求解线性方程组时的有效性。
直接法在求解大规模线性方程组时具有较好的性能,而迭代法在求解稀疏线性方程组时具有较好的性能。
2. 实验二:矩阵运算实验结果表明,矩阵运算的程序实现具有较高的精度和效率。
在实际应用中,可以根据具体需求选择合适的矩阵运算方法。
3. 实验三:数值积分通过实验,验证了各种数值积分方法的有效性。
高斯积分具有较高的精度,但在求解复杂函数时,需要调整积分区间和节点。
实验五-解线性方程组的迭代法报告
![实验五-解线性方程组的迭代法报告](https://img.taocdn.com/s3/m/01db7c55814d2b160b4e767f5acfa1c7aa0082af.png)
实验五 解线性方程组的迭代法一、问题提出对实验四所列目的和意义的线性方程组,试分别选用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收敛。
解线性方程组的直接方法实验报告
![解线性方程组的直接方法实验报告](https://img.taocdn.com/s3/m/657bd9b0700abb68a982fbc3.png)
解线性方程组的直接方法实验报告解线性方程组的直接方法实验报告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++){。
数学实验基础实验报告
![数学实验基础实验报告](https://img.taocdn.com/s3/m/f47b6d77cec789eb172ded630b1c59eef8c79a88.png)
实验名称:线性方程组的求解实验目的:1. 理解线性方程组的基本概念和解法。
2. 掌握高斯消元法和矩阵运算的基本方法。
3. 培养学生运用数学软件进行实验的能力。
实验器材:1. 计算机2. 数学软件(如MATLAB、Mathematica等)3. 纸和笔实验时间:2023年X月X日实验内容:一、实验背景线性方程组是数学中常见的一类问题,它在工程、物理、经济学等领域有着广泛的应用。
本实验旨在通过计算机软件,解决线性方程组的求解问题,并加深对线性代数知识的理解。
二、实验原理线性方程组的求解方法有很多,如高斯消元法、克拉默法则等。
本实验主要介绍高斯消元法。
高斯消元法是一种通过行变换将系数矩阵化为上三角矩阵,从而求解线性方程组的方法。
三、实验步骤1. 准备实验数据:根据题目要求,准备一个线性方程组,如:\[ \begin{cases}2x + 3y - z = 8 \\x - 2y + 3z = 4 \\3x + 2y - 4z = 0\end{cases} \]2. 使用数学软件编写程序,实现高斯消元法。
以下为MATLAB代码示例:```matlab% 定义系数矩阵和常数项A = [2 3 -1; 1 -2 3; 3 2 -4];b = [8; 4; 0];% 高斯消元法r = size(A, 1);for i = 1:r% 寻找主元[~, maxIndex] = max(abs(A(i:r, i)));maxIndex = maxIndex + i - 1;% 交换行A([i maxIndex], :) = A([maxIndex i], :);b([i maxIndex]) = b([maxIndex i]);% 消元for j = i+1:rfactor = A(j, i) / A(i, i);A(j, i:r) = A(j, i:r) - factor A(i, i:r);b(j) = b(j) - factor b(i);endend% 输出结果x = A \ b;disp('方程组的解为:');disp(x);```3. 运行程序,观察输出结果,验证方程组的解是否正确。
计算方法-解线性方程组的直接法实验报告
![计算方法-解线性方程组的直接法实验报告](https://img.taocdn.com/s3/m/2810bdbffad6195f302ba68f.png)
cout<<endl;
for(k=i+1;k<m;k++)
{
l[k][i]=a[k][i]/a[i][i];
for(r=i;r<m+1;r++) /*化成三角阵*/
a[k][r]=a[k][r]-l[k][i]*a[i][r];
}
}
x[m-1]=a[m-1][m]/a[m-1][m-1];
{
int i,j;
float t,s1,s2;
float y[100];
for(i=1;i<=n;i++) /*第一次回代过程开始*/
{
s1=0;
for(j=1;j<i;j++)
{
t=-l[i][j];
s1=s1+t*y[j];
}
y[i]=(b[i]+s1)/l[i][i];
}
for(i=n;i>=1;i--) /*第二次回代过程开始*/
s2=s2+l[i][k]*u[k][r];
l[i][r]=(a[i][r]-s2)/u[r][r];
}
}
printf("array L:\n");/*输出矩阵L*/ for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%7.3f ",l[i][j]);
printf("\n");
{
s2=0;
for(j=n;j>i;j--)
求解线性方程组的直接方法算法实验报告
![求解线性方程组的直接方法算法实验报告](https://img.taocdn.com/s3/m/5cc41a49e45c3b3567ec8baa.png)
求解线性方程组的直接方法(2学时)一 实验目的1.掌握求解线性方程组的高斯消元法及列主元素法;2. 掌握求解线性方程组的克劳特法;3. 掌握求解线性方程组的平方根法。
二 实验内容1.用高斯消元法求解方程组(精度要求为610-=ε):1231231233272212240x x x x x x x x x -+=⎧⎪-+-=-⎨⎪-+=⎩2.用克劳特法求解上述方程组(精度要求为610-=ε)。
3. 用平方根法求解上述方程组(精度要求为610-=ε)。
4. 用列主元素法求解方程组(精度要求为610-=ε):1231231233432222325x x x x x x x x x -+=⎧⎪-+-=⎨⎪--=-⎩三 实验步骤(算法)与结果1. #include<stdio.h>main(){ float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,l21,l31,l32,u11,u12,u13,u22,u23,u33,z1,z2,z3,x1,x2,x3;printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );l21=a12/a11;l31=a31/a11;u22=a22-l21*a12;l32=(a32-l31*a12)/u22;u23=a23-l21*a13;u33=a33-l31*a13-l32*u23;z2=b2-l21*b1;z3=b3-l31*b1-l32*z2;printf("u22=%fu23=%fz2=%fu33=%fz3=%f`````",u22,u23,z2,u33,z3); x3=z3/u33;x2=(z2-u23*x3)/u22;x1=(b1-a13*x3-a12*x2)/a11;printf("x1=%f x2=%f x3=%f ",x1,x2,x3);return 0;}2.#include<stdio.h>main(){float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,l22,l32,l33,u11,u12,u13,u22,u23,u33,z1,z2,z3,x1,x2,x3;printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :");scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22,&a23,&b2,&a31,&a32,&a33,&b3 );u11=1;u22=1; u33=1;u12=a12/a11;u13=a13/a11;z1=b1/a11;l22=a22-a21*u12;u23=(a23-a21*u13)/l22;z2=(b2-a21*z1)/l22;l32=a32-a31*u12;l33=a33-a31*u13-l32*u23;z3=(b3-a31*z1-l32*z2)/l33;printf("u11=%f u12=%f u13=%f z1=%f u22=%f u23=%f z2=%f u33=%f z3=%f------",u11,u12,u13,z1,u22,u23,z2,u33,z3);x3=z3;x2=z2-u23*x3;x1=z1-u13*x3-u12*x2;printf("x1=%f x2=%f x3=%f ",x1,x2,x3);getch();return 0;}3. #include<stdio.h>#include<math.h>{float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,l11,l12,l13,l23,l21,l22,l31,l32,l33,z1,z2,z3,x1,x2,x3;printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3 :");scanf("%f%f%f%f%f%f%f%f%f%f%f%f/n",&a11,&a12,&a13,&b1,&a21,&a22, &a23,&b2,&a31,&a32,&a33,&b3 );l11=sqrt(a11);l21=a21/l11; l31=a31/l11;l22=sqrt(a22-l21*l21);l32=(a32-l21*l31)/l22;l33=sqrt(a33-l31*l31-l32*l32);z1=b1/l11;z2=(b2-l21*z1)/l22;z3=(b3-l31*z1-l32*z2)/l33;printf("l11=%f z1=%f l22=%f z2=%f l33=%fz3=%f---",l11,z1,l22,z2,l33,z3);x3=z3/l33;x2=(z2-l32*x3)/l22;x1=(z1-l31*x3-l21*x2)/l11;printf("x1=%f x2=%f x3=%f ",x1,x2,x3);getch();return 0;}4. #include "stdio.h"#include "math.h"main(){ float a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3,l21,l31,A22,A23,d1,A32,A33,d2,l32,a,d3,x1,x2,x3,A,B,C,D;printf("enter a11,a12,a13,b1,a21,a22,a23,b2,a31,a32,a33,b3:"); scanf("%f%f%f%f%f%f%f%f%f%f%f%f", &a11,&a12,&a13,&b1,&a21,&a22,&a23,&b2,&a31,&a32,&a33,&b3);if(fabs(a11)<fabs(a21)){ if(fabs(a11)>fabs(a31))A=a11;a11=a31;a31=A;B=a12;a12=a32;a32=B;C=a13;a13=a33;a33=C;D=b1;b1=b3;b3=D ;}if (fabs(a11)<fabs(a21)){if(fabs(a21)>fabs(a31)){A=a11;a11=a21;a21=A;B=a12;a12=a22;a22=B;C=a13;a13=a23;a23=C;D=b1;b1=b2;b2=D ;}elseA=a11;a11=a31;a31=A;B=a12;a12=a32;a32=B;C=a13;a13=a33;a33=C;D=b1;b1=b3;b1=D ;}printf("now a11=%f a12=%f a13=%f b1=%f\n",a11,a12,a13,b1); printf("now a21=%f a22=%f a23=%f b2=%f\n",a21,a22,a23,b2); printf("now a31=%f a32=%f a33=%f b3=%f\n",a31,a32,a33,b3);l21=a21/a11; l31=a31/a11;A22=a22-l21*a12;A23=a23-l21*a13;d1=b2-l21*b1;A32=a32-l31*a12; A33=a33-l31*a13;d2=b3-l31*b1;if(fabs(A22)>fabs(A32)){ l32=A32/A22;a=A33-l32*A23;d3=d2-l32*d1;x3=d3/a;x2=(d1-A23*x3)/A22;x1=(b1-a13*x3-a12*x2)/a11;}else l32=A22/A32;a=A23-l32*A33;d3=d1-l32*d2;x3=d3/a;x2=(d2-A33*x3)/A32;x1=(b1-a13*x3-a12*x2)/a11;printf("x1=%f x2=%f x3=%f\n",x1,x2,x3);getch(); return 0; }。
数学实验报告南邮
![数学实验报告南邮](https://img.taocdn.com/s3/m/e24982f4d0f34693daef5ef7ba0d4a7303766c54.png)
实验名称:线性方程组的求解方法实验目的:1. 理解线性方程组的概念及其解法。
2. 掌握高斯消元法和克拉默法则求解线性方程组的方法。
3. 通过实验验证不同方法的计算效率和适用范围。
实验时间:2023年X月X日实验地点:南京邮电大学计算机实验室实验器材:1. 计算机2. 数学软件(如MATLAB、Mathematica等)3. 纸张和笔实验步骤:一、实验准备1. 确定实验所需线性方程组,例如:\[\begin{cases}2x + 3y - z = 4 \\-x + 2y + 3z = -1 \\3x - 2y + 4z = 5\end{cases}\]2. 熟悉高斯消元法和克拉默法则的原理。
二、实验实施1. 高斯消元法求解(1)将线性方程组转化为增广矩阵:\[\begin{bmatrix}2 &3 & -1 & | &4 \\-1 & 2 & 3 & | & -1 \\3 & -2 &4 & | & 5\end{bmatrix}\](2)进行行变换,将增广矩阵转化为行最简形式:\[\begin{bmatrix}1 & 0 & 0 & | & 1 \\0 & 1 & 0 & | & 1 \\0 & 0 & 1 & | & 1\end{bmatrix}\](3)根据行最简形式得到方程组的解:\(x = 1, y = 1, z = 1\)。
2. 克拉默法则求解(1)计算系数矩阵的行列式:\[D = \begin{vmatrix}2 &3 & -1 \\-1 & 2 & 3 \\3 & -2 & 4\end{vmatrix}\](2)计算增广矩阵的行列式:\[D_x = \begin{vmatrix}4 & 3 & -1 \\-1 & 2 & 3 \\5 & -2 & 4\end{vmatrix}\](3)计算\(D_y\)和\(D_z\),分别对应\(x\)、\(y\)、\(z\)的系数矩阵和增广矩阵的行列式。
计算方法实验报告-线性方程组的数值解法
![计算方法实验报告-线性方程组的数值解法](https://img.taocdn.com/s3/m/393e21dd84254b35eefd3439.png)
重庆大学学生实验报告实验课程名称计算方法开课实验室DS1421学院年级专业学生姓名学号开课时间至学年第学期1.实验目的(1)高斯列主元消去法求解线性方程组的过程(2)熟悉用迭代法求解线性方程组的过程(3)设计出相应的算法,编制相应的函数子程序2.实验内容分别用高斯列主元消去法 ,Jacobi 迭代法,Gauss--Saidel 迭代法,超松弛迭代法求解线性方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------725101391444321131243301024321x x x x 3.实验过程解:(1)高斯列主元消去法编制高斯列主元消去法的M 文件程序如下:%高斯列主元消元法求解线性方程组Ax=b%A 为输入矩阵系数,b 为方程组右端系数%方程组的解保存在x 变量中format long;%设置为长格式显示,显示15位小数A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]b=[10,5,-2,7]'[m,n]=size(A);%先检查系数正确性if m~=nerror('矩阵A 的行数和列数必须相同');return;endif m~=size(b)error('b 的大小必须和A 的行数或A 的列数相同');return;end%再检查方程是否存在唯一解if rank(A)~=rank([A,b])error('A 矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');return;endc=n+1;A(:,c)=b; %(增广)for k=1:n-1[r,m]=max(abs(A(k:n,k))); %选主元m=m+k-1; %修正操作行的值if(A(m,k)~=0)if(m~=k)A([k m],:)=A([m k],:); %换行endA(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去 endendx=zeros(length(b),1); %回代求解x(n)=A(n,c)/A(n,n);for k=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);enddisp('X=');disp(x);format short;%设置为默认格式显示,显示5位运行,结果如下所示:(2)Jacobi迭代法编制迭代计算的M文件程序如下:%Jacobi迭代法求解% A为方程组的增广矩阵clc;A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7] MAXTIME=50;%最多进行50次迭代eps=1e-5;%迭代误差[n,m]=size(A);x=zeros(n,1);%迭代初值y=zeros(n,1);k=0;%进入迭代计算disp('迭代过程X的值情况如下:')disp('X=');while 1disp(x');for i=1:1:ns=0.0;for j=1:1:nif j~=is=s+A(i,j)*x(j);endy(i)=(A(i,n+1)-s)/A(i,i);endendfor i=1:1:nmaxeps=max(0,abs(x(i)-y(i))); %检查是否满足迭代精度要求 endif maxeps<=eps%小于迭代精度退出迭代for i=1:1:nx(i)=y(i);%将结果赋给xendreturn;endfor i=1:1:n%若不满足迭代精度要求继续进行迭代x(i)=y(i);y(i)=0.0;endk=k+1;if k>MAXTIME%超过最大迭代次数退出error('超过最大迭代次数,退出');return;endend运行该程序结果如下:(3)Gauss--Saidel迭代法编制求解程序Gauss_Seidel.m如下:%Gauss_Seidel.m% A为方程组的增广矩阵clc;format long;A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7][n,m]=size(A);%最多进行50次迭代Maxtime=50;%控制误差Eps=10E-5;%初始迭代值x=zeros(1,n);disp('x=');%迭代次数小于最大迭代次数,进入迭代for k=1:Maxtimedisp(x);for i=1:ns=0.0;for j=1:nif i~=js=s+A(i,j)*x(j);%计算和endendx(i)=(A(i,n+1)-s)/A(i,i);%求出此时迭代的值end%因为方程的精确解为整数,所以这里将迭代结果向整数靠近的误差作为判断迭代是否停止的条件if sum((x-floor(x)).^2)<Epsbreak;end;end;X=x;disp('迭代结果:');Xformat short;运行结果如下所示:(4)超松弛迭代法编写函数M文件如下:%SOR法求解%w=1.45%方程组系数矩阵clc;A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]%方程组右端系数b=[10,5,-2,7]'w=1.45;%最大迭代次数Maxtime=100;%精度要求Eps=1E-5;%以15位小数显示format long;n=length(A);k=0;%初始迭代值x=ones(n,1);y=x;disp('迭代过程:');disp('x=');while 1y=x;disp(x');%计算过程for i=1:ns=b(i);for j=1:nif j~=is=s-A(i,j)*x(j);endendif abs(A(i,i))<1E-10 | k>=Maxtimeerror('已达最大迭代次数或矩阵系数近似为0,无法进行迭代'); return;ends=s/A(i,i);x(i)=(1-w)*x(i)+w*s;endif norm(y-x,inf)<Eps%达到精度要求退出计算break;endk=k+1;enddisp('最后迭代结果:');%最后的结果X=x'%设为默认显示格式format short; 结果如下:4.实验环境及实验文件存档名实验环境:Matlab7.0文件存档名:Gauss.m,Jacobi.m,Gauss_Seidel.m,SOR.m5.实验结果及分析=1.0000=2.0000=3.0000=4.0000经过验证,高斯列主元消结果正确。
数学实验报告样本
![数学实验报告样本](https://img.taocdn.com/s3/m/0c8d76ab9f3143323968011ca300a6c30d22f10b.png)
一、实验目的1. 掌握数学实验的基本方法与步骤。
2. 提高运用数学知识解决实际问题的能力。
3. 培养团队合作精神和严谨的科研态度。
二、实验原理本次实验主要研究线性方程组的求解方法。
线性方程组是数学中常见的一类问题,其求解方法有多种,如高斯消元法、矩阵法等。
本实验采用高斯消元法进行线性方程组的求解。
三、实验仪器与材料1. 计算机2. 线性方程组3. 高斯消元法求解程序四、实验步骤1. 收集实验数据:给出一个线性方程组,例如:2x + 3y = 84x - y = 12. 编写程序:使用计算机编写高斯消元法求解线性方程组的程序。
程序的主要步骤如下:(1)输入线性方程组的系数矩阵和常数项向量;(2)进行行初等变换,将系数矩阵化为行阶梯形矩阵;(3)进行行简化,将行阶梯形矩阵化为行最简形矩阵;(4)根据行最简形矩阵的秩,判断方程组是否有解,并求出解。
3. 运行程序:将实验数据输入程序,运行程序得到线性方程组的解。
4. 分析结果:对实验结果进行分析,验证解的正确性。
五、实验结果与分析1. 程序运行结果:系数矩阵:[2, 3; 4, -1]常数项向量:[8; 1]解:x = 3, y = 22. 结果分析:通过高斯消元法求解得到的线性方程组解为x = 3,y = 2。
将解代入原方程组,可以验证其正确性。
六、实验总结1. 通过本次实验,掌握了数学实验的基本方法与步骤,提高了运用数学知识解决实际问题的能力。
2. 实验过程中,学会了编写高斯消元法求解线性方程组的程序,加深了对线性方程组求解方法的理解。
3. 在实验过程中,培养了自己的团队合作精神和严谨的科研态度,为今后从事科研工作奠定了基础。
4. 针对实验过程中出现的问题,如程序编写错误、实验数据不准确等,通过查阅资料、与同学讨论等方式解决了问题,提高了自己的问题解决能力。
5. 本次实验还存在一定的不足,如实验数据较少、程序功能有限等。
在今后的实验中,将进一步完善实验内容和程序功能,提高实验质量。
《计算实习》课程设计报告----线性方程组的求解
![《计算实习》课程设计报告----线性方程组的求解](https://img.taocdn.com/s3/m/e6ecc372a98271fe900ef904.png)
《计算实习》课程设计报告课题名称:线性方程组的求解系(院):理学院专业:数学与应用数学班级:学生姓名:学号:指导教师:开课时间:2010-2011 学年一学期摘要本文主要考虑了一类系数矩阵为正定对称矩阵的线性方程组的求解问题,基于等价转换可将该问题的求解转化为一个二次函数极小值点的求解。
基于这种等价性,我们可以从构造二次函数的极小值点的算法入手,寻求解线性方程组的算法。
这里考虑了一种基于迭代思想构造的算法,对该算法的两个关键部分给出了证明和推导,并给出相应的MATLAB程序,从而解出线性方程组。
最后用两个实例验证了所给程序的正确性。
关键字:线性方程组 MATLAB程序一、问题重述:第一题是要证明线性方程组AX=b 的解x *等价于求解二次函数()x ϕ的极小值点,即*()min ()x Rx x ϕϕ∈=。
第二题是要给出最佳步长()()()()(,)(,)k k k k k r r Ar r λ=的推导过程。
第三题是要给出上述算法的MA TLAB 程序(写成函数的形式)。
第四题是:设方程组为12630321x x ⎛⎫⎛⎫⎛⎫= ⎪ ⎪ ⎪-⎝⎭⎝⎭⎝⎭ 试用第三题给出的程序进行求解,取()000x ⎛⎫= ⎪⎝⎭,-4=10ε,并作图表示迭代结果。
第五题是要借助第三题的程序计算()()2221234+21x x x x ϕ=+-的极小值,取()0110x ⎛⎫⎪= ⎪ ⎪⎝⎭,-2=10ε。
二、问题分析:第一题:将()(,)(,)ϕ12X AX X b X =-展开得到一个n 元函数,对它求一阶导即可得到AX =b ,再求二阶导即可证明()(,)(,)ϕ12X AX X b X =-取极小值;第二题:运用第一题的结论很容易得到第二题的答案,此为证法一; 也可以将)(k λϕ视为关于k λ的一元函数,对k λ求一阶导也能得到所需的结果,再求二阶导大于零即可,此为证法二;第三题要求给出文中所给迭代算法的程序,该算法满足一定条件就结束迭代,可用while 循环结构表示,将迭代结果保存在一个矩阵y 中,y 的第k 列表示第k 次迭代结果;第四题 直接调用第三题的程序,把相应的数据输进去就可以得到所需的答案了,再通过作图命令即可得到所需的图像了; 第五题由于将()()2221234+21x x x x ϕ=+-展开有常数项,与上述()(,)(,)ϕ12X A X X b X =-的展开式形式不一样;故我们可先作变量代换x3=x3-1;这样)(x ϕ形式上就与)(X ϕ一样了;再由23222124)(x x x x ++=ϕ可得AX=b 的矩阵形式:⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛000400020008321x x x 再调用第三题给出的程序进行求解,最后将结果回代。
解线性方程组实验
![解线性方程组实验](https://img.taocdn.com/s3/m/5a51ba3acbaedd3383c4bb4cf7ec4afe05a1b161.png)
实验报告专用纸实验项目名称解线性方程组的直接法课程名称数值方法教师评语及成绩:实验成绩:教师签字:(请按照实验报告的有关要求书写。
一般必须包括:1、实验目的;2、实验内容;3、实验步骤与方法;4、实验数据与程序清单;5、出现的问题与解决方法;6、实验结果、结果分析与体会等内容)1、实验目的(1)掌握Gauss消元法及Gauss列主元消去法,能用这两种方法求解线性方程组;(2)掌握平方根法与追赶法;(3)掌握相应数值算法的程序编写;(4)理解方程组的性态、条件数及误差分析。
2、实验内容1.应用高斯消元法和高斯列主元素法解线性方程组Ax=b。
2.解线性方程组Ax=b的LU分解法。
用熟悉的算法语言编写程序,用高斯消去法和高斯列主元消去法求解方程组,输出Ax=b 中矩阵A、b、解向量x及detA。
3、实验步骤和方法(1)要求上机实验前先编写出程序代码;(2)编辑录入程序;(3)调试程序并记录调试过程中出现的问题及修改程序的过程;(4)经反复调试后,运行程序并验证程序运行是否正确;(5)记录运行时的输入和输出;(6)对程序的运行结果进行分析;(7)根据实验情况和结果撰写并提交实验报告。
4、实验原理(1)实验结果图1Gauss消元法图2Gauss消元法近似为0(2)结果分析在Gauss消元法中,可以看到3的值是一个非常接近于0的数,如果将消元后的系数矩阵打印出来,可以看到消元后的系数矩阵并不是一个真正的上三角矩阵,下三角部分有几处是绝对值极小的值,这是由于计算机的浮点计算造成的,浮点在计算机中本身就不是一个精确的数,在消元的过程中,一些浮点运算有误差,最后得到的是近似值而不是0。
《数学实验》实验报告——解线性方程组
![《数学实验》实验报告——解线性方程组](https://img.taocdn.com/s3/m/302fb30a52d380eb62946d5b.png)
班级
****
学号
****
姓名
****
成绩
试验内容
解线性方程组
试验
类别
自选试验
试验
时间
试验问题:
1.比较用逆矩阵法、除法、克拉默法则解方程Ax=b的用时和误差
2.求解方程组最多零解
试验目的:
1.了解MATLAB在实际问题中的应用
2.学会利用MATLAB做图并求解实际问题
问题分析(可含问题的背景、相关知识、数学建模与求解的方法等):
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)];
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
结果分析:
小学数学实践认识线性方程组与解法
![小学数学实践认识线性方程组与解法](https://img.taocdn.com/s3/m/fdd992660622192e453610661ed9ad51f11d545e.png)
小学数学实践认识线性方程组与解法数学是一门重要的学科,它在小学阶段就开始培养学生的逻辑思维和问题解决能力。
其中一个重要的内容就是线性方程组的认识与解法。
通过实践探索,学生可以深刻理解线性方程组的概念,掌握解题方法,提高数学解决问题的能力。
一、认识线性方程组线性方程组是由若干个线性方程组成的方程组,其中每个方程都是一次方程。
具体而言,一般形式为:a1x + b1y + c1 = 0a2x + b2y + c2 = 0其中,x和y是未知数,a1、a2、b1、b2、c1、c2为已知数。
线性方程组的解即是满足所有方程的x和y的值。
二、解线性方程组的方法1. 图解法图解法是通过作图的方式来解决线性方程组问题。
例如,对于一个方程组:2x + 3y = 94x - y = 8可以将两个方程转化为直线的形式,然后在坐标系中绘制出这两条直线。
直线的交点即为方程组的解。
2. 代入法代入法是将一个方程的解代入到另一个方程中,从而简化问题。
例如,对于一个方程组:3x - 2y = 7-5x + 4y = -10可以先解得第一个方程中的x为3,然后将x=3代入到第二个方程中,得到-5*3+4y=-10,进一步解得y=2。
这样便求得了方程组的解。
3. 消元法消元法是通过变换方程组中的方程,使得某个未知数的系数为1,从而简化计算。
例如,对于一个方程组:2x - 3y = 64x + y = 5可以通过将第二个方程乘以2,消去x的系数,得到:2x - 3y = 68x + 2y = 10然后将两个方程相加,消去x的项,得到:-5y = -4解得y=4/5,再将y的值代入任意一个方程中,得到x的值。
三、小学数学实践小学生的数学学习注重于实践操作,通过具体的例子和问题来引导学生理解和掌握知识。
在让学生认识线性方程组与解法时,可以设计一些实际生活中的问题:例题一:小明和小亮的年龄之和是24岁,小明比小亮大3岁。
请问他们两个人分别几岁?解:设小亮的年龄为x岁,则小明的年龄为x+3岁。
解线性方程组实验
![解线性方程组实验](https://img.taocdn.com/s3/m/07f4cec7bb4cf7ec4afed0ce.png)
实验2 解线性方程组实验实验类型:●验证性实验 ○综合性实验 ○设计性实验实验目的:进一步熟练掌握高斯消去法解线性方程组的算法并编写程序,提高编程能力和解算非线性方程问题的实践技能。
实验内容:用高斯消去法解线性方程组:123412341234123412141320432842212031326x x x x x x x x x x x x x x x x +++=⎧⎪+++=⎪⎨+++=⎪⎪-+++=⎩ 实验原理 高斯消去法上三角线性方程组的回代解法实验步骤1 要求上机实验前先编写出程序代码2 编辑录入程序3 调试程序并记录调试过程中出现的问题及修改程序的过程4 经反复调试后,运行程序并验证程序运行是否正确。
5 记录运行时的输入和输出。
实验总结实验报告:根据实验情况和结果撰写并递交实验报告。
参考程序(1) 高斯消元法 a) 运行结果b )function X=uptrbk(A,B) [N N]=size(A); X=zeros(N,1); C=zeros(1,N+1); Aug=[A B];for p=1:N-1[Y,j]=max(abs(Aug(p:N,p)));C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1.:)=C;if Aug(p,p)==0'A was singular.No unique solution'breakendfor k=p+1:Nm=Aug(k,p)/Aug(p,p);Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1); endendX=backsub(Aug(1:N,1:N),Aug(1:N,N+1));function X=backsub(A,B)n=length(B)X=zeros(n,1);X(n)=B(n)/A(n,n);for k=n-1:-1:1X(k)=(B(k)-A(k,k+1:n)*X(k+1:n))/A(k,k);end(2)上三角线性方程组的回代解法a)运行结果)b)程序代码function X=uptrbk(A,B)[N,N]=size(A);X=zeros(N,1);C=zeros(1,N+1);Aug=[A B];for p=1:N-1[Y,j]=max(abs(Aug(p:N,p)));C=Aug(p,:);Aug(p,:)=Aug(j+p-1,:);Aug(j+p-1,:)=C;if Aug(p,p)==0'A was singular. No unique solution'breakendfor k=p+1:Nm=Aug(k,p)/Aug(p,p);Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1); endendX=backsub(Aug(1:N,1:N),Aug(1:N,N+1));function X=backsub(A,B)n=length(B);X=zeros(n,1);X(n)=B(n)/A(n,n);for k=n-1:-1:1X(k)=(B(k)-A(k,k+1:n)*X(k+1:n))/A(k,k);end。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)];