数值分析列主元高斯消去法


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) {
合集下载

数值分析计算方法实验报告

数值分析计算方法实验报告
break;
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分解法

数值分析高斯顺序消去法、列主元消去法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,需要满足四个条件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档