数值分析编程及运行结果(高斯顺序消元法)

数值分析编程及运行结果(高斯顺序消元法)
数值分析编程及运行结果(高斯顺序消元法)

高斯消元法1.程序:

clear

format rat

A=input('输入增广矩阵A=')

[m,n]=size(A);

for i=1:(m-1)

numb=int2str(i);

disp(['第',numb,'次消元后的增广矩阵']) for j=(i+1):m

A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);

end

A

end

%回代过程

disp('回代求解')

x(m)=A(m,n)/A(m,m);

for i=(m-1):-1:1

x(i)=(A(i,n)-A(i,i+1:m)*x(i+1:m)')/A(i,i); end

x

2.运行结果:

高斯选列主元消元法1.程序:

clear

format rat

A=input('输入增广矩阵A=')

[m,n]=size(A);

for i=1:(m-1)

numb=int2str(i);

disp(['第',numb,'次选列主元后的增广矩阵']) temp=max(abs(A(i:m,i)));

[a,b]=find(abs(A(i:m,i))==temp);

tempo=A(a(1)+i-1,:);

A(a(1)+i-1,:)=A(i,:);

A(i,:)=tempo

disp(['第',numb,'次消元后的增广矩阵'])

for j=(i+1):m

A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);

end

A

end

%回代过程

disp('回代求解')

x(m)=A(m,n)/A(m,m);

for i=(m-1):-1:1

x(i)=(A(i,n)-A(i,i+1:m)*x(i+1:m)')/A(i,i); end

x

2.运行结果:

追赶法1.程序:

function [x,L,U]=zhuiganfa(a,b,c,f)

a=input('输入矩阵-1对角元素a=');

b=input('输入矩阵对角元素b=');

c=input('输入矩阵+1对角元素c=');

f=input('输入增广矩阵最后一列元素f='); n=length(b);

% 对A进行分解

u(1)=b(1);

for i=2:n

if(u(i-1)~=0)

l(i-1)=a(i-1)/u(i-1);

u(i)=b(i)-l(i-1)*c(i-1);

else

break;

end

end

L=eye(n)+diag(l,-1);

U=diag(u)+diag(c,1);

x=zeros(n,1);

y=x;

% 求解Ly=b

y(1)=f(1);

for i=2:n

y(i)=f(i)-l(i-1)*y(i-1); end

% 求解Ux=y

if(u(n)~=0)

x(n)=y(n)/u(n);

end

for i=n-1:-1:1

x(i)=(y(i)-c(i)*x(i+1))/u(i); end

2.运行结果:

高斯-塞德尔迭代格式

1.程序:

function x=Gauss_Seidel(a,b)

a=input('输入系数矩阵a=')

b=input('输入增广矩阵最后一列b=');

e=0.5e-7;

n=length(b);

N=50;

x=zeros(n,1);

t=zeros(n,1);

for k=1:N

sum=0;

E=0;

t(1:n)=x(1:n);

for i=1:n

x(i)=(b(i)-a(i,1:(i-1))*x(1:(i-1))-a(i,(i+1):n)*t((i+1):n))/a(i,i);

end

if norm(x-t)

k

break;

end

end

2.运行结果:

雅戈比迭代格式1.程序:

function x=Jocabi(a,b)

a=input('输入系数矩阵a=');

b=input('输入增广矩阵最后一列b=');

e=0.5e-7;

n=length(b);

N=100;

x=zeros(n,1);

y=zeros(n,1);

for k=1:N

sum=0;

for i=1:n

y(i)=(b(i)-a(i,1:n)*x(1:n)+a(i,i)*x(i))/a(i,i);

end

for i=1:n

sum=sum+(y(i)-x(i))^2;

end

if sqrt(sum)

k

break;

else

for i=1:n

x(i)=y(i);

end

end

end

if k==N warning('未能找到近似解'); end

2.运行结果:

逐次超松弛法(SOR)

1.程序:

function [n,x]=sor22(A,b,X,nm,w,ww)

%用超松弛迭代法求解方程组Ax=b

%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,nm为最大迭代次数,w为误差精度,ww为松弛因子

%输出:x为求得的方程组的解构成的列向量,n为迭代次数

A=input('输入系数矩阵A=');

b=input('输入方程组右端的列向量b=');

X=input('输入迭代初值构成的列向量X=');

nm=input('输入最大迭代次数nm=');

w=input('输入误差精度w=');

ww=input('输入松弛因子ww=');

n=1;

m=length(A);

D=diag(diag(A)); %令A=D-L-U,计算矩阵D

L=tril(-A)+D; %令A=D-L-U,计算矩阵L

U=triu(-A)+D; %令A=D-L-U,计算矩阵U

M=inv(D-ww*L)*((1-ww)*D+ww*U); %计算迭代矩阵

g=ww*inv(D-ww*L)*b; %计算迭代格式中的常数项

%下面是迭代过程

while n<=nm

x=M*X+g; %用迭代格式进行迭代

if norm(x-X,'inf')

disp('迭代次数为');n

disp('方程组的解为');x

return;

%上面:达到精度要求就结束程序,输出迭代次数和方程组的解

end

X=x;n=n+1;

end

%下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解)

