搜档网
当前位置:搜档网 › Matlab程序Gauss列主元消去法

Matlab程序Gauss列主元消去法

Matlab程序Gauss列主元消去法
Matlab程序Gauss列主元消去法

.Gauss 列主元消去法求解线性方程组

12346

212425027,2085113270x x x x -?????? ? ? ?- ?

? ?= ? ? ?-- ? ? ????

??? 迭代法计算停止的条件为:6)()1(3

110max

-+≤≤<-k j k j j x x .

采用用用Gauss 列主元消去法时,Matlab 计算程序为:

clear

clc

A=[2 2 1 2;4 1 3 -1;-4 -2 0 1;2 3 2 3]; B=[1;2;1;0];

n=length(B);

X=zeros(n,1);

c=zeros(1,n);

d1=0;

for i=1:n-1

max=abs(A(i,i));

m=i;

for j=i+1:n

if max

max=abs(A(j,i));

m=j;

end

end

if(m~=i)

for k=i:n

c(k)=A(i,k);

A(i,k)=A(m,k);

A(m,k)=c(k);

end

d1=B(i);

B(i)=B(m);

B(m)=d1;

end

for k=i+1:n

for j=i+1:n

A(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i); end

B(k)=B(k)-B(i)*A(k,i)/A(i,i);

A(k,i)=0;

end

end

X(n)=B(n)/A(n,n);

for i=n-1:-1:1

sum=0;

for j=i+1:n

sum=sum+A(i,j)*X(j);

end

X(i)=(B(i)-sum)/A(i,i);

end

X

计算结果为:X =(1.5417;-2.7500;0.0833;1.6667)

牛顿插值法原理及应用

牛顿插值法 插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。如果这特定函数是多项式,就称它为插值多项式。当插值节点增减时全部插值基函数均要随之变化,这在实际计算中很不方便。为了克服这一缺点,提出了牛顿插值。牛顿插值通过求各阶差商,递推得到的一个公式: f(x)=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0 )...(x-xn-1)+Rn(x)。 插值函数 插值函数的概念及相关性质[1] 定义:设连续函数y-f(x) 在区间[a,b]上有定义,已知在n+1个互异的点 x0,x1,…xn上取值分别为y0,y1,…yn (设a≤ x1≤x2……≤xn≤b)。若在函数类中存在以简单函数P(x) ,使得P(xi)=yi,则称P(x) 为f(x)的插值函数. 称x1,x2,…xn 为插值节点,称[a,b]为插值区间。 定理:n次代数插值问题的解存在且唯一。

牛顿插值法C程序 程序框图#include void main() { float x[11],y[11][11],xx,temp,newton; int i,j,n; printf("Newton插值:\n请输入要运算的值:x="); scanf("%f",&xx); printf("请输入插值的次数(n<11):n="); scanf("%d",&n); printf("请输入%d组值:\n",n+1); for(i=0;i

列主元高斯消去法和列主元三角分解法解线性方程

计算方法实验报告1 【课题名称】 用列主元高斯消去法和列主元三角分解法解线性方程 【目的和意义】 高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。 用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解 用高斯消去法解线性方程组b Ax =(其中A ∈Rn ×n )的计算量为:乘除法运算步骤为 32(1)(1)(21)(1)(1)262233n n n n n n n n n n n MD n ----+= +++=+-,加减运算步骤为 (1)(21)(1)(1)(1)(25) 6226 n n n n n n n n n n AS -----+= ++= 。相比之下,传统的克莱姆 法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19 510?次乘法,而用高斯消去法只需要3060次乘除法。 在高斯消去法运算的过程中,如果出现abs(A(i,i))等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。 2、列主元三角分解法 高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU ,并求解Ly=b 的过程。回带过程就是求解上三角方程组Ux=y 。所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法 采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度 【计算公式】 1、 列主元高斯消去法 设有线性方程组Ax=b ,其中设A 为非奇异矩阵。方程组的增广矩阵为 第1步(k=1):首先在A 的第一列中选取绝对值最大的元素 1l a ,作为第一步的主元素: 111211212222112[,]n n n l n nn n a a a a b a a a b a a a b ?? ???? ?? =?????? ?? ????a b

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

实验一 列主元消去法 【实验内容】 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();

matlab实现数值分析报告插值及积分

