数值分析列主元高斯消去法
数值分析计算方法实验报告
end;
end;
X=x;
disp('迭代结果:');
X
format short;
输出结果:
因为不收敛,故出现上述情况。
4.超松弛迭代法:
%SOR法求解实验1
%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]'
b=[10,5,-2,7]'
[m,n]=size(A);
if m~=n
error('矩阵A的行数和列数必须相同');
return;
end
if m~=size(b)
error('b的大小必须和A的行数或A的列数相同');
return;
end
if rank(A)~=rank([A,b])
error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');
3.实验环境及实验文件存档名
写出实验环境及实验文件存档名
4.实验结果及分析
输出计算结果,结果分析和小结等。
解:1.高斯列主元消去法:
%用高斯列主元消去法解实验1
%高斯列主元消元法求解线性方程组Ax=b
%A为输入矩阵系数,b为方程组右端系数
%方程组的解保存在x变量中
format long;
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]
return;
end
c=n+1;
A(:,c)=b;
for k=1:n-1
数值分析列主元高斯消去法
实验四:列组元消去法一、目的1)熟悉列主元高斯消元法解线性方程组的算法2)掌握列主元高斯消去法的编程二、实验原理列主元素消去法是为控制舍入误差而提出来的一种算法,在Gauss消去法的消元过程中,若出现a=0,则消元无法进行,即使其不为0,但很小,把它作为除数,就会导致其他元素量级的巨大增长和舍入误差的扩散,最后使计算结果不可靠.使用列主元素消去法计算,基本上能控制舍入误差的影响,并且选主元素比较方便.三、运行结果四、代码using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace高斯{class Program{static double[] Gause(double[,] a, int n){int i, j, k;int rank, columm;double temp, l, s, mx;double[] x = new double[n];for (i = 0; i <= n - 2; i++){mx = Math.Abs(a[i, i]);rank = i;columm = i;for (j = i + 1; j <= n - 1; j++) //选主元if (Math.Abs(a[j, i]) > mx){mx = Math.Abs(a[j, i]);rank = j;columm = i;}for (k = 0; k <= n; k++) //主元行变换{temp = a[i, k];a[i, k] = a[rank, k];a[rank, k] = temp;} //消元for (j = i + 1; j <= n - 1; j++){l = a[j, i] / a[i, i];for (k = i; k <= n; k++)a[j, k] = a[j, k] - l * a[i, k];}}x[n - 1] = a[n - 1, n] / a[n - 1, n - 1]; //回代方程求解x for (i = n - 2; i >= 0; i--){s = 0;for (j = i + 1; j <= n - 1; j++)s = s + a[i, j] * x[j];x[i] = (a[i, n] - s) / a[i, i];}return x;}static void Main(string[] args){double[,] a = new double[4, 5] { { 10, -7, 0, 1, 8 }, { -3, 2.099999, 6, 2, 5.900001 }, { 5, -1, 5, -1, 5 }, { 2, 1, 0, 2, 1 } };int n = 4;double[] x = new double[n];x = Gause(a, n);Console.WriteLine("高斯消去法方程:");for (int i = 0; i < n; i++){for (int j = 0; j < n; j++)Console.Write(a[i, j].ToString() + " ");Console.WriteLine();}Console.WriteLine("线性方程组的解:");for (int i = 0; i <= n - 1; i++)Console.Write("x" + (i + 1).ToString() + "=" +x[i].ToString() + " ");Console.WriteLine();Console.ReadLine();}}}四、分析通过本次实验的学习,学会根据算法编写基本的相关程序,虽然此次程序模板由老师给予,但认真阅读理解程序有助于今后的学习,再利用计算机中的C语言对高斯列主元消去法可以快速得到线性方程组的解,由简单的线性方程组可以推广到一般n阶线性方程组,这对如何利用高斯列主元消去法解决实际问题有了一定的经验。
数值分析高斯顺序消去法、列主元消去法LU分解法
数值分析实验报告(1)学院:信息学院班级:计算机0903班姓名:***学号:********课题一A.问题提出给定下列几个不同类型的线性方程组,请用适当的方法求解线性方程组1、设线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------------------1368243810041202913726422123417911101610352431205362177586832337616244911315120130123122400105635680000121324⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125 x *= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T2、设对称正定阵系数阵线方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----------------------19243360021411035204111443343104221812334161206538114140231212200420424⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡87654321x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---4515229232060 x * = ( 1, -1, 0, 2, 1, -1, 0, 2 )T3、三对角形线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------4100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----5541412621357 x *= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )TB.(1)对上述三个方程组分别用Gauss 顺序消去法与Gauss 列主元消去法;平方根 与改进平方根法;追赶法求解(选择其一) (2)编写算法通用程序(3)在应用Gauss 消去时,尽可能利用相应程序输出系数矩阵的三角分解式C.(1)通过该课题的程序编制,掌握模块化结构程序设计方法 (2)掌握求解各类线性方程组的直接方法,了解各种方法的特点 (3)体会高斯消去法选主元的必要性 实验步骤:(高斯消去法,列主元,LU )1顺序高斯消去法2.LU 分解法3.列主元高斯消去法(如下图)(1)高斯消去法运行结果如下(2)对方程的系数矩阵进行LU分解并求出方程组的解(3)列主元高斯消去法实验体会总结:利用gauss消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。
数值分析讲义
第1章数值分析中的误差一、重点内容误差设精确值x* 的近似值x,差e=x-x* 称为近似值x 的误差(绝对误差)。
误差限近似值x 的误差限 是误差e 的一个上界,即|e|=|x-x*|≤ε。
相对误差e r是误差e 与精确值x* 的比值,。
常用计算。
相对误差限是相对误差的最大限度,,常用计算相对误差限。
绝对误差的运算:ε(x1±x2)=ε(x1)+ε(x2)ε(x1x2)≈|x1|ε(x2)+|x2|ε(x1)有效数字如果近似值x 的误差限ε 是它某一个数位的半个单位,我们就说x 准确到该位。
从这一位起到前面第一个非0 数字为止的所有数字称为x 的有效数字。
关于有效数字:(1) 设精确值x* 的近似值x,x=±0.a1a2…a n×10ma1,a2,…,a n是0~9 之中的自然数,且a1≠0,|x-x*|≤ε=0.5×10m-l,1≤l≤n则x 有l位有效数字.(2) 设近似值x=±0.a1a2…a n×10m有n 位有效数字,则其相对误差限(3) 设近似值x=±0.a1a2…a n×10m的相对误差限不大于则它至少有n 位有效数字。
(4) 要求精确到10-3,取该数的近似值应保留4 位小数。
一个近似值的相对误差是与准确数字有关系的,准确数字是从一个数的第一位有效数字一直数到它的绝对误差的第一位有效数字的前一位,例如具有绝对误差e=0.0926 的数x=20.7426 只有三位准确数字2,0,7。
一般粗略地说,具有一位准确数字,相对于其相对误差为10% 的量级;有二位准确数字,相对于其相对误差为1% 的量级;有三位准确数字,相对于其相对误差为0.1% 的量级。
二、实例例1 设x*= =3.1415926…近似值x=3.14=0.314×101,即m=1,它的误差是0.001526…,有|x-x*|=0.001526…≤0.5×101-3即l=3,故x=3.14 有 3 位有效数字。
数值分析-高斯消元法
数值分析-牛顿迭代法实验报告一、实验内容和要求用列主元高斯消去法解线性方程组Ax=b方程1:=;方程2:=;二、算法说明设Ax=b。
本算法用A的具有行交换的列祖元素消去法,校园结果冲掉A,乘数冲掉,计算解x冲掉常数项b,行列式存放在det中。
1.det←12.对于k=1,2,…,n-1(1)按列选主元=,(2)如果,=0,则计算停止(det(A)=0)(3)如果,=k,则转(4)(j=k,k+1,……,n)换行:,←-det(4)消元计算对于i=k+1,……,ni.←/ii.对于i=k+1,……,n←*iii.←-(5)det←*det3.如果,则计算停止(det(A)=0)4.回带求解(1)/(2)对于i=n-1,…,2,1←()/5.det←*det三、源程序#include <stdio.h>#include<conio.h>#include <math.h>#define max_dimension 20 //定义最大阶数为20 int n;static float a[max_dimension][max_dimension]; static float b[max_dimension];static float x[max_dimension];void main() {int I,j,d,row;float temp;float known_items;float l[max_dimension][max_dimension];printf("请输入方程的阶数:"); //输入矩阵阶数scanf("%d",&n);printf("\n");for (i=0; i<n; i++){printf("请输入第%d 的系数:",i+1); //矩阵输入for (j=0; j<n; j++){scanf("%f",&a[i][j]);}printf("\n");}printf("请输入常数项: "); //常数输入for (i=0; i<n; i++)scanf("%f",&b[i]);for (i=0; i<n; i++) //计算增广矩阵{for (j=0; j<n; j++);} for (d=0; d<n-1; d++){ row=d;for (i=d+1; i<n; i++) //查找最大元素所在行{if (fabs(a[i][d])>fabs(a[row][d]))row=i;}if (row!=d){for (j=d; j<n; j++){temp=a[row][j];a[row][j]=a[d][j];a[d][j]=temp;}temp=b[row];b[row]=b[d];b[d]=temp;}for (i=d+1; i<n; i++){l[i][d]=-a[i][d]/a[d][d];for (j=d; j<n; j++){a[i][j]=a[i][j]+a[d][j]*l[i][d];}b[i]=b[i]+b[d]*l[i][d];}}for (i=0; i<n; i++) //计算上三角矩阵{for (j=0; j<n; j++);}printf("\n");for (i=n-1; i>-1; i--){known_items=0;for (j=1; j<n-i; j++){known_items=known_items+a[i][i+j]*x[i+j]; }x[i]=(b[i]-known_items)/a[i][i];} printf("X的值分别为:\n");for (i=0; i<n; i++)printf("%.5f ",x[i]);//输出x的值printf("\n");getch();}四、实验结果方程1:=1592.22119=-631.76123=-493.50037方程2:=119.52600=-47.14207=-36.83984五、说明与分析在高斯消去法运算的过程中,如果出现(A(i,i))的绝对值等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以需先对矩阵进行变换在计算。
数值分析-线性方程组的直接解法
算法 Gauss(A,a,b,n,x)
1. 消元 For k=1,2, … , n-1 1.1 if akk=0 , stop; 1.2 For i=k+1,k+2, …, n 1.2.1 l ik=aik /akk => aik 1.2.2 For j=k+1,k+2, … ,n ai j -aik ak j =>aij 1.2.3 bi -aik bk=> bi 2. 回代 2.1 bn / an=>xn; 2.2 For i=n-1,n-2, …, 2,1 2.2.1 bk => S 2.2.2 For j=k+1,k+2, … ,n S –akj xj =>S 2.2.3 S/ akk => xk a1 1 a1 2 a13 a2 1 a2 2 a23
线性方程组的直接解法
刘 斌
线性方程组的直接解法
§1 Gauss消去法 1.1 顺序Gauss消去法
1.2
§2 2.1 2.2 2.3
列主元Gauss消去法
Gauss消去法的矩阵运算 Doolittle分解法 平方根法
直接三角分解方法
2.4
追赶法
引入
在科学计算中,经常需要求解含有n个未知量 的n个方程构成的线性方程组 a11 x1 a12 x2 a1n xn b1 a21 x1 a22 x2 a2 n xn b2 (1) an1 x1 an 2 x2 ann xn bn
(1) a12 ( 2) a22 0
(1) (1) a13 a1 n ( 2) ( 2) a23 a2 n ( 3) ( 3) a33 a3 n
0
数值分析列主元高斯消去顺序高斯平方根法追赶法
课题名称:课题一解线性方程组的直接方法解决的问题:给定三个不同类型的线性方程组,用适当的直接法求解。
采用的数值方法:对第一个普通的线性方程组,采用了高斯顺序消去法和高斯列主元消去法。
对第二个正定线性方程组,采用了平方根法。
对第三个三对角线性方程组,采用了追赶法。
算法程序:(1)普通的线性方程组①顺序消去法#include<stdio.h>#include<math.h>int main(void){float A[10][10]= {{4,2,-3,-1,2,1,0,0,0,0},{8,6,-5,-3,6,5,0,1,0,0},{4,2,-2,-1,3,2,-1,0,3,1},{0,-2,1,5,-1,3,-1,1,9,4},{-4,2,6,-1,6,7,-3,3,2,3},{8,6,-8,5,7,17,2,6,-3,5},{0,2,-1,3,-4,2,5,3,0,1},{16,10,-11,-9,17,34,2,-1,2,2},{4,6,2,-7,13,9,2,0,12,4},{0,0,-1,8,-3,-24,-8,6,3,-1}};float b[10]= {5,12,3,2,3,46,13,38,19,-21}; float x[10]= {0};float Aik,S,temp;int i,j,k;int size=10;for(k=0; k<size-1; k++){if(!A[k][k])return -1;for(i=k+1; i<size; i++){Aik=A[i][k]/A[k][k];for(j=k; j<size; j++){A[i][j]=A[i][j]-Aik*A[k][j]; }b[i]=b[i]-Aik*b[k];}}printf("A[]\n");for(i=0; i<size; i++){for(j=0; j<size; j++)printf("%f ",A[i][j]);printf("\n");}printf("b[]\n");for(i=0; i<size; i++)printf("%f ",b[i]);printf("\n\n");x[size-1]=b[size-1]/A[size-1][size-1]; for(k=size-2; k>=0; k--){S=b[k];for(j=k+1; j<size; j++){S=S-A[k][j]*x[j];}x[k]=S/A[k][k];}printf("x[]=\n");for(i=0; i<size; i++)printf("%f ",x[i]);return 0;}②列主元消去法#include<stdio.h>#include<math.h>int main(void){float A[10][10]= {{4,2,-3,-1,2,1,0,0,0,0}, {8,6,-5,-3,6,5,0,1,0,0},{4,2,-2,-1,3,2,-1,0,3,1},{0,-2,1,5,-1,3,-1,1,9,4},{-4,2,6,-1,6,7,-3,3,2,3},{8,6,-8,5,7,17,2,6,-3,5},{0,2,-1,3,-4,2,5,3,0,1},{16,10,-11,-9,17,34,2,-1,2,2},{4,6,2,-7,13,9,2,0,12,4},{0,0,-1,8,-3,-24,-8,6,3,-1}};float b[10]= {5,12,3,2,3,46,13,38,19,-21}; float x[10]= {0};float Aik,S,temp;int i,j,k;float max;int col;int size=10;for(k=0; k<size-1; k++){max=fabs(A[k][k]);col=k;for(i=k; i<size; i++){if(max<fabs(A[i][k])) {max=fabs(A[i][k]); col=i;}}for(j=k; j<size; j++){temp=A[col][j];A[col][j]=A[k][j];A[k][j]=temp;}temp=b[col];b[col]=b[k];b[k]=temp;if(!A[k][k])return -1;for(i=k+1; i<size; i++){Aik=A[i][k]/A[k][k]; for(j=k; j<size; j++){A[i][j]=A[i][j]-Aik*A[k][j]; }b[i]=b[i]-Aik*b[k];}}printf("A[]\n");for(i=0; i<size; i++){for(j=0; j<size; j++)printf("%f ",A[i][j]);printf("\n");}printf("b[]\n");for(i=0; i<size; i++)printf("%f ",b[i]);printf("\n\n");x[size-1]=b[size-1]/A[size-1][size-1]; for(k=size-2; k>=0; k--){S=b[k];for(j=k+1; j<size; j++){S=S-A[k][j]*x[j]; }x[k]=S/A[k][k];}printf("x[]=\n");for(i=0; i<size; i++)printf("%f ",x[i]);return 0;}(2)对称正定线性方程组平方根法:#include <stdio.h>#include <math.h>#define n 8int main(void){float A[8][8]={{4,2,-4,0,2,4,0,0},{2,2,-1,-2,1,3,2,0},{-4,-1,14,1,-8,-3,5,6},{0,-2,1,6,-1,-4,-3,3},{2,1,-8,-1,22,4,-10,-3},{4,3,-3,-4,4,11,1,-4},{0,2,5,-3,-10,1,14,2},{0,0,6,3,-3,-4,2,19}};float g[8][8]= {0};float b[8]= {0,-6,6,23,11,-22,-15,45}; float x[8]= {0};float y[8]= {0};int k,m,i,sq;for(k=0; k<n; k++){float p=0,q=0,s=0;for(m=0; m<=k-1; m++){p=p+A[k][m]*A[k][m];}g[k][k]=sqrt(A[k][k]-p);A[k][k]=g[k][k];for(i=k+1; i<n; i++){q=0;for(m=0; m<=k-1; m++){q=q+A[i][m]*A[k][m];}g[i][k]=(A[i][k]-q)/A[k][k]; A[i][k]=g[i][k];}s=0;for(m=0; m<=k-1; m++){s=s+A[k][m]*y[m];}y[k]=(b[k]-s)/A[k][k];}x[n-1]=y[n-1]/A[n-1][n-1];for(k=n-2; k>=0; k--){float sum=0;for(m=k+1; m<n; m++){sum=sum+A[m][k]*x[m];}x[k]=(y[k]-sum)/A[k][k];}for(sq=0; sq<n; sq++){printf("%f ",x[sq]);}return 0;}(3)三对角线性方程组追赶法#include <stdio.h>#include <math.h>#define n 10int main(void){float a[10]={4,4,4,4,4,4,4,4,4,4};float c[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};float d[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1}; float b[10]={7,5,-13,2,6,-12,14,-4,5,-5}; float x[10]={0};float y[10]={0};float arf[10]={0};float bt[9]={0};arf[0]=a[0];int i;for(i=0;i<n-1;i++){bt[i]=c[i]/arf[i];arf[i+1]=a[i+1]-d[i+1]*bt[i];//printf("%f %f \n",bt[i],arf[i+1]); }y[0]=b[0]/arf[0];//printf("%f\n",y[0]);for(i=1;i<n;i++){y[i]=(b[i]-d[i]*y[i-1])/arf[i];}//printf("%f\n",y[1]);x[n-1]=y[n-1];for(i=n-2;i>=0;i--){x[i]=y[i]-bt[i]*x[i+1]; }for(i=0;i<n;i++)printf("%lf ",x[i]);return 0;}数值结果:(1) 普通的线性方程组①顺序消去法②列主元消去法(2) 对称正定线性方程组平方根法:(3)三对角线性方程组追赶法:对实验计算结果的讨论和分析:(1) 普通的线性方程组①顺序消去法x1~x10的绝对误差:0.000001,-0.000001,0.000001,0,0.000001,0,0.000002,0,0,0x1~x10的相对误差:0.000001,0.000001,-1,0,0.0000005,0,0.00000067,0,0,0误差很小,基本可以忽略。
清华大学数值分析实验报告
数值分析实验报告一、 实验3。
1 题目:考虑线性方程组b Ax =,n n R A ⨯∈,n R b ∈,编制一个能自动选取主元,又能手动选取主元的求解线性代数方程组的Gauss 消去过程。
(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=6816816816 A ,⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157 b ,则方程有解()T x 1,,1,1*⋯=。
取10=n 计算矩阵的条件数。
分别用顺序Gauss 消元、列主元Gauss 消元和完全选主元Gauss 消元方法求解,结果如何?(2)现选择程序中手动选取主元的功能,每步消去过程都选取模最小或按模尽可能小的元素作为主元进行消元,观察并记录计算结果,若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用.(4)选取其他你感兴趣的问题或者随机生成的矩阵,计算其条件数,重复上述实验,观察记录并分析实验的结果。
1. 算法介绍首先,分析各种算法消去过程的计算公式, 顺序高斯消去法:第k 步消去中,设增广矩阵B 中的元素()0k kk a ≠(若等于零则可以判定系数矩阵为奇异矩阵,停止计算),则对k 行以下各行计算()(),1,2,,k ikik k kka l i k k n a ==++,分别用ik l -乘以增广矩阵B 的第k 行并加到第1,2,,k k n ++行,则可将增广矩阵B 中第k 列中()k kka 以下的元素消为零;重复此方法,从第1步进行到第n-1步,则可以得到最终的增广矩阵,即()()(),n n n B Ab ⎡⎤=⎣⎦; 列主元高斯消去法:第k 步消去中,在增广矩阵B 中的子方阵()()()()k kkkknk k nknn a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦中,选取()k k i k a 使得()(k)max k k i k ik k i na a ≤≤=,当k i k ≠时,对B 中第k 行与第k i 行交换,然后按照和顺序消去法相同的步骤进行。
数值分析线性方程组的直接解法
数值分析课程实验报告实验名称线性方程组的直接解法_____________________实验目的①掌握高斯消去法的基本思路和迭代步骤;②了解高斯消去法可能遇到的困难。
用文字或图表记录实验过程和结果列主元高斯消去法算法描述将方程组用增广矩阵B=[A:b]=(a j \心申)表示。
步骤1:消兀过程,对k=12|j|, n—1(1)选主元,找i k亡{k,k+1,川,n}使得k卜maxi a ikai k,(2)如果a i k,k = 0 ,则矩阵A奇异,程序结束;否则执行(3)。
(3)如果ik^k,则交换第k行与第i k行对应兀素位置,aq㈠a i k j,j=k,IH, n + 1。
(4)消兀,对i = k +1」H,n,计算m k=a k / a kk,对j = k +1,川,n +1,计算a j = a ij — m ik a^.步骤2:回代过程:(1)右a nn -0,则矩阵奇异,程序结束;否则执行(2)。
厲(2)nX n =a ng/a nn;对i = n—1川,2,1,计算X j = a,n 出一》a j X j /a H< j4 丿三、练习与思考题分析解答1、解方程组0.10伙2.304X2 3.555X3 =1.183-1.347为3.712X2 4.623X3 = 2.137-2.835X, 1.072X25.643X^3.035(1)编程用顺序高斯消去法求解上述方程组,记下解向量,验证所得到的解向量是否是原方程组的解,若不是原方程组的解,试分析原因,并证实你的分析的正确性!解:采用顺序消元法求得如下结果:请输入一个3行矩阵0.101 2.304 3.555 1.183-1.347 3.712 4.623 2.137-2.835 1.072 5.643 3.0350.101 2.304 3.555 1.1830 34.4396 52.0347 17.91420 0 6.09738 2.0435最后计算得到x =(-0.3982,0.0138,0.3351) T,代入原方程验证可知解向量是原方程组的解。
李庆扬-数值分析第五版第5章和第7章习题答案解析
WORD格式.分享第5章复习与思考题1、用高斯消去法为什么要选主元?哪些方程组可以不选主元?k答:使用高斯消去法时,在消元过程中可能出现a的情况,这时消去法无法进行;即kkk时主元素0和舍入增长a,但相对很小时,用其做除数,会导致其它元素数量级的严重kk计误差的扩散,最后也使得计算不准确。
因此高斯消去法需要选主元,以保证计算的进行和算的准确性。
当主对角元素明显占优(远大于同行或同列的元素)时,可以不用选择主元。
计算时一般选择列主元消去法。
2、高斯消去法与LU分解有什么关系?用它们解线性方程组Ax=b有何不同?A要满足什么条件?答:高斯消去法实质上产生了一个将A分解为两个三角形矩阵相乘的因式分解,其中一个为上三角矩阵U,一个为下三角矩阵L。
用LU分解解线性方程组可以简化计算,减少计算量,提高计算精度。
A需要满足的条件是,顺序主子式(1,2,⋯,n-1)不为零。
3、楚列斯基分解与LU分解相比,有什么优点?楚列斯基分解是LU分解的一种,当限定下三角矩阵L的对角元素为正时,楚列斯基分解具有唯一解。
4、哪种线性方程组可用平方根法求解?为什么说平方根法计算稳定?具有对称正定系数矩阵的线性方程可以使用平方根法求解。
,切对角元素恒为正数,因此,是一个稳定的平方根法在分解过程中元素的数量级不会增长算法。
5、什么样的线性方程组可用追赶法求解并能保证计算稳定?对角占优的三对角方程组6、何谓向量范数?给出三种常用的向量范数。
向量范数定义见p53,符合3个运算法则。
正定性齐次性三角不等式x为向量,则三种常用的向量范数为:(第3章p53,第5章p165)设n||x|||x|1ii11n22||x||(x)2ii1||x||max|x i|1in7、何谓矩阵范数?何谓矩阵的算子范数?给出矩阵A=(a ij)的三种范数||A||1,||A||2,精品.资料WORD格式.分享||A||∞,||A||1与||A||2哪个更容易计算?为什么?向量范数定义见p162,需要满足四个条件。
数值分析实验总结
break;
end
x0=x1; x1=x;
k=k+1;
end
执行程序:
f=@(x)x^3-x-1;
>> [x,k]=mqnewt(f,1.0,2.0,1e-5)
结果:
x =
1.3247
k =
6
各种方法的优缺点的比较分析
首先,三种方法得出的解是一样的,而二分法的迭代次数最多(17次),而牛顿法的迭代次数最少(3次),割线法的迭代次数也较少(6次)。
b=x;
else
a=x;
end
x=(a+b)/2.0; k=k+1;
end
执行程序:
f=@(x)x^3-x-1;
[x,k]=mbisec(f,1,2,1e-5)
结果:
x =
1.3247
k =
17
牛顿法解非线性方程
Matlab程序:
function[x,k]=mnewton(f,df,x0,ep,N)
割线法的优点是无需计算函数导数,但仍具有超线性收敛速度;其缺点是收敛速度没有牛顿法快。
2.使用列主元高斯消去法和LU分解法解同一个线性方程组,并对所得结果进行数值分析。
题目:求下列方程组的近似解
列主元高斯消去法解线性方程组
Matlab程序:
function[x]=mgauss(A,b,flag)
ifnargin<3, flag=0;end
1. 用二分法、牛顿法和割线法求解同一个非线性方程,对各种方法的优缺点进行比较分析;
题目:求解下列方程
二分法解非线性方程
Matlab程序:
function[x,k]=mbisec(f,a,b,ep)
数值分析第五版第5章习题答案
第5章
)矩阵行列式的值很小。
)矩阵的范数小。
)矩阵的范数大。
(7)奇异矩阵的范数一定是零。
答:错误,
∞
•可以不为0。
(8)如果矩阵对称,则|| A||1 = || A||∞。
答:根据范数的定义,正确。
(9)如果线性方程组是良态的,则高斯消去法可以不选主元。
答:错误,不选主元时,可能除数为0。
(10)在求解非奇异性线性方程组时,即使系数矩阵病态,用列主元消去法产生的误差也很小。
答:错误。
对于病态方程组,选主元对误差的降低没有影响。
(11)|| A ||1 = || A T||∞。
答:根据范数的定义,正确。
(12)若A是n n的非奇异矩阵,则
)
(
cond
)
(
cond1-
=A
A。
答:正确。
A是n n的非奇异矩阵,则A存在逆矩阵。
根据条件数的定义有:
1
111111 cond()
cond()()
A A A
A A A A A A A
-
------
=•
=•=•=•
习题
如有侵权请联系告知删除,感谢你们的配合!。
数值分析实验报告
《数值分析》实验报告班级:姓名:学号:指导老师:实验基本要求一、上机前的准备工作1、复习和掌握与本次实验有关的教学内容。
2、根据本次实验要求,在纸上编写算法及上机的程序,并经过人工模拟运行检验,减少不必要的错误,提高上机效率。
切忌不编程序、不作人工检查就进行程序输入,这只能使上机调试的难度增加,甚至可能带来学习自信心的下降,影响后续课程的学习。
二、上机实验步骤1、启动开发环境;2、建立源程序文件,输入源程序;3、编译产生目标程序,连接生成可执行程序,运行程序,输出结果;4、对数值计算结果进行误差分析,讨论数值算法的收敛性与稳定性;5、整理实验报告。
三、实验报告实验报告是记录实验工作全过程的技术文档,实验报告的撰写是科学技术工作的一个组成部分。
《数值分析》实验报告包括下列要求:1、实验原理;2、实验内容和要求;3、数值算法描述,包括数据输入、数据处理和数据输出;4、算法的实现(1)给出具体的计算实例,(2)经调试正确的源程序清单,(3)对具体的数值例子给出数值结果;5、计算结果的误差分析,算法的收敛性与稳定性的讨论;6、实验心得。
实验一、误差分析一、实验目的1、通过上机编程,复习巩固以前所学程序设计语言及上机操作指令;2、通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念;3、 通过上机计算,了解舍入误差所引起的数值不稳定性。
二、实验原理误差问题是数值分析的基础,又是数值分析中一个困难的课题。
在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。
因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。
同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。
三、实验任务对20,,2,1,0 =n ,计算定积分⎰+=105dx x x y nn . 算法1:利用递推公式151--=n n y ny , 20,,2,1 =n , 取 ⎰≈-=+=100182322.05ln 6ln 51dx x y . 算法2:利用递推公式n n y n y 51511-=- 1,,19,20 =n . 注意到⎰⎰⎰=≤+≤=1010202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y . 思考:从计算结果看,哪个算法是不稳定的,哪个算法是稳定的。
数值分析6(选主元高斯消元法)
则该方程的精确解为
1 x1 110 4 1.0001, x2 2 x1 0.9999
假设3位十进制浮点数系统,则该方程的浮点形式为
0.100 E 3 x1 + 0.100E 1x2 0.100 E1 0.100 E 1 x1 0.100E 1 x2 0.200 E 1 (0.100E 5 0.100 E 1) x2 0.100 E 5 0.200 E 1 0.100 E 3 x1 + 0.100E 1x2 0.100 E1 0 0.100E 5 x2 0.100 E 5
如果令P =Pn1 Pn2 PA L1 L2 P1 , Ls Pn1 Pn2 Ps1 Fs1 Ps1 Pn2 Pn1 Ln1U LU。
L U Ls是Frobenius矩阵,差别只是Ls 第s列对角线以下元素
是Fs1第s列对角线以下元素经过重新排列得到的。
Matlab 命令: [L,U,P] = lu(A) edit lutx bslashtx
20:22
2 1 2 2 3 3 2 1 2 0 5 0 4 6 19 9
14/27
三对角矩阵分解
f u over , with f
f u( x ) 0 x 1 f (0) a, f (1) b
20:22
k 1
计算次序
1 2
3 4
u11 m 21 A m n1 u12 u22 m n , n 1 u1n u2 n unn
5 6
20:22
10/27
例4 求矩阵的Doolittle分解
解线性方程组的列主元素高斯消去法和LU分解法
解线性方程组的列主元素高斯消去法和LU分解法数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、算法描述:本次试验采用的是高斯列主元消去法和LU分解法求解线性方程组的解。
其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A可逆时,列主元Gau(高斯)消去法一定能进行到底。
优点:具有很好的数值稳定性;具有与顺序Gau消去法相同的计算量。
列主元Gau(高斯)消去法的精度显著高于顺序Gau(高斯)消去法。
注意:省去换列的步骤,每次仅选一列中最大的元。
矩阵的三角分解法是A=LU,L是下三角阵,U是上三角阵,Doolittle分解:L是单位下三角阵,U是上三角阵;Crout分解:L是下三角阵,U是单位上三角阵。
矩阵三角分解的条件是矩阵A有唯一的Doolittle分解的充要条件是A的前n-1顺序主子式非零;矩阵A有唯一的Crout分解的充要条件是A的前n-1顺序主子式非零。
三角分解的实现是通过(1)Doolittle分解的实现;(2)Doolittle分解的缺点:条件苛刻,且不具有数值稳定性。
(3)用Doolittle分解求解方程组:A某=bLU某=bLY=bA=LUU某=Y;四、实验内容:解下列两个线性方程组3.016.031.99某114.161.23某21(1)1.270.9874.819.34某1371032.099999(2)51211某1862某25.90000151某3502某410a、用你熟悉的算法语言编写程序用列主元高斯消去法和LU分解求解上述两个方程组,输出A某=b中矩阵A及向量b,A=LU分解的L及U,detA及解向量某.b、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量某及detA,并与(1)中结果比较。
数值分析 第二章 学习小结
第2章线性方程组的解法--------学习小结本章学习体会本章主要学习的是线性方程组的解法。
而我们则主要学习了高斯消去法、直接三角分解法以及迭代法三种方法。
这三种方法的优缺点以及适用范围各有不同。
高斯消去法中,我们又学习了顺序高斯消去法以及列主元素高斯消去法。
顺序高斯消去法可以得到方程组的精确解,但要求系数矩阵的主对角线元素不为零,而且该方法的数值稳定性没有保证。
但列主元素高斯消去法因为方程顺序的调整,其有较好的数值稳定性。
直接三角分解法中,我们主要学习了Doolitte分解法与Crout分解法。
其思想主要是:令系数矩阵A=UL,其中L为下三角矩阵,U是上三角矩阵,为求AX=b 的解,则引进Ly=b,Ux=y 两个方程,以求X得解向量。
这种方法计算量较小,但是条件苛刻,且不具有数值稳定性。
迭代法(逐次逼近法)是从一个初始向量出发,按照一定的计算格式,构造一个向量的无穷序列,其极限才是所求问题的精确解,只经过有限次运算得不到精确解。
该方法要求迭代收敛,而且只经过有限次迭代,减少了运算次数,但是该方法无法得到方程组的精确解。
二、本章知识梳理针对解线性方程组,求解线性方程组的方法可分为两大类:直接法和迭代法,直接法(精确法):指在没有舍入误差的情况下经过有限次运算就能得到精确解。
迭代法(逐次逼近法):从一个初始向量出发,按照一定的计算格式,构造一个向量的无穷序列,其极限才是所求问题的精确解,只经过有限次运算得不到精确解。
我们以前用的是克莱姆法则,对于计算机来说,这种方法运算量比较大,因此我们学习了几种减少运算次数的方法,有高斯消去法、直接三角分解法,同时针对病态方程组,也提出了几种不同的解法。
Gauss消去法Gauss消去法由消元和回代两个过程组成,消元过程是指针对方程组的增广矩阵,做有限次初等行变化,使它系数矩阵变为上三角矩阵。
顺序Gauss消去法消元过程:对于K=1,2,3…,n-1执行如果,则算法失效,停止计算;否则转(2)对于计算回代过程:综上:顺序Gauss消去法的数值稳定性是没有保证的。
数值分析实验作业,gauss消去法的数值稳定性分析
实验3.1 Gauss 消去法的数值稳定性试验实验目的:观察和理解Gauss 消元过程中出现小主元(即)(k kka 很小)时引起的方程组解的数值不稳定性。
实验内容:求解方程组b Ax =,其中(1)⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡⨯=11212592.1121-130.6-291.51314.59103.015-1A ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=2178.4617.591b ; (2)⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡----=2010151526990999999999.23107102A ,⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=15019000000000.582b .实验要求:(1) 计算矩阵的条件数,判断系数矩阵是良态的还是病态的。
(2) 用Gauss 列主元消去法求得L 和U 及解向量421,R x x ∈.(3) 用不选主元的Gauss 消去法求得L ~和U ~及解向量421~,~R x x ∈.(4) 观察小主元并分析其对计算结果的影响.程序如下:计算矩阵条件数及Gauss 列主元消去法:format longengA1=[0.3e-15 59.14 3 1;5.291 -6.130 -1 2;11.2 9 5 2;1 2 1 1]; b1=[59.17;46.78;1;2]; n=4;k2=cond(A1) %k2为矩阵的条件数;for k=1:n-1a=max(abs(A1(k:n,k))); [p,k]=find(A1==a); B=A1(k,:);c=b1(k);A1(k,:)=A1(p,:);b1(k)=b1(p); A1(p,:)=B;b1(p)=c; if A1(k,k)~=0A1(k+1:n,k)=A1(k+1:n,k)/A1(k,k);A1(k+1:n,k+1:n)=A1(k+1:n,k+1:n)-A1(k+1:n,k)*A1(k,k+1:n); else break end endL1=tril(A1,0); for i=1:n L1(i,i)=1; end L=L1U=triu(A1,0) for j=1:n-1b1(j)=b1(j)/L(j,j);b1(j+1:n)=b1(j+1:n)-b1(j)*L(j+1:n,j); endb1(n)=b1(n)/L(n,n); for j=n:-1:2b1(j)=b1(j)/U(j,j);b1(1:j-1)=b1(1:j-1)-b1(j)*U(1:j-1,j); endb1(1)=b1(1)/U(1,1); x1=b1运行结果如下: K2=68.43;⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---⨯=-14929.00202.00893.0011755.04724.00011079.2600118L⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=801.0000231.1835.2001314.5902592.11U 1x =[18.9882;3.3378;-34.747;-33.9865] 不选主元的Gauss 消去法程序:clearformat longengA1=[0.3e-15 59.14 3 1;5.291 -6.130 -1 2;11.2 9 5 2;1 2 1 1]; b1=[59.17;46.78;1;2]; n=4;for k=1:n-1A1(k+1:n,k)=A1(k+1:n,k)/A1(k,k);A1(k+1:n,k+1:n)=A1(k+1:n,k+1:n)-A1(k+1:n,k)*A1(k,k+1:n); endL1=tril(A1,0); for i=1:n L1(i,i)=1; end L=L1U=triu(A1,0) for j=1:n-1b1(j)=b1(j)/L(j,j);b1(j+1:n)=b1(j+1:n)-b1(j)*L(j+1:n,j); endb1(n)=b1(n)/L(n,n); for j=n:-1:2b1(j)=b1(j)/U(j,j);b1(1:j-1)=b1(1:j-1)-b1(j)*U(1:j-1,j); endb1(1)=b1(1)/U(1,1); x1=b1程序运行结果如下:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⨯⨯⨯=10189.010333.3011168.21033.3700110637.170001~151515L⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡--⨯-⨯-⨯-⨯=-5.000816010637.171091.5210043.101314.59103.0~15151815U ]0;0;0005.1;6848.23[~1=x同理可得2A 对应的系数矩阵条件数及Gauss 列主元消去法求解结果: K2=8.994;⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-⨯=1333.04.0001104.0-3.0-0015.0000112-L ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=36667.300030.26005.155.2010710U ]0.1;;0.1;0.1;10444.0[152-⨯=-x不选主元的Gauss 消去法结果:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⨯⨯=1400.0109999.0-001104998.2-5.00013.0-0001~1212L ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⨯⨯⨯--=-3667.3000107495.5109987.14003.26100.1010710~121212U ]000145.1;99994.0;000.1;1045.1[~52-⨯-=-x实验4.5 三次样条插值函数的收敛性问题提出:多项式插值不一定收敛的,即插值的节点多,效果不一定就好。
数值分析计算实习题列主元高斯消去法解线性方程组
数值分析计算实习题第5章解线性方程组的直接方法【选题列主元高斯消去法解线性方程组。
书上的计算实习题1、2、3都要求用列主元高斯消去法解线性方程组,所以考虑写一个普适的程序来实现。
对于线性方程组Ax二b,程序允许用户从文件读入矩阵数据或直接在屏幕输入数据。
文件输入格式要求:(1)第一行为一个整数n (2<=n<=100),表示矩阵阶数。
(2)第2~n+l行为矩阵A各行列的值。
(3)第n+2~n+n+2行为矩阵b各行的值。
屏幕输入:按提示输入各个数据。
输出:A. b、det(A).列主元高斯消去计算过程、解向量X。
【算法说明】设有线性方程组Ax=b,其中设A为非奇异矩阵。
方程组的增广矩阵为«12«21[Nb] =第1步(k=l ):首先在A的第一列中选取绝对值最大的元素®I,作为第一步的主元素:«|| H0然后交换(A, b)的第1行与第I行元素,再进行消元计算。
设列主元素消去法已经完成第1步到第k・l步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组 A(k)x=b(k)4? …4;)…唸)•忒••輕■[A.b]T[A ⑹,b")] = ••■咲■■■■■* *■〃伏)・• - %■第k步计算如下: 对于 k=l, 2, •…,0-1(1)按列选主元:即确定t使(2)如果tHk,则交换[A, b]第t行与第k行元素。
(3)消元计算54* J 叫=一鱼(=^ + 1,…,H)% 吗 <-«y + 〃如伽 (fJ = R + l,…/)b- <-勺+加汝仇, (i = /c + l,…,《)消元乘数mik 满足:n (%-D 内)X1 < ------ -- ---- 9(j = « 一 1,«一2■…J)tk M 1,(,=斤 +1, •••,«)fet e(4)回代求解【程序】/*【普适列主元消去法解线性方程组】对于线性方程组:Ax=b 输入:[选择屏幕直接输入]1.A的行阶数n(l <= 11<= 100)2.A的值3.b的值[选择读取文件1文件名(和主程序同级文件夹下)输出:I.A2・b3・ det(A)4解向疑X */#inciude <stdio.h>#include <stdlibJi>#include <niath.h> double A[1051(J05LA_B[I05][105Lb[105].x[105];double det A:int n.mark = 1;〃读入数据void input(){int ij:char ch[20],name[ 100];HLE *f;printf("\iv-An是否从文件读取数据(Y/N):”); scanf(”%st&ch);if(ch[0] = Y II ch[0] = y)( prinif(“请输入文件名(包括扩展需):"); scanf("%s".name):f = fop cn(namc「T');fscanfCf/'%d'\&n);ford = 0:i < n;i 卄) for(j = 0;j < nJ ++) fscanf(f,'*%ir\&A[i]|j)):for(i = 0:i < n;i卄)fscanf(「%F・&b[i]);else{prin氓”请输入A的阶数:”);scanf( '%d %d\&n): prinifC请输入A的值:”);for(i = 0:i V n:i ++)for(j = 0;j < n:j ++) scanf("%lf\&A[i]U]);phnifC请输入b的值:”);for(i = 0:i < n;i 卄)scanf(''%lf\&b[i]):〃讣算行列式的值double det{double s[105](105] jni m){int z.jkdouble b[105][105Klotal = 0.r; /*b[Nl[N]用于存放,在矩阵s[Nl[N冲元素s[0]的余子式灯if(m>2){for(z = 0:z V m:z++){for(j = 0;j V m ・ 1 j ++)for(k = 0:k vn卜l;k ++)if(k >= z)bUKk] = sU+l](k+l];elsebLi][k] = s[j+l][k];if(z % 2==0)r=s[0)⑵ * dcKb.m - 1):/*递归调用制elser= (-1) * s[0](z] * det(b.m -1);total = total + r;else if(m == 2)total = s[0][0] *s(l][l]-s[0](l] *s[l][01:else if(m == 1)total =s[0][0];return total;// 输出A^llb和dcl(A)void ouipui_l(){ int i j;primlTAW);for(i = 0;i < n:i ++){ for(j = 0:j < n:j ++)p rintf('-%15.4f\A[i]lj]);prinif(W);prinlf(5b = \rf);for{i = 0;i < n:i ++)prinif("%15.4l\iV\b[i]):printf("\ndet(A) = %・4f\n”・dclA);//主il•算函数void couni_x(){int ij,k:int max; double tmpjnik;〃构造增广矩阵for{i = 0;i<n:i++){for。
数值分析
数值分析 第一章: 误差估计绝对误差,相对误差,有效数字。
大数吃小数。
(填空)三角分解(大题)杜利脱尔分解,克洛脱分解,乔列斯基分解,平方根法,追赶法, 例 1 用最小刻度为毫米的卡尺测量直杆甲和直杆乙,分别读出长度为 ,问: 各是多少?两直杆的实际长度 在什么范围内? 例2 设 是分别由准确值 经过四舍五入而得到的近似值, 问: 各是多少?例3 下列近似值的绝对误差限都是0.005, 问:各个近似值有几位有效数字?求和时从小到大相加,可使和的误差减小。
1、下列各近似值均有四位有效数字,试指出它们的绝对误差限和相对误差限。
2、下列近似值的绝对误差限都是0.0005,试指出它们有几位有效数字。
3、在四位十进制的限制下,试选择精确度最高的算法,计算下式的值。
答案:1、0.000005,0.03712%;0.005,0.04052%;0.0005,0.04167%.2、4、2、03、1342004、 高斯消去法步骤:(1) 首先将增广阵 [ A, b ] 化为上三角阵; (2) 用三角方程组,回代求解 。
例1在四位十进制的限制下,分别用不选主元高斯消去法与列选主元高斯消去法求解下列方程组。
mm b mm a 24,312==)( ,)( ,)(,)(b a b a r r εεεεm m y m m m m x m m b b b a a a m m b a r r 5.245.23,5.3125.311%,08.2245.0)()( %,16.03125.0)()( ,5.0)()(≤≤≤≤≈==≈====εεεεεε1200.2,18.2=-=b a )( ,)( ,)(,)(b a b a r r εεεε%0024.01200.200005.0)()( %,23.018.2005.0)()( 05000.0)(,005.0)(≈==≈====b b b a a a b a r r εεεεεε41086.0,0312.0,38.1-⨯=-==c b a 200.1,341.12,01347.0-=-==c b a 00032.0,042.0,00031.1-==-=c b a 906050401013402++++⨯=u )1(41,1411---==+n n n n y ny n y y 1231231230.012 0.0100.1670.67810.8334 5.91012.132001200 4.2981x x x x x x x x x ++=⎧⎪++=⎨⎪++=⎩解:用顺序消去法的消元过程:回代后,得列选主元高斯消去法的消元过程:回代后,得杜利脱尔分解:如果方程组 Ax =b 的系数阵 A 能分解为A =LU , 其中,L 是下三角矩阵,U 是上三角矩阵.例1.3 用矩阵的杜利脱尔(Doolittle )分解解方程组解:设 比较两边系数得:3215.546,100.0,104.0x x x ===-3215.546,45.76,17.46x x x ==-=11121212221210010010n n n n nn u u u l u u A l l u ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦0.01200.0100.16700.67811.0000.8334 5.91012.1032001200 4.200981.0⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦320.01200.0100.16700.678100.1000108.01044.4101467445410179810-⎡⎤⎢⎥→⨯--⎢⎥⎢⎥--⨯-⨯⎣⎦3550.01200.0100.16700.678100.1000108.01044.4100117510654710-⎡⎤⎢⎥→⨯--⎢⎥⎢⎥-⨯-⨯⎣⎦0.01200.0100.16700.67811.0000.8334 5.91012.1032001200 4.200981.0⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦232001200 4.200981.000.45845.90911.7900.5500100.16700.6744-⎡⎤⎢⎥→⎢⎥⎢⎥⨯⎣⎦32001200 4.200981.000.4584 5.90911.79000.096090.5329⎡⎤⎢⎥→⎢⎥⎢⎥⎣⎦.201814513252321321⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡x x x LU u u u u u u l l l =⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡332322131211323121111513252321⎪⎪⎪⎩⎪⎪⎪⎨⎧-=-=-=======2454132321333223223121131211u l u u l l u u u ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=2441321153121U L 于是练习: 用矩阵的杜利脱尔(Doolittle )分解 A=LU 解方程组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int n = 4;
double[] x = new double[n];
x = Gause(a, n);
Console.WriteLine("高斯消去法方程:");
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
Console.Write(a[i, j].ToString() + " ");
Console.WriteLine();
}
Console.WriteLine("线性方程组的解:");
for (int i = 0; i <= n - 1; i++)
Console.Write("x" + (i + 1).ToString() + "=" +
x[i].ToString() + "
");
Console.WriteLine();
Console.ReadLine();
}
}
}
四、分析
通过本次实验的学习,学会根据算法编写基本的相关程序,虽然此次程序模板由老师给 予,但认真阅读理解程序有助于今后的学习,再利用计算机中的C语言对高斯列主元消去法 可以快速得到线性方程组的解,由简单的线性方程组可以推广到一般n阶线性方程组,这对 如何利用高斯列主元消去法解决实际问题有了一定的经验。
}
}
x[n - 1] = a[n - 1, n] / a[n - 1, n - 1]; //回代方程求解x
for (i = n - 2; i >= 0; i--)
{
s = 0;
for (j = i + 1; j <= n - 1; j++)
s = s + a[i, j] * x[j];
x[i] = (a[i, n] - s) / a[i, i];
}
return x;
}
static void Main(string[] args)
{
double[,] a = new double[4, 5] { { 10, -7, 0, 1, 8 }, { -3,
2.099999, 6, 2, 5.900001 }, { 5, -1, 5, -1, 5 }, { 2, 1, 0, 2, 1 } };
int i, j, k; int rank, columm; double temp, l, s, mx; double[] x = new double[n]; for (i = 0; i <= n - 2; i++) {
mx = Math.Abs(a[i, i]); rank = i;
columm = i;
a[i, k] = a[rank, k];
a[rank, k] = temp;
}
//消元
for (j = i + 1; j <= n - 1; j++)
{
l = a[j, i] / a[i, i];
for (k = i; k <= n; k++)
a[j, k] = a[j, k] - l * a[i, k];
for (j = i + 1; j <= n - 1; j++) //选主元
if (Math.Abs(a[j, i]) > mx)
{
mx = Math.Abs(a[j, i]);
rank = j;
columm = i;
}
for (k = 0; k <= n; k++)
//主元行变换
{
temp = a[i, k];
实验四:列组元消去法
一、目的
1)熟悉列主元高斯消元法解线性方程组的算法 2)掌握列主元高斯消去法的编程
二、实验原理
列主元素消去法是为控制舍入误差而提出来的一种算法,在Gauss消去法的消元过程中, 若出现a=0,则消元无法进行,即使其不为0,但很小,把它作为除数,就会导致其他元素量级的 巨大增长和舍入误差的扩散,最后使计算结果不可靠.使用列主元素消去法计算,基本上能控 制舍入误差的影响,并且选主元素比较方便.
三、运行结果
四、代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 高斯 {
class Program {
static double[] Gause(double[,] a, int n) {