disp('在最大迭代次数内不收敛!');

disp('最大迭代次数后的结果为');

2.运行结果:

二分法求解方程的根

1.程序:

%其中a,b表示查找根存在的范围,M表示要求解函数的值%f(x)表示要求解根的方程

%eps表示所允许的误差大小

function y=er_fen_fa(a,b,M)

k=0;

eps=0.05

while b-a>eps

x=(a+b)/2;

%检查是否大于值

if ((x^3)-3*x-1)>M

b=x

else

a=x

end

k=k+1

end

2.运行结果:

Newton 迭代法(切线法)

1.程序:

function x=nanewton(fname,dfname,x0,e,N)

%newton迭代法解方程组

%fname和dfname分别表示F(x)及其导函数的M函数句柄或内嵌函数,x0为迭代初值,e为精度要求

x=x0;x0=x+2*e;k=0;

if nargin<5,N=500;end

if nargin<4 e=1e-4;end

while abs(x0-x)>e&k

k=k+1;

x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);

disp(x)

end

if k==N,warning('已达迭代次数上限');

end

2.运行结果:

割线方式迭代法

1.程序:

function x=ge_xian_fa(fname,dfname,x0,x1,e,N)

%割线方式迭代法解方程组

%fname和dfname分别表示F(x)及其导函数的M函数句柄或内嵌函数,x0,x1分别为迭代初值,e为精度要求

k=0;a=x1;b=x0;

if nargin<5,N=500;end

if nargin<4 e=1e-4;end

while abs(a-b)>e&k

k=k+1;

x=x1-((x1-x0)/(feval(fname,x1)-feval(fname,x0)))*feval(fname,x1);

if feval(fname,x)*feval(fname,x0)>0,

x0=x;b=x0;

else

x1=x;a=x1;

end

x=x1-((x1-x0)/(feval(fname,x1)-feval(fname,x0)))*feval(fname,x1);

numb=int2str(k);

disp(['第',numb,'次计算后x='])

fprintf('%f\n\n',x);

end

if k==N,warning('已达迭代次数上限'); end

2.运行结果:

数值分析实验报告包括程序截图