Matlab实现数值分析插值及积分 摘要: 数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。学习数值分析这门课程可以让我们学到很多的数学建模方法。 分别运用matlab数学软件编程来解决插值问题和数值积分问题。题目中的要求是计算差值和积分,对于问题一,可以分别利用朗格朗日插值公式,牛顿插值公式,埃特金逐次线性插值公式来进行编程求解,具体matlab代码见正文。编程求解出来的结果为:=+。 其中Aitken插值计算的结果图如下: 对于问题二,可以分别利用复化梯形公式,复化的辛卜生公式,复化的柯特斯公式编写程序来进行求解,具体matlab代码见正文。编程求解出来的结果为: 0.6932 其中复化梯形公式计算的结果图如下:

问题重述 问题一:已知列表函数 表格 1 分别用拉格朗日,牛顿,埃特金插值方法计算。 问题二:用复化的梯形公式,复化的辛卜生公式,复化的柯特斯公式计算积分,使精度小于5。 问题解决 问题一:插值方法 对于问题一,用三种差值方法:拉格朗日,牛顿,埃特金差值方法来解决。 一、拉格朗日插值法: 拉格朗日插值多项式如下: 首先构造1+n 个插值节点n x x x ,,,10 上的n 插值基函数,对任一点i x 所对应的插值基函数 )(x l i ,由于在所有),,1,1,,1,0(n i i j x j +-=取零值,因此)(x l i 有因子 )())(()(110n i i x x x x x x x x ----+- 。又因)(x l i 是一个次数不超过n 的多项式,所以只 可能相差一个常数因子,固)(x l i 可表示成: )())(()()(110n i i i x x x x x x x x A x l ----=+- 利用1)(=i i x l 得:

利用高斯列主元消去法求如下线性方程组的解

%利用高斯列主元消去法求如下线性方程组的解 clear all; A=[3 -2 1 -1;4 0 -1 2;0 0 2 3;0 0 0 5]; b=[8;-3;11;15]; function [X,XA] = UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 N=size(A); n=N(1); index=0; for i=1:(n-1) me=max(abs(A(1:n,i)));%选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb;%交换主行 for j=(i+1):n if(a(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m;

end; X=UpTriangleFun(A,b); XA=A; ----------------------------------------------------------------------------------------------------------------------------- % 函数定义 function [X,XA]= UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 [N,M]=size(A); %N=sizes(A); n=N; index=0; for i=1:(n-1) me=max(abs(A(1:n,i))); %选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb; %交换主行 for j=(i+1):n if(A(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m; end; end;

高斯列主元消元法解线性方程组

高斯列主元消元法解线性方程组 一、题目:用Gauss 列主元消去法解线性方程组Ax b =,其中, A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803?? ? ? ? ? ? ? ? ??? 0.230 -52.322 54.000 240.236 29.304 -117.818b ?? ? ? ?= ? ? ? ? ??? T X=(0.907099 -1.961798 3.293738 -4.500708 3.029344 -5.255068) 二、原理及步骤分析 设 n n ij R a A ?∈=][)1(,n n R b b b b ∈=],,,[)1()2(2)1(1 。若约化主元素 ),,2,1(0)(n k a k kk =≠,则通过高斯消元法将方程b AX =约化为三角形方程组求解。 如果在消元过程中发现某个约化主元0) (=k kk a , 则第K 次消元就无法进行。此外,即 使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。 为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。相应过程为: (1)选主元:在子块的第一列中选择一个元) (k k i k a 使) (max k ik n i k k k i a a k ≤≤= 并将第k 行元与第k i 行元互换。 (2)消元计算:对k=1,2,……n-1依次计算 ()()()?? ?? ?????++=-=++=-=++==++n k k i b m b b n k k j i a m a a n k k i a a m k k ik k i k i k kj ik k ij k ij k kk k ik k ik ,,2,1,,2,1,,,2,1) ()()1() ()()1()() ()( (3)回代求解

列主元消去法

实验一 列主元消去法 【实验内容】1. 掌握列主元消去法的基本思路和迭代步骤 2. 并能够利用列主元的高斯消去法解任意阶数的线性方程组; 【实验方法与步骤】列主元消去法编写程序 1.列主元消去法基本思路 设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 2.列主元高斯消去法算法描述 将方程组用增广矩阵[]()(1)|ij n n B A b a ?+==表示。 步骤1:消元过程,对1,2,,1k n =- (1) 选主元,找{},1,,k i k k n ∈+ 使得 ,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 =+ ; (4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算 .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 =- ,计算 ,11/n i i n ij j ii j i x a a x a +=+??=- ??? ∑ 习题3第一题程序如下

#include #include #define N 3 int I; float max_value(float a[N][N+1],int n,int k) { float max; int i; max=a[k][k]; for(i=k+1;i

Matlab中Gauss全主元消元法求解线性方程组的程序

Matlab中Gauss全主元消元法求解线性方程组的程序 function [x,qa]=gaussq(a,b) %输出想x为解,qa为全主元变换后的a矩阵d=[a b]; RA=rank(a);RD=rank(a);L=length(b);n=size(a);pos=1:n(1); if RA~=RD fprintf('无解') else if RA~=L fprintf('有无数多个解') else fprintf('有唯一解') for q=1:n big=max(max(abs(a(q:n,q:n)))); for r=q:n for t=q:n if big==abs(a(r,t)) zhuh=r; zhul=t; end end end p=a(q,:); %换主行 a(q,:)=a(zhuh,:); a(zhuh,:)=p; bb=b(q); b(q)=b(zhuh); b(zhuh)=bb; p=a(:,q); %换主列

a(:,q)=a(:,zhul); a(:,zhul)=p; p=pos(q); %记录由于换主列而造成的解的位置的变化 pos(q)=pos(zhul); pos(zhul)=p; end c=[a b]; for j=1:L-1 %化为上三角阵 for i=(j+1):L m=c(i,j)/c(j,j); c(i,:)=c(i,:)-c(j,:)*m; end end x(L,1)=c(L,L+1)/c(L,L); for k=L-1:-1:1 %求解x x(k,1)=(c(k,L+1)-c(k,k+1:L)*x(k+1:L))/c(k,k); end y=[1:n(1)]'; %交换被列调换时打乱的解的位置 for w=1:n for v=1:n if (pos(v)==w) y(w)=x(v); end end end x=y; end

实验三高斯列主元消去法

实验三 高斯列主元消去法 一、实验目的: 1、掌握高斯消去法的基本思路和迭代步骤。 2、 培养编程与上机调试能力。 二、高斯列主元消去法的基本思路与计算步骤: 设有方程组Ax b =,设A 是可逆矩阵。高斯消去法的基本思想就是僵局真的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 列主元高斯消去法计算步骤: 将方程组用增广矩阵[]()(1)ij n n B A b a ?+== 表示。 步骤1:消元过程,对1,2,,1k n =- (1) 选主元,找{},1,,k i k k n ∈+ 使得 ,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 =+ 。 (4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算 . 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 =- ,计算,11/n i i n ij j ii j i x a a x a +=+??=- ???∑ 三:程序流程图

四:程序清单: function X=uptrbk(A,b) % A是一个n阶矩阵。 % b是一个n维向量。 % X是线性方程组AX=b的解。 [N N]=size(A); X=zeros(1,N+1); Aug=[A b]; for p=1:N-1 [Y,j]=max(abs(Aug(p:N,p)));%返回向量的最大值存入y,最大值的序号存入j。 C=Aug(p,:); Aug(p,:)=Aug(j+p-1,:); Aug(j+p-1,:)=C; if Aug(p,p)==0 'A是奇异阵,方程无惟一解' break end for k=p+1:N m=Aug(k,p)/Aug(p,p); Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1); end end % 这里用到程序函数backsub来进行回代。 X=backsub(Aug(1:N,1:N),Aug(1:N,N+1)); function X=backsub(A,b) % A是一个n阶上三角非奇异阵。 % b是一个n维向量。 % X是线性方程组AX=b的解。 n=length(b);%取b向量的个数。 X=zeros(n,1); X(n)=b(n)/A(n,n); for k=n-1:-1:1 X(k)=(b(k)-A(k,k+1:n)*X(k+1:n))/A(k,k); End 五、测试数据与结果: 测试数据:(第8章习题三第2题)求解线性方程组: 解:建立一个主程序gs.m clc clear A=[1,2,3;5,4,10;3,-0.1,1]; b=[1;0;2];

matlab牛顿插值法例题与程序

题目一:多项式插值 某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton )逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10)。 二、数学原理 假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式: )() )(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -??-+??+-++=αααα (1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =) ((i=0,1,2……n )确定。 根据均差的定义,把x 看成[a,b]上的一点,可得 f(x)= f (0x )+f[10x x ,](0x -x ) f[x, 0x ]= f[10x x ,]+f[x,10x x ,] (1x -x ) …… f[x, 0x ,…x 1-n ]= f[x, 0x ,…x n ]+ f[x, 0x ,…x n ](x-x n ) 综合以上式子,把后一式代入前一式,可得到: f(x)= f[0x ]+f[10x x ,](0x -x )+ f[210x x x ,,](0x -x )(1x -x )+ …+ f[x, 0x ,…x n ](0x -x )…(x-x 1-n )+ f[x, 0x ,…x n ,x ]) (x 1n +ω= N n (x )+) (x n R 其中

N n (x )= f[0x ]+f[10x x ,](0x -x )+ f[210x x x ,,](0x -x )(1x -x )+ …+ f[x, 0x ,…x n ](0x -x )…(x-x 1-n ) (2) )(x n R = f(x)- N n (x )= f[x, 0x , (x) n ,x ]) (x 1n +ω (3) ) (x 1n +ω=(0x -x )…(x-x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。一般有 f k =α[k 10x x x ??,] (k=0,1,2,……,n ) (4) 把(4)代入(1)得到满足插值条件N )() (i i n x f x =(i=0,1,2,……n )的n 次Newton 插值多项式 N n (x )=f (0x )+f[10x x ,](1x -x )+f[210x x x ,,](1x -x )(2x -x )+……+f[n 10x x x ??,](1x -x )(2x -x )…(1-n x -x ). 其中插值余项为: ) ()! () ()()()(x 1n f x N -x f x R 1n 1 n n +++==ωξ ξ介于k 10x x x ??,之间。 三、程序设计 function [y,A,C,L]=newdscg(X,Y,x,M) % y 为对应x 的值,A 为差商表,C 为多项式系数,L 为多项式 % X 为给定节点,Y 为节点值,x 为待求节点 n=length(X); m=length(x); % n 为X 的长度 for t=1:m

高斯法和列主元高斯消去法解线性方程组(MATLAB版)

clear;clc; %Gauss消去法解线性方程组 A=[3 -5 6 4 -2 -3 8; 1 1 -9 15 1 -9 2; 2 -1 7 5 -1 6 11; -1 1 3 2 7 -1 -2; 4 3 1 -7 2 1 1; 2 9 -8 11 -1 -4 -1; 7 2 -1 2 7 -1 9];%系数矩阵 b=[11 2 29 9 5 8 25]';%n维向量 y=inv(A)*b %matlab的计算结果 n=length(b);%方程个数n x=zeros(n,1);%未知向量 %-------------消去----------- for k=1:n-1 % if A(k,k)==0; % error('Error'); % end for i=k+1:n % A(i,k)=A(i,k)/A(k,k); Aik=A(i,k)/A(k,k) for j=k:n A(i,j)=A(i,j)-Aik*A(k,j); end A b(i)=b(i)-Aik*b(k) end end %-------------回代----------- x(n)=b(n)/A(n,n) for k=n-1:-1:1 S=b(k); for j=k+1:n S=S-A(k,j)*x(j); end x(k)=S/A(k,k) end x %程序的计算结果 error=abs(x-ones(n,1))%误差 clear;clc;

%列主元Gauss校区法解线性方程组 A=[3 -5 6 4 -2 -3 8; 1 1 -9 15 1 -9 2; 2 -1 7 5 -1 6 11; -1 1 3 2 7 -1 -2; 4 3 1 -7 2 1 1; 2 9 -8 11 -1 -4 -1; 7 2 -1 2 7 -1 9];%系数矩阵 b=[11 2 29 9 5 8 25]';%n维向量 y=inv(A)*b %matlab的计算结果 n=length(b);%方程个数n x=zeros(n,1);%未知向量 %-------------消去----------- for k=1:n-1 Auk=A(k:n,k); [m,u]=max(abs(Auk)); u=u+k-1 %u为最大元所在的列 %------交换最大的行和当前行的值------- for j=k:n temp=A(u,j);A(u,j)=A(k,j);A(k,j)=temp; end temp=b(k);b(k)=b(u);b(u)=temp; % if A(k,k)==0; % error('Error'); % end for i=k+1:n % A(i,k)=A(i,k)/A(k,k); Aik=A(i,k)/A(k,k) for j=k:n A(i,j)=A(i,j)-Aik*A(k,j); end A b(i)=b(i)-Aik*b(k) end end %-------------回代----------- x(n)=b(n)/A(n,n) for k=n-1:-1:1 S=b(k); for j=k+1:n S=S-A(k,j)*x(j);

牛顿插值MATLAB算法

MATLAB程序设计期中作业 ——编程实现牛顿插值 成员:刘川(P091712797)签名_____ 汤意(P091712817)签名_____ 王功贺(P091712799)签名_____ 班级:2009信息与计算科学 学院:数学与计算机科学学院 日期:2012年05月02日

牛顿插值的算法描述及程序实现 一:问题说明 在我们的实际应用中,通常需要解决这样的问题,通过一些已知的点及其对应的值,去估算另外一些点的值,这些数据之间近似服从一定的规律,于是,这就引入了插值法的思想。 插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。 二:算法分析 newton 插值多项式的表达式如下: 010011()()()()()n n n N x c c x x c x x x x x x -=+-+???+--???- 其中每一项的系数c i 的表达式如下: 12011010 [,,,][,,,] [,,,]i i i i i f x x x f x x x c f x x x x x -???-???=???= - 即为f (x)在点01,,,i x x x ???处的i 阶差商,([]()i i f x f x =,1,2,,i n = ),由差商01[,,,]i f x x x ???的性质可知: () 010 1 [,,,]()i i i j j k j k k j f x x x f x x x ==≠???=-∑∏ 牛顿插值的程序实现方法: 第一步:计算[][][][]001012012,,,,,,,n f x f x x f x x x f x x x x 、、、 、。 第二步:计算牛顿插值多项式中01[,,,]i f x x x ???011()()()i x x x x x x ---???-,1,2,,i n = ,得到n 个多项式。

列主元高斯消去法的实现

《数值分析课程设计》 报告 专业: 学号: 学生姓名: 指导教师:

一、题目 列主元guess消去法求方程的解 二、理论 列主元高斯消去法是在高斯消去法的基础上而得到的一种比较快速合理的解线性方程组的方法。它的基本思想是每次在所在列对角线及以下元素中选择绝对值最大的元素作为主元进行消元计算。使用列主元消去法相对于高斯消去法更能减少舍入误差的影响。 三、方法、算法与程序设计 求解Ax=b 第一步:写出增广矩阵[A| b]; 第二步:判断增广矩阵的秩r[A|b]与A的秩r[A]的关系: 若r[A|b]= r[A],线性方程组有唯一解; 若r[A|b]>r[A],线性方程组没有解; 若r[A|b]

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 四、实验步骤

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

牛顿插值法的MATLAB综合程序

6.3.5 牛顿插值法的MATLAB 综合程序 求牛顿插值多项式、差商、插值及其误差估计的MATLAB 主程序 function [y,R,A,C,L]=newdscg(X,Y,x,M) n=length(X); m=length(x); for t=1:m z=x(t); A=zeros(n,n);A(:,1)=Y'; s=0.0; p=1.0; q1=1.0; c1=1.0; for j=2:n for i=j:n A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1)); end q1=abs(q1*(z-X(j-1)));c1=c1*j; end C=A(n,n);q1=abs(q1*(z-X(n))); for k=(n-1):-1:1 C=conv(C,poly(X(k))); d=length(C);C(d)=C(d)+A(k,k); end y(k)= polyval(C, z); end R=M*q1/c1;L(k,:)=poly2sym(C); 例6.3.6 给出节点数据00.27)00.4(=-f ,00.1)00.0(=f ,00.2)00.1(=f ,00.17)00.2(=f ,作三阶牛顿插值多项式,计算)345.2(-f ,并估计其误差. 解 首先将名为newdscg.m 的程序保存为M 文件,然后在MATLAB 工作窗口输入程序 >> syms M,X=[-4,0,1,2]; Y =[27,1,2,17]; x=-2.345; [y,R,A,C,P]=newdscg(X,Y,x,M) 运行后输出插值y )345.2(-≈f 及其误差限公式R ,三阶牛顿插值多项式P 及其系数向量C ,差商的矩阵A 如下 y = 22.3211 R = 65133/562949953421312*M (即R =2.3503*M ) A= 27.0000 0 0 0 1.0000 -6.5000 0 0 2.0000 1.0000 1.5000 0 17.0000 15.0000 7.0000 0.9167 C = 0.9167 4.2500 -4.1667 1.0000 P = 11/12*x^3+17/4*x^2-25/6*x+1

高斯消元法 主元消去法

实验内容 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

均差牛顿插值MATLAB,M文件

%均差牛顿插值 function [ f y f0 ] = newton1( X,Y,x0 ) if nargin<3 error('Requires at least three input arguments.'); end if length(X)==length(Y) n=length(X); else error('length must equal') end syms x s=Y(1); l=1.0; y=zeros(n); y(1:n,1)=Y'; for i=2:n for j=2:i y(i,j)=(y(i,j-1)-y(j-1,j-1))/(X(i)-X(j-1)); if i==j l=l*(x-X(i-1)); s=s+y(i,i)*l; end end end f=simple(s); f0=subs(f,x0); function [ f f0 y] = newton2( X,Y,x0 ) if nargin<3 error('Requires at least three input arguments.'); end if length(X)==length(Y) n=length(X); else error('length must equal') end syms x s=Y(1); l=1.0; y=zeros(n) y(1:n,1)=Y'; for i=2:n for j=2:i y(i,j)=(y(i,j-1)-y(i-1,j-1))/(X(i)-X(i-j+1)); if i==j l=l*(x-X(i-1)); s=s+y(i,i)*l; end end end f=simple(s); f0=subs(f,x0);

相关主题