计算机与信息工程学院数值分析实验报告 计科专业2013级2班 姓名:_________学号:________ 注:实验平台为VS2013 实验一:Lagrange 插值法 一、 实验目的 (1)通过实验掌握Lagrange 插值法; (2)学会用编程语言求解具体插值问题。 二、 实验题目: 按Lagrange 插值算法编程求出f(0.596)的近似值; 三、实验原理 若给定两个插值点),(),,(1100y x y x ,其中10x x ≠,在公式中取1=n ,则L a g r a n g e 插 值多项式为: )()()()() ()(00 101001011010 1x x x x y y y x x x x y x x x x y x p ---+=--+--= 是经过),(),,(1100y x y x 的一条直线,故此法称为线性插值法。 若函数给定三个插值点 2,1,0),,(=i y x i i ,,其中i x 互不相等,在公式中取1=n ,则Lagrange 插值多项式为: ) )(())(())(())(())(() )(()(120210221012012010210 2x x x x x x x x y x x x x x x x x y x x x x x x x x y x p ----+----+----= 这种插值法称为二次插值或抛物插值。

四、实验内容与步骤 五、实验程序 六、实验结果及其分析

教师评语: 实验成绩:_____ 计算机与信息工程学院数值分析实验报告 实验二:最小二乘法 一、 实验目的 (1)掌握最小二乘法的基本思路和拟合步骤; (2)培养编程与上机调试能力。 二、 实验题目 三、 实验原理 已知数据对()(),1,2,,j j x y j n =,求多项式0()()m i i i p x a x m n ==<∑使得 2 0110(,, ,)n m i n i j j j i a a a a x y ==?? Φ=- ??? ∑∑为最小,这就是一个最小二乘问题。 四、实验内容与步骤 已知一组数据如下,求它的线性拟合曲线。

数值分析列主元消去法的实验报告

实验一 列主元消去法 【实验内容】 1.掌握列主元消去法的基本思路和迭代步骤 2.并能够利用列主元的高斯消去法解任意阶数的线性方程组; 3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。 【实验方法与步骤】 1.列主元消去法基本思路 设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 2.列主元高斯消去法算法描述 将方程组用增广矩阵[]()(1)|ij n n B A b a ?+==表示。 步骤1:消元过程,对1,2,,1k n =-L (1) 选主元,找{},1,,k i k k n ∈+L 使得 ,max k i k ik k i n a a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3); (3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ?, ,,1j k n =+L ; (4) 消元,对,,i k n =L ,计算/,ik ik kk l a a =对1,,1j k n =++L ,计算 .ij ij ik kj a a l a =- 步骤 2:回代过程: (1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2); (2) ,1/;n n n nn x a a +=对1,,2,1i n =-L ,计算 ,11/n i i n ij j ii j i x a a x a +=+??=- ??? ∑

[实验程序] #include #include #include #include #define NUMBER 20 #define Esc 0x1b #define Enter 0x0d using namespace std; float A[NUMBER][NUMBER+1] ,ark; int flag,n; void exchange(int r,int k); float max(int k); void message(); void main() { float x[NUMBER]; int r,k,i,j; char celect; void clrscr(); printf("\n\nUse Gauss."); printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc."); celect=getch(); if(celect==Esc) exit(0); printf("\n\n input n="); scanf("%d",&n); printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++) { printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i); for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); } for(k=1;k<=n-1;k++) { ark=max(k); if(ark==0) { printf("\n\nIt’s wrong!");message();

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 912113850115 专业:数学与应用数学 指导老师:李建良

线性方程组的数值实验 一、课题名字:求解双对角线性方程组 二、问题描述 考虑一种特殊的对角线元素不为零的双对角线性方程组(以n=7为例) ?????????? ?????? ? ???? ?d a d a d a d a d a d a d 766 55 44 3 32 211??????????????????????x x x x x x x 7654321=?????????? ? ???????????b b b b b b b 7654321 写出一般的n (奇数)阶方程组程序(不要用消元法,因为不用它可以十分方便的解出这个方程组) 。 三、摘要 本文提出解三对角矩阵的一种十分简便的方法——追赶法,该算法适用于任意三对角方程组的求解。 四、引言 对于一般给定的d Ax =,我们可以用高斯消去法求解。但是高斯消去法过程复杂繁琐。对于特殊的三对角矩阵,如果A 是不可约的弱对角占优矩阵,可以将A 分解为UL ,再运用追赶法求解。

五、计算公式(数学模型) 对于形如????? ?? ????? ??? ?---b a c b a c b a c b n n n n n 111 2 2 2 11... ... ...的三对角矩阵UL A =,容易验证U 、L 具有如下形式: ??????? ????? ??? ?=u a u a u a u n n U ...... 3 3 22 1 , ?? ????? ? ?? ??????=1 (1) 1132 1l l l L 比较UL A =两边元素,可以得到 ? ?? ??-== = l a b u u c l b u i i i i i i 111 i=2, 3, ... ,n 考虑三对角线系数矩阵的线性方程组 f Ax = 这里()T n x x x x ... 2 1 = ,()T n f f f f ... 2 1 = 令y Lx =,则有 f Uy = 于是有 ()?????-== --u y a f y u f y i i i i i 1 1 11 1 * i=2, 3, ... ,n 再根据y Lx =可得到

数值分析实验报告

实验一、误差分析 一、实验目的 1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3.通过上机计算,了解舍入误差所引起的数值不稳定性。 二.实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三.实验内容 对20,,2,1,0 =n ,计算定积分 ?+=10 5dx x x y n n . 算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n , 取 ?≈-=+=1 00182322.05ln 6ln 51dx x y . 算法2:利用递推公式 n n y n y 51511-= - 1,,19,20 =n . 注意到 ???=≤+≤=10 10202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果 程序一: t=log(6)-log(5);

n=1; y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1; end y y =0.0884 y =0.0581 y =0.0431 y =0.0346 y =0.0271 y =0.0313 y =-0.0134 y =0.1920 y =-0.8487 y =4.3436 y =-21.6268 y =108.2176 y =-541.0110 y =2.7051e+003 y =-1.3526e+004 y =6.7628e+004 y =-3.3814e+005 y =1.6907e+006 y =-8.4535e+006 y =4.2267e+007 程序2: y=zeros(20,1); n=1; y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end 运行结果:y = 0.0884 0.0580 0.0431 0.0343 0.0285 0.0212 0.0188 0.0169

高斯消元法(完整)

高斯消元法解线性方程组 在工程技术和工程管理中有许多问题经常可以归结为线性方程组类型的数学模型,这些模型中方程和未知量个数常常有多个,而且方程个数与未知量个数也不一定相同。那么这样的线性方程组是否有解呢?如果有解,解是否唯一?若解不唯一,解的结构如何呢?这就是下面要讨论的问题。 一、线性方程组 设含有n 个未知量、有m 个方程式组成的方程组 a x a x a x b a x a x a x b a x a x a x b n n n n m m mn n m 11112211211222221122+++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (3.1) 其中系数a ij ,常数b j 都是已知数,x i 是未知量(也称为未知数)。当右端常数项b 1, b 2, …, b m 不全为0时,称方程组(3.1)为非齐次线性方程组;当b 1=b 2= … =b m = 0时,即 a x a x a x a x a x a x a x a x a x n n n n m m mn n 111122121122221122000 +++=+++=+++=???????ΛΛΛΛΛΛΛΛΛ (3.2) 称为齐次线性方程组。 由n 个数k 1, k 2, …, k n 组成的一个有序数组(k 1, k 2, …, k n ),如果将它们依次代入方程组(3.1)中的x 1, x 2, …, x n 后,(3.1)中的每个方程都变成恒等式,则称这个有序数组(k 1, k 2, …, k n )为方程组(3.1)的一个解。显然由x 1=0, x 2=0, …, x n =0组成的有序数组(0, 0, …, 0)是齐次线性方程组(3.2)的一个解,称之为齐次线性方程组(3.2)的零解,而当齐次线性方程组的未知量取值不全为零时,称之为非零解。 (利用矩阵来讨论线性方程组的解的情况或求线性方程组的解是很方便的。因此,我们先给出线性方程组的矩阵表示形式。) 非齐次线性方程组(3.1)的矩阵表示形式为: AX = B 其中 A = ????????????mn m m n n a a a a a a a a a ΛΛΛΛΛΛΛ212222111211,X = ????????????n x x x M 21, B = ????? ???????n b b b M 21 称A 为方程组(3.1)的系数矩阵,X 为未知矩阵,B 为常数矩阵。将系数矩阵A 和常数矩阵B 放在一起构成的矩阵

高斯消去法算法实验报告

算法设计与分析基础 实验报告 应用数学学院 二零一六年六月

实验高斯消去法算法 一、实验性质设计 二、实验学时14学时 三、实验目的 1、掌握高斯消去法的方法和原理。 2、掌握java语言实现该算法的一般流程。 四、实验内容 1、数组的输入。 2、高斯消去法的算法流程。 4、运行结果的输出。 五、实验报告 Ⅰ、算法原理 通过一系列的初等变换,交换方程组中两个方程的位置,把一个方程替换为它的非零倍,把一个方程替换为它和另一个方程倍数之间的和 或者差。 Ⅱ、Java算法代码: import java.util.Scanner; publicclass Gaosi { publicstaticvoid main(String[] args) { Gao ga = new Gao(); ga.set(); ga.yunSuan(); } } class Gao {

double A[][], B[], X[], ss, sum; int n, k, j, t; void set() { System.out.println("请输入方程组中方程的个数:"); Scanner sc = new Scanner(System.in); n = sc.nextInt(); A = newdouble[n][n]; B = newdouble[n]; X = newdouble[n]; System.out.println("请输入各方程的系数:"); Scanner sd = new Scanner(System.in); for (int i = 0; i

数值分析实验报告二求解线性方程组的直接方法

数值分析实验报告二求解线性方程组 的直接方法 姓名:刘学超日期:3/28 一实验目的 1.掌握求解线性方程组的高斯消元法及列主元素法; 2.掌握求解线性方程组的克劳特法; 3.掌握求解线性方程组的平方根法。 二实验内容 1.用高斯消元法求解方程组(精度要求为): 2.用克劳特法求解上述方程组(精度要求为)。 3.用平方根法求解上述方程组(精度要求为)。 4.用列主元素法求解方程组(精度要求为): 三实验步骤(算法)与结果 1用高斯消元法求解方程组(精度要求为): #include stdio.h #define n3 void gauss(double a[n][n],double b[n]) { double sum1=0,sum2=0,sum3=0,sum4=0; double l[n][n],z[n],x[n],u[n][n]; int i,j,k; for(i=0;i n;i++) l[i][i]=1; for(i=0;i n;i++) { for(j=0;j n;j++) { if(i=j)

{ for(k=0;k=i-2;k++) sum1+=l[i][k]*u[k][j]; u[i][j]=a[i][j]-sum1; } if(i j) {for(k=0;k=j-2;k++) sum2+=l[i][k]*u[k][j]; l[i][j]=(a[i][j]-sum2)/u[j][j]; } } for(k=0;k=i-2;k++) sum3+=l[i][k]*z[k]; z[i]=b[i]-sum3; for(i=n-1;i=0;i--) { for(k=i;k=n-1;k++) sum4+=u[i][k]*x[k]; x[i]=(z[i]-sum4)/u[i][i]; } } for(i=0;i n;i++) printf("%.6f",x[i]); } main() { double v[3][3]={{3,-1,2},{-1,2,2},{2,-2,4}};

消元法实验报告4

西京学院数学软件实验任务书

《数值分析》实验报告 实验一 一、实验目的与要求 1.掌握高斯列主元消去法解线性方程组的基本思路; 2.了解一些计算机的算法,会以某种汇编语言实现算法结果(本实验主要用matlab编程) 二、实验内容 1.编写用高斯列主元消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. (1) 123 123 123 221 1 221 x x x x x x x x x +-= ? ? ++= ? ?++= ? (2) 123 123 123 21 1 21 x x x x x x x x x -+= ? ? ++= ? ?+-= ? 2.列主元消元法及其matlab程序function [Ra,Rb,n,X]=GaussXQLineMain(A,b) %高斯列主元消元法,其中B为增广矩阵 B=[A b]; %读入b的长度 n=length(b); %读出矩阵a,b秩 Ra=rank(A); Rb=rank(B); if (Rb-Ra)>0 disp('因为Ra不等于Rb,所以此方程组无解.') return end if Ra==Rb if Ra==n disp('因为Ra=Rb=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 %找出列中最大的元素并指出他的位置

[Y,j]=max(abs(B(p:n,p))); C=B(p,:); B(p,:)= B(j+p-1,:); B(j+p-1,:)=C; for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else disp('因为Ra=Rb> clear; A=[1 2 -2;1 1 1;2 2 1 ]; b=[1;1;1]; [Ra,Rb,n,X] =GaussXQLineMain(A,b) 因为Ra=Rb=n,所以此方程组有唯一解. Ra = 3 Rb = 3 n = 3 X = -3.0000 3.0000 1.0000 方程组(2)过程

Gauss列主元消去法程序设计

《Gauss列主元消去法》实验报告 实验名称:Gauss列主元消去法程序设计???成绩:_________ 专业班级:数学与应用数学1202班?姓名:王晓阳???学号: 实?验?日?期:?2014?年11月10日 实验报告日期:?2014年?11月10日 一.实验目的 1. 学习Gauss消去法的基本思路和迭代步骤. 2. 学会运用matlab编写高斯消去法和列主元消去法程序,求解线性方程组. 3. 当绝对值较小时,采用高斯列主元消去法? 4. 培养编程与上机调试能力. 二、实验内容 用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax二b 化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解 1. 求解一般线性方程组的高斯消去法? (1) 消元过程: 设a kk k-0 ,第i个方程减去第k个方程的m ik Tk k倍,("k 1^1, n),得到 A k1x=b k1.

经过n-1次消元,可把方程组A1^b1化为上三角方程组A n x=b n. ⑵回代过程: 以解如下线性方程组为例测试结果 2. 列主元消去法 由高斯消去法可知,在消元过程中可能出现a kk k =0的情况,这是消去法将无法进行, 即使主元素a kk k-0但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A是菲奇异的. (1)消元过程: 对于k =1,2,川,n -1,进行如下步骤: 1) 按列选主元,记 2) 交换增广阵A的p,k两行的元素 A(k,j)=A(p,j) ( j=k,…,n +1) 3) 交换常数项b的p,k两行的元素。 b(k)=b(p) 4) 计算消元 (2) 回代过程 (3) 以解如下线性方程组为例测试结果 三、实验环境 MATLAB R2014a 四、实验步骤

数值分析实验报告总结

数值分析实验报告总结 随着电子计算机的普及与发展,科学计算已成为现代科 学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。 算法算法是指由基本算术运算及运算顺序的规定构成的完 整的解题步骤。算法可以使用框图、算法语言、数学语言、自然语言来进行描述。具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。 误差 计算机的计算结果通常是近似的,因此算法必有误差, 并且应能估计误差。误差是指近似值与真正值之差。绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。误差来源见表 第三章泛函分析泛函分析概要 泛函分析是研究“函数的函数”、函数空间和它们之间 变换的一门较新的数学分支,隶属分析数学。它以各种学科

如果 a 是相容范数,且任何满足 为具体背景,在集合的基础上,把客观世界中的研究对象抽 范数 范数,是具有“长度”概念的函数。在线性代数、泛函 分析及相关的数学领域,泛函是一个函数,其为矢量空间内 的所有矢量赋予非零的正长度或大小。这里以 Cn 空间为例, Rn 空间类似。最常用的范数就是 P-范数。那么 当P 取1, 2 ,s 的时候分别是以下几种最简单的情形: 其中2-范数就是通常意义下的距离。 对于这些范数有以下不等式: 1 < n1/2 另外,若p 和q 是赫德尔共轭指标,即 1/p+1/q=1 么有赫德尔不等式: II = ||xH*y| 当p=q=2时就是柯西-许瓦兹不等式 般来讲矩阵范数除了正定性,齐次性和三角不等式之 矩阵范数通常也称为相容范数。 象为元素和空间。女口:距离空间,赋范线性空间, 内积空间。 1-范数: 1= x1 + x2 +?+ xn 2-范数: x 2=1/2 8 -范数: 8 =max oo ,那 外,还规定其必须满足相容性: 所以

高斯消元法 主元消去法

实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. (1) 123 123 123 0.101 2.304 3.555 1.183 1.347 3.712 4.623 2.137 2.835 1.072 5.643 3.035 x x x x x x x x x ++= ? ? -++= ? ?-++= ? (2) 123 123 123 528 28321 361 x x x x x x x x x ++= ? ? +-= ? ?--= ? MATLAB计算源程序 1. 用高斯消元法解线性方程组b AX=的MATLAB程序 输入的量:系数矩阵A和常系数向量b; 输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n 和有关方程组解X及其解的信息. function [RA,RB,n,X]=gaus(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else disp('请注意:因为RA=RB

数值分析实验报告

学生实验报告实验课程名称 开课实验室 学院年级专业班 学生姓名学号 开课时间至学年学期

if(A(m,k)~=0) if(m~=k) A([k m],:)=A([m k],:); %换行 end A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去end end x=zeros(length(b),1); %回代求解 x(n)=A(n,c)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k); end y=x; format short;%设置为默认格式显示,显示5位 (2)建立MATLAB界面 利用MA TLAB的GUI建立如下界面求解线性方程组: 详见程序。 五、计算实例、数据、结果、分析 下面我们对以上的结果进行测试,求解:

? ? ? ? ? ? ? ? ? ? ? ? - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - - 7 2 5 10 13 9 14 4 4 3 2 1 13 12 4 3 3 10 2 4 3 2 1 x x x x 输入数据后点击和,得到如下结果: 更改以上数据进行测试,求解如下方程组: 1 2 3 4 43211 34321 23431 12341 x x x x ?? ???? ?? ???? ?? ???? = ?? ???? - ?? ???? - ???? ?? 得到如下结果:

计算方法实验三线性方程组解法列主元高斯消去法

实验报告 学院:电子信息工程 实验课程:计算方法 学生姓名: 学号: 专业班级:通信工程

实验三线性方程组解法 1 目的与要求 (1)进一步理解和掌握求线性方程组数值解的有关方法和理论。(2)完成利用列主元高斯消去法、雅可比迭代法及高斯-赛德尔迭代法求线性方程组数值解的程序设计。本次实验只需完成列主元高斯消去法的程序设计。 (3)比较三种算法的不同特点。 2 实验内容 通过编制程序,分别用列主元高斯消去法、雅可比迭代法及高斯-赛德尔迭代法计算如下方程组的解。 设初始值为要求满足前后两次迭代结果的差向量的 1 范数小于 3 实验原理 1)列主元高斯消去法 列主元高斯消去法就是在顺序高斯消去法的基础上,每步消元之前都要进行选主元操作,即在第k 步消元前,在第k 列的元素 中选取绝对值最大的元素,设为

,然后交换第 k 行和第 p 行,继续进行消去过程,直到获得上三角方程组,然后通过回代得到方程的根。 4 程序设计 (1)流程图 列主元高斯消去程序流程图 (2)程序代码 #include #include void main() { float a[3][4],x,s; int i,j,m,k; printf("please input coeffient martix array:\n");

for(i=0;i<3;i++) //输入增广矩阵// { for(j=0;j<4;j++) { scanf("%f",&a[i][j]); } } printf("\n"); printf("Output the input matrix"); printf("\n"); for(i=0;i<3;i++) //输出输入的矩阵// { for(j=0;j<4;j++) { printf("%8.4f",a[i][j]); } printf("\n"); } printf("\n"); for(k=0;k<=2;k++) //在不同列中选主元// { m=k;

高斯消元法讲解

#include "Stdio.h" #include "Conio.h" /*L是矩阵的行减1,从程序上看是最外层循环的次数 N 对应矩阵的行数,M对应矩阵的列数 可以通过改变L、N、M来控制矩的阶数 */ #define L 3 #define N 4 #define M 5 void gauss(double a[N][M],double x[N]) {int i,j,l,n,m,k=0; double temp[N]; /*第一个do-while是将增广矩阵消成上三角形式*/ do{n=0; for(l=k;l=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1]; for(m=0,i=k;i>=0;i--,m++) for(j=k;j=0) ; /*下一个for是解方程组*/ for(i=0;i

完整版高斯消元法MATLAB实现

《数值分析》实验报告 一、实验目的与要求 1.掌握高斯消去法的基本思路和迭代步骤; 2.培养编程与上机调试能力。 二、实验内容 1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 21x?8x?32x?2.137x?3.712x?4.623?1.347x???312312??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312 2.编写用列主元高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证. 5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2) 2x?8x?3x?212.137?4.6231.347?x?3.712x?x??321321??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312三.MATLAB计算源程序 AX?b MATLAB1. 程序用高斯消元法解线性方程组的b;输入的量:系数矩阵和常系数向量A RA,RB, n方程组中未知量的个数的秩输出的量:系数矩阵和增广矩阵BA.及其解的信息和有关方程组解X gaus(A,b) function [RA,RB,n,X]=B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('RA~=RB.') ,所以此方程组无解请注意:因为return end if RA==RB if RA==n disp('RA=RB=n.') ,所以此方程组有唯一解请注意:因为X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);

数值分析实验报告

实验五 解线性方程组的直接方法 实验5.1 (主元的选取与算法的稳定性) 问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。 实验要求: (1)取矩阵?? ? ?? ?? ?????????=????????????????=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。取n=10计算矩阵的 条件数。让程序自动选取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。 (4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。 思考题一:(Vadermonde 矩阵)设 ?? ??????????????????????=? ? ? ?????????????=∑∑∑∑====n i i n n i i n i i n i i n n n n n n n x x x x b x x x x x x x x x x x x A 0020 10022222121102001111 ,, 其中,n k k x k ,,1,0,1.01 =+=, (1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化? (2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b (3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。 (4)你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插值法的原因吗? 相关MATLAB 函数提示: zeros(m,n) 生成m 行,n 列的零矩阵 ones(m,n) 生成m 行,n 列的元素全为1的矩阵 eye(n) 生成n 阶单位矩阵 rand(m,n) 生成m 行,n 列(0,1)上均匀分布的随机矩阵 diag(x) 返回由向量x 的元素构成的对角矩阵 tril(A) 提取矩阵A 的下三角部分生成下三角矩阵

数值分析实验报告3

实验报告 实验项目名称数值积分与数值微分实验室数学实验室 所属课程名称数值逼近 实验类型算法设计 实验日期 班级 学号 姓名 成绩

实验概述: 【实验目的及要求】 本次实验的目的是熟练《数值分析》第四章“数值积分与数值微分”的相关内容,掌握复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式以及高斯-勒让德公式。 本次试验要求编写复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式以及高斯-勒让德公式的程序编码,并在MATLAB软件中去实现。 【实验原理】 《数值分析》第四章“数值积分与数值微分”的相关内容,包括:复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式以及高斯-勒让德公式的相应算法和相关性质。 【实验环境】(使用的软硬件) 软件: MATLAB 2012a 硬件: 电脑型号:联想 Lenovo 昭阳E46A笔记本电脑 操作系统:Windows 8 专业版 处理器:Intel(R)Core(TM)i3 CPU M 350 @2.27GHz 2.27GHz 实验内容: 【实验方案设计】 第一步,将书上关于复合梯形求积公式、复合辛普森求积公式、龙贝格求积公式以及高斯-勒让德公式的内容转化成程序语言,用MATLAB实现;第二步,分别用以上求积公式的程序编码求解不同的问题。 【实验过程】(实验步骤、记录、数据、分析) 实验的主要步骤是:首先分析问题,根据分析设计MATLAB程序,利用程序算出问题答案,分析所得答案结果,再得出最后结论。 实验:用不同数值方法计算积分 (1) 取不同的步长h.分别用复合梯形及复合辛普森求积计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善? (2) 用龙贝格求积计算完成问题(1)。 (3)用勒让德多项式确定零点,再代入计算高斯公式,使其精度达到10-4 (1)在MATLAB的Editor中建立一个M-文件,输入程序代码,实现复合梯形求积公式的程序代码如下:

数值分析实验报告(实验五实验六)

《数值分析》 实验报告 姓名: 学号: 专业: 年级:

实验五 一、实验名称 方程求根 二、实验目的与要求: 通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点; 比较二者的计算速度和计算精度。 三、实验内容: 通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 。 (一)二分法 算法:给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。 (1)令c=(a+b)/2 (2)如果(c-a)<或,则输出,结束;否则执行(3) (3)如果,则令;否则则令,重复(1),(2),(3)。 (二)牛顿迭代法:给定初值 , 为根的容许误差,为 的容许 误差,N 为迭代次数的容许值。 (1)如果 =0或迭代次数大于N ,则算法失败,结束;否则执行 (2)。 x 0εη)(x f )('x f

(2)计算 = - (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。 (4)令 = ,转向(1)。 四、实验题目: 1、用二分法求方程 f(x)=x^3+4*x*x-10在区间[1,1.5]上的根,要求求出具有3位有效数的近似根。 2、 用牛顿法求方程x^3-3x-1=0在x=2附近的根 五、程序设计 1、二分法 #include #include double f(double x) { return x*x*x+4*x*x-10; } int main() { double a = 0, b = 0, e = 0.0005; printf("输入 a b: "); scanf("%lf%lf", &a, &b); if (fabs(f(a)) <= e) { printf("结果为: %0.3f/n", a); } else if (fabs(f(b)) <= e) { printf("结果为: %0.3f/n", b); } else if (f(a)*f(b) > 0) { printf("f(%lf)*f(%lf) > 0 不是 <= 0 !/n", a, b); } else {while (fabs(b-a) > e) {double c = (a+b)/2.0; x 1x 0) ()('0x x o f f x x 01-ε)(1x f ηx 1x 0x 1

数值分析期末实验报告

数值计算方法论文 论文名称:数值计算方法期末总结 学号: 姓名: 完成时间: 摘要:数值计算方法是数学的一个重要分支,以用计算机求解数学问题的理论和方法为研究对象。本文是我对本学期数值分析这门课程中所学到的内容以及所作的工作的总结。通过一学期的学习,我深入学习了线性方程组的解法,非线

性方程的求根方法,矩阵特征值与特征向量的计算,函数的插值方法,最佳平方逼近,数值积分与数值微分,常微分方程初值问题的数值解法。通过陶老师课堂上的讲解和课下的上机训练,对以上各个章节的算法有了更深刻的体会。 最后做了程序的演示界面,使得程序看起来清晰明了,便于查看与修改。通过本学期的学习。 关键词:数值计算方法、演示界面 第一章前言 随着电子计算机的普及与发展,科学计算已成为现代科学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。 第二章基本概念 2.1算法 算法是指由基本算术运算及运算顺序的规定构成的完整的解题步骤。算法可以使用框图、算法语言、数学语言、自然语言来进行描述。具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。 2.2 误差 计算机的计算结果通常是近似的,因此算法必有误差,并且应能估计误差。误差是指近似值与真正值之差。绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。误差来源见表2.1 表2.1 第三章泛函分析 2.1泛函分析概要

泛函分析(Functional Analysis)是研究“函数的函数”、函数空间和它们之间变换(映射)的一门较新的数学分支,隶属分析数学。它以各种学科为具体背景,在集合的基础上,把客观世界中的研究对象抽象为元素和空间。如:距离空间,赋范线性空间,内积空间。 2.2 范数 范数,是具有“长度”概念的函数。在线性代数、泛函分析及相关的数学领域,泛函是一个函数,其为矢量空间内的所有矢量赋予非零的正长度或大小。 这里以Cn空间为例,Rn空间类似。最常用的范数就是p-范数。若 ,那么 当p取1,2,∞的时候分别是以下几种最简单的情形: 1-范数:║x║1=│x1│+│x2│+…+│xn│ 2-范数:║x║2=(│x1│2+│x2│2+…+│xn│2)1/2 ∞-范数:║x║∞=max(│x1│,│x2│,…,│xn│) 其中2-范数就是通常意义下的距离。 对于这些范数有以下不等式:║x║∞≤ ║x║2≤ ║x║1≤ n1/2║x║2≤ n║x║∞ 另外,若p和q是赫德尔(Hölder)共轭指标,即1/p+1/q=1,那么有赫德尔不等式: || = ||xH*y| ≤ ║x║p║y║q 当p=q=2时就是柯西-许瓦兹(Cauchy-Schwarz)不等式 一般来讲矩阵范数除了正定性,齐次性和三角不等式之外,还规定其必须满足相容性:║XY║≤║X║║Y║。所以矩阵范数通常也称为相容范数。 如果║·║α是相容范数,且任何满足║·║β≤║·║α的范数║·║β都不是相容范数,那么║·║α称为极小范数。对于n阶实方阵(或复方阵)全体上的任何一个范数║·║,总存在唯一的实数k>0,使得k║·║是极小范数。 注:如果不考虑相容性,那么矩阵范数和向量范数就没有区别,因为mxn矩阵全体和mn维向量空间同构。引入相容性主要是为了保持矩阵作为线性算子的特征,这一点和算子范数的相容性一致,并且可以得到Mincowski定理以外的信息。 第四章算法总结 本学期讲解过的主要算法列举如下:线性方程组的解法(高斯消元法,列主消元法,Doolittle分解法,追赶法,LDL'分解法,Jacobi分解法,Seidel迭

相关文档
最新文档