当前位置:文档之家› 雅克比迭代法……

雅克比迭代法……

雅克比迭代法……
雅克比迭代法……

实验课程名称:数值分析

流程图:

②Gauss-Seidel迭代法

#include

int main()

{

double x[3] = {0, 0, 0};

double a[3][3] = {6,2,-1,1,4,-2,-3,1,4}; double y[3] = {-3,2,4}; 开始

阶数n,系数矩

阵,初始向量

for(i=0;i

i=j

Y

N

total += a[i][j] *

x[j]

e = e +

ABS(x[j],

结束

double d[3][3],g[3];

int round = 5, i,j;

for (i=0; i<3; ++i)

{

g[i] = y[i] / a[i][i];

for (j=0; j<3; ++j)

{

d[i][j] = i==j ? 0 : -a[i][j]/a[i][i]; }

}

while (round--) {

for (i=0; i<3; ++i)

{

x[i] = g[i];

for (j=0; j<3; ++j)

{

x[i] += d[i][j] * x[j];

}

printf("%lf", x[i]);

}

printf("\n");

}

}

结果:

流程图:

{ a[i]=(float *)malloc(n*sizeof(float)); } return a;

}

float matrix_category(float* x,int n)

{ int i; float temp=0; for(i=0;i

{ temp=temp+fabs(x[i]); }

return temp;

}

结果:

流程图:

雅可比迭代法

2013-2014(1)专业课程实践论文 题目:雅可比迭代法

一、算法理论 设有方程组),...,2,1(1 n i b x a i j n j ij ==∑= 记作,b Ax = (1) A 为非奇异阵且),,...,2,1(0n i a ij =≠将A 分裂为U L D A --=,其中 D =????????????????nn a a a 22 11,L =-??? ????? ???? ????-00001,21323121n n n n a a a a a a U =-?? ? ?? ? ? ? ????????-0000,122311312n n n n a a a a a a 将式(1)第)....2,1(n i i =个方程用ii a 去除再移项,得到等价方程组 (),,...,2,111n i x a b a x n i j j j ij i ii i =??? ? ? ?? -=∑≠= (2) 简记作 ,0f x B x += 其中 ().,111 0b D f U L D A D I B ---=+=-= 对方程组(2)应用迭代法,得到解式(1)的雅可比迭代公式 () () ()()()()()????????? ?? ? ??- ==∑≠=+,1,...,11002010n i j i k j ij i ii k i t n x a b a x x x x x , 初始向量 (3)

其中()()()()()T k n k k k x x x x ,,...,21=为第k 次迭代向量。设()k x 已经算出,由式(3)可计算下一次迭代向量()(),,...,2,1,...;2,1,01n i k x k ==+ 显然迭代公式(3)的矩阵形式为 ()()()()???+=+,010f x B x x k k ,初始向量 其中0B 称为雅可比方法迭代矩阵。

MATLAB样例之雅克比迭代法

要求: 下面分别使用雅克比迭代法和高斯-赛德尔迭代法求一个方程组的近似解用的线性方程组是按实验要求给的: 7*x1+x2+2*x3=10 x1+8*x2+2*x3=8 2*x1+2*x2+9*x3=6 雅克比迭代法的matlab代码:(老师写的) A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(any(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); while 1 x1=B*x0+f K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end 高斯-赛德尔迭代法matlab代码:(自己改的)

A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(all(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); x00=x0; while 1 x11=B*x0+f; x00(1,1)=x11(1,1); x12=B*x00+f; x00(2,1)=x12(2,1); x13=B*x00+f; x00(3,1)=x13(3,1); x1=x00 K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end

数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组

作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = Jacobi迭代法: 流程图 开 始 判断b中的最大值 有没有比误差大 给x赋初值 进行迭代 求出x,弱到100次还没到,警告不收 结束

程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e for i=1:n d=A(i,i); if abs(d)100 warning('不收敛'); end end x=x0;

程序结果(1)

(2)

Gauss-Seidel迭代法: 程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3]; A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵A不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n); D=zeros(n); G=zeros(n);%G=-inv(D+L)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if ij U(i,j)=A(i,j); end end end for i=1:n%初始化D D(i,i)=A(i,i); end G=-inv(D+L)*U;%初始化G d=(D+L)\b;%初始化d %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)

雅克比迭代法和高斯-赛德尔法解线性方程组(C++)

作业:① 分别用J 法和G-S 法求解下列方程,并讨论结果。 123122*********x x x -?????? ??? ?= ??? ? ??? ??????? #include using namespace std; //J 法解线性方程 int main(){ int m,n,i,j,times=0,mtimes; double s,sum,max; cout<<"请输入系数矩阵行数m 、列数n :"<>m>>n; if(m>A[i][j]; cout<<"请输入常数向量B :"<>B[i]; cout<<"请输入最大允许误差s:"<>s; cout<<"请输入最大迭代次数:"<>mtimes; cout<<"请输入一零级向量X:"<>X[i]; T[i]=X[i];//T[]存放上一次迭代结果 }

雅可比迭代实验报告

雅可比迭代法求解线性方程组的实验报告 一、实验题目 分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组: 使得误差不超过 0.00001。 二、实验引言 1.实验目的 ①掌握用迭代法求解线性方程组的基本思想和步骤,熟悉计算机fortran 语言; ②了解雅可比迭代法在求解方程组过程中的优缺点。 2.实验意义 雅克比迭代法就是众多迭代法中比较早且较简单的一种,求解方便实用。 三、算法设计 1.雅可比迭代法原理: 设有线性方程组Ax=b 满足0≠ii a , 将方程组变形为: x=Bx+f, 则雅可比 (Jacobi)迭代法是指f Bx X k k +=+)1(,即 由初始解逐步迭代即可得到方程组的解。 算法步骤如下: ?????=+--=-+-=--2.453.82102.7210321 321321x x x x x x x x x

步骤1.给定初始值)0()0(2)0(1,,,n x x x ?,精度e,最大容许迭代次数M ,令k=1。 步骤2.对i=1,2,…,n 依次计算 )0()1()0()1(11| |) n ,2,1,0(/)(i i i i i ii ii j n i j j ij j x x x x e i a a x a b x →-=?=≠-=∑≠=, 步骤3.求出}{max 1i n i e e ≤≤=,若ε

四、程序设计program jacobi implicit none integer::i,j integer::k save k real,parameter::e=0.001 integer,parameter::n=3 real::x(n),y(n),b(n)

雅克比迭代法

雅克比迭代方法的使用 一.雅克比迭代法的目的及意义 无论差值公式与求积公式的建立,还是常微分方程的差分格式的构造,其基本思想是将其转化为代数问题来处理,特别是归结为线性方程组。在科学计算与工程计算中,线性方程组会经常遇到。因此,线性方程组的解法在数值分析中占有极其重要的地位。而线性方程组的迭代法,其基本思想是将联立方程组的求解,归结为重复计算一组彼此独立的线性表达式,这就是问题得到了简化。 二.算法描述 1.输入数据。 2.对所计算的一系列X 进行赋初值,即x(1)=x(2)=x(36)=0. 3.通过雅克比迭代公式) ,(/))(*),()(()(1i i a j x j i a i b i y n j i i ∑≠=-=计算y(1),y(2),y(3). 4.判断(x(i)-y(i))的绝对值中最大值是否小于精度系数,若小于的话,直接输出结果;否侧,返回上述3过程,直到(x(i)-y(i))的绝对值中最大值小于精度系数。 流程图如下所示: . ≠ = 三.程序设计 开始 输入数据 ),(/))(*),()(()(1i i a j x j i a i b i y n j i i ∑≠=-=e i y i x n i <-≤≤)()(max 1 K=n 输出迭代失败标志 输出y1,y2,y 3 K=k+1 X(i)=y(i)结束 K=1

program main implicit none integer::i,j,k,l=30 ,m=3, n=3 real::e=0.0001 real::y(3),x(3)=(/0,0,0/) real::b(3)=(/7.2,8.3,4.2/) real::a(3,3)=(/10,-1,-1,-1,10,-1,-2,-2,5/) do k=0,l write(*,*) k,x(1),x(2),x(3) do i=1,n do j=1,m if((i-j)/=0) then y(i)=y(i)+(-a(i,j)/a(i,i))*x(j) end if end do y(i)=y(i)+b(i)/a(i,i) end do if (max(abs(y(1)-x(1)),abs(y(2)-x(2)),abs(y(3)-x(3)))

雅克比迭代法

雅克比迭代法 上机题目: 用雅克比迭代法解线性方程组 上机程序: #include #include main() { double A[3][3]={{5,2,1},{-1,4,2},{2,-3,10}},b[3]={-12,20,3}; // 输入系数矩阵A 和右端向量b double n=3, tol=1.0e-3,x[3]={-3,1,1}; // 输入方程大小n,误差限tol,和初始向量x double y[3]; // 记录每次迭代产生的新的近似解 double maxerr; // maxerr 记录相邻两个数值解想x 与y 的差的绝对值的最大的那个分量。 int k,i,j; printf("此线性方程组的增广矩阵如下:\n "); // 下面循环是输出增广矩阵(A, b) for (k=0;k

printf("误差限是%f \n",tol); // 输出误差限 printf(" Jacobi迭代解序列X^(k) max|x^(k+1)-x^(k)| \n "); printf("x^%d = ",k=0); for(i=0;itol); }

(整理)雅克比高斯赛德尔迭代法

第八节 雅可比迭代法与高斯—塞德尔迭代法 一 雅可比迭代法 设线性方程组 b Ax = (1) 的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 22 11均不为零,令 ()nn a ,...,a ,a diag D 2211= 并将A 分解成 ()D D A A +-= (2) 从而(1)可写成 ()b x A D Dx +-= 令 11f x B x += 其中b D f ,A D I B 1 111 --=-=. (3) 以 1B 为迭代矩阵的迭代法(公式) ()()111f x B x k k +=+ (4) 称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,(4)为 ? ?? [] ,... ,,k ,n ,...,i x a b a x n i j j ) k (j j i i ii )k (i 21021111==∑-=≠=+ (5) 其中 ()()()() ()T n x ,...x ,x x 002010=为初始向量. 由此看出,雅可比迭代法公式简单,每迭代一次只需计算一次矩阵和向量的乘法.在电算时需 要两组存储单元,以存放() k x 及() 1+k x . 例1 例1 用雅可比迭代法求解下列方程组 ??? ??=+--=-+-=--2 45382102 7210321321321.x x x .x x x .x x x 解 将方程组按雅可比方法写成 ?? ?? ???++=++=++=8402020830201072 020******* 2321.x .x .x .x .x .x .x .x .x 取初始值 ()()()() ()()T T ,,,x ,x ,x x 0000302010==按迭代公式

雅可比迭代法与矩阵的特征值

实验五 矩阵的lu分解法,雅可比迭代法 班级: 学号: 姓名:

实验五??矩阵的L U分解法,雅可比迭代 一、目的与要求: ? 熟悉求解线性方程组的有关理论和方法; ? 会编制列主元消去法、LU 分解法、雅可比及高斯—塞德尔迭代法德程序; ? 通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。 二、实验内容: ? 会编制列主元消去法、L U 分解法、雅可比及高斯—塞德尔迭代法德程序,进一步了解 各种方法的优缺点。 三、程序与实例 ? 列主元高斯消去法 算法:将方程用增广矩阵[A∣b ]=(ij a )1n (n )+?表示 1) 消元过程 对k=1,2,…,n —1 ①选主元,找{}n ,,1k ,k i k +∈使得 k ,i k a =ik a n i k max ≤≤ ②如果0a k ,i k =,则矩阵A 奇异,程序结束;否则执行③. ③如果k i k ≠,则交换第k 行与第k i 行对应元素位置, j i k j k a a ? j=k,┅,n+1 ④消元,对i=k+1, ┅,n 计算 kk ik ik a a l /= 对j=l+1, ┅,n+1计算 kj ik ij ij a l a a -= 2) 回代过程 ①若0=nn a ,则矩阵A奇异,程序结束;否则执行②。 ②nn n n n a a x /1,+=;对i=n —1, ┅,2,1,计算 ii n i j j ij n i i a x a a x /11,??? ? ??-=∑+=+ 程序与实例 程序设计如下:

#include <iostream> #include <cmath> using namespace std; void disp(double** p,int row,intcol){ for(int i=0;ip[i][j]; } } int findMax(double** p,int start,int end){ int max=start; for(int i=start;i<end;i++){ if(abs(p[i][start])>abs(p[max][start])) max=i; } return max; } void swapRow(double** p,int one,int other,int col){ double temp=0; for(int i=0;i〈col;i++){ temp=p[one][i]; p[one][i]=p[other][i]; p[other][i]=temp; } }

matlab Jacobi迭代法Gauss-seidel和SOR迭代

1.Jacobi迭代法 例1 用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4) 其中A=[8 -1 1;2 10 -1;1 1 -5];b=[1 ;4; 3]。 解:编写jacobi迭代法的函数文件,保存为jacobi.m function [x,k]=jacobi(A,b,x0,eps,N) % 求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数 % 输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ――――――― end if norm(x-x0,inf)

雅克比迭代法

雅克比迭代法的应用 一. 题目:用雅克比迭代法求解下列方程组 ?? ???=+--=-+-=--2.453.82102.7210321321321x x x x x x x x x 二.引言: 用雅克比迭代法对方程组进行求解是,突出算法简单的优点,因此编程比较简单,但是应用此法求解方程组是也有很大的局限性,如它要求方程组的系数矩阵必须是有某种特殊的性质,以保证迭代的收敛性。 三.算法: 1. 首先在程序组输入方程组所对应的系数矩阵,以及精度要求。 2. 通过循环语句的嵌套以及条件判断语句实现迭代过程 3 窗体显示迭代的详细结果的输出位置以及最终的迭代结果。 程序流程图:

四.程序设计: Program zuoye2 implicit none integer::i,j,k,l=30,m=3,n=3 real::e=0.0000001 real::y(3),x(3)=(/0,0,0/) real::b(3)=(/7.2,8.3,4.2/) real::a(3,3)=(/10,-1,-1,-1,10,-1,-2,-2,5/) do k=0,l write(*,*)k,x(1),x(2),x(3) do i=1,n do j=1,m if((i-j)/=0) y(i)=y(i)+(-a(i,j)/a(i,i))*x(j) end do y(i)=y(i)+b(i)/a(i,i) end do if(max(abs(y(1)-x(1)),abs(y(2)-x(2)),abs(y(3)-x(3)))

Jacobi迭代法_Gauss-Seidel迭代法

Matlab线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭代法)实验报告2008年11月09日星期日 12:49 1.熟悉Jacobi迭代法,并编写Matlab程序matlab程序 按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m) function [x, k, index]=Jacobi(A, b, ep, it_max) %求解线性方程组的Jacobi迭代法,其中 % A ---方程组的系数矩阵 % b ---方程组的右端项 % ep ---精度要求。省缺为1e-5 % it_max ---最大迭代次数,省缺为100 % x ---方程组的解 % k ---迭代次数 % index --- index=1表示迭代收敛到指定要求; % index=0表示迭代失败 if nargin <4 it_max=100; end if nargin <3 ep=1e-5; end n=length(A); k=0; x=zeros(n,1); y=zeros(n,1); index=1; while 1 for i=1:n y(i)=b(i); for j=1:n if j~=i y(i)=y(i)-A(i,j)*x(j); end end if abs(A(i,i))<1e-10 | k==it_max index=0; return; end y(i)=y(i)/A(i,i); end if norm(y-x,inf)

实验二 用雅克比迭代法解方程组

数值计算方法实验 实验2 用雅克比迭代法解方程组 一、实验目的 1、学习使用雅克比迭代法求解方程组,加深对雅克比迭 代法的认识。 2、在误差允许的范围内,在循环次数较少的情况下,求 解方程组的稳定解。 3、进一步加深对Matlab的学习。 二、实验题目 用雅克比迭代法解方程组: 三、实验原理 设有n元线性方程组AX=b, 其中系数矩阵A的对角元素0(i=1,2,3,…,n) 从方程组的第i个方程中可以解出 ,可得到以下等价方程 组:

() , () , ………………………………………………, . 记D为A的对角线矩阵,L为A的下三角阵,U为A的上三角阵,即 则有: X=-(L+U)X+b; 令 B=-(L+U), d=b; 则有:X=BX+d; 其中B成为迭代矩阵 上式即为雅克比迭代法的迭代公式。 取定一个以后,便可得, 再往下迭代得到:, 如此反复迭代,一般的有:, k=0,1,2,…, 由此便得到一个向量序列{}.若,则就

是方程组的解。反之:若不存在,即{}不收敛, 就不能用雅克比迭代法计算。 可将上述迭代过程改为如下形式: , (i=1,2,3,…,n) 四、 实验内容 按照上述迭代法可得到如下的算法: 设方程组为:AX=b, 其中系数矩阵A 的对角元素 0(i=1,2,3,…,n ) max_iter 为迭代数容许的最大值,eps 为容许误差: 1. 取初始向量()(0)(0) (0) 12 ,,...,n x x x x =,令k=0; 2. 对i=1,2,…,n,计算: 111n k k i i ij j j ii j i x b a x a +=≠?? ? =- ? ??? ∑. 3. 如果11 n k k i i i eps x x +=-<∑,则输出1 k i x +,结束。否则,执行下一步; 4. 如果max_iter>=50,则该迭代法不收敛,终止程序;否则转2.

Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代 法算法比较

目录 1 引言 (1) 1.1Jacobi迭代法 (2) 1.2Gauss-Seidel迭代法 (2) 1.3逐次超松弛(SOR)迭代法 (3) 2算法分析 (3) 3 结论 (5) 4 附录程序 (5) 参考文献 (8)

Jacobi 迭代法与Gauss-Seidel 迭代法比较 1 引言 解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。 迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。因此迭代法存在收敛性与精度控制的问题。 迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。设n 元线性微分方程组 b Ax = (1) 的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为: b x P N =-)( b Px Nx += b N Px N x 11--+= 可得到迭代方法的一般公式: d Gx x k k +=+) ) 1(( (2) 其中:P N G 1 -=,b N d 1 -=,对任取一向量) 0(x 作为方程组的初始近似解,按递推公式产 生一个向量序列) 1(x ,) 2(x ,...,) k x (,...,当k 足够大时,此序列就可以作为线性方程组的 近似解。 一阶定常迭代法收敛的充分必要条件是: 迭代矩阵G 的谱半径小于1,即1<) (G ρ;又因为对于任何矩阵范数恒有≤)(G ρ‖G ‖,故又可得到收敛的一个充分条件为:‖G ‖< 1。

Jacobi迭代法求解线性方程组实验报告

仿真平台与工具应用实践 Jacobi迭代法求解线性方程组 实验报告 院系: ( 专业班级: 姓名: 学号: 指导老师:

一、 实验目的 熟悉Jacobi 迭代法原理; ] 学习使用Jacobi 迭代法求解线性方程组; 编程实现该方法; 二、 实验内容 应用Jacobi 迭代法解如下线性方程组: ?? ???=++--=+-=+-1552218474321321321x x x x x x x x x ,要求计算精度为710- \ 三、 实验过程 (1)、算法理论 Jacobi 迭代格式的引出是依据迭代法的基本思想:构造一个向量系列(){}n X ,使其收敛至某个极限*X ,则*X 就是要求的方程组的准确解。 Jacobi 迭代 将方程组: ???????=+++=+++=+++n n nn n n n n n n b x a x a x a b x a x a x a b x a x a x a 22112222212111212111 )1(

在假设0≠ii a ,改写成()??? ????++++=++++=++++=--n n n n n n n n n n n g x b x b x b x g x b x b x b x g x b x b x b x 112211223231212113132121 )2( 如果引用系数矩阵 ??????????=nn n n a a a a A 1111,???? ??????=0011 n n b b B 及向量??????????=n x x X 1,??????????=n b b b 1,??????????=n g g g 1, 方程组(1)和(2)分别可写为:b AX =及g BX X +=,这样就得到了jacobi 迭代格式01g BX X k k +=+用jacobi 迭代解方程组b AX =时,就可任意取初值0X 带入迭代可知式g BX X k k +=+1,然后求k k X ∞ →lim 。但是,n 比较大的时候,写方程组)1(和)2(是很麻烦的,如果直接由A ,b 能直接得到B ,g 就是矩阵与向量的运算了,那么如何得到B ,g 呢实际上,如果引进非奇异对角矩阵 ()0≠ii a ???? ??????=nn a a D 00011 - 将A 分解成:,D D A A +-=要求b AX =的解,实质上就有,)(DX X D A AX +-=而D 是非奇异的,所以1-D 存在,,)(X A D AX DX -+=从而有,11b D AX D X --+=我们在这里不妨令,1A D I B --=b D g 1-=就得到jacobi 迭代格式:g BX X k k +=+1

雅克比迭代法……

实验课程名称:数值分析 第一部分:实验分析与设计

float e,total; printf ("Please in put the dime nsion:”); scanf ("%d", &n); printf ("Please in put the Coefficie nt Matrix:"); for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf ("%f", &a[i][j]); printf ("Please in put the Vector:"); for (i = 0; i < n; i++) scanf (”%f", &b[i]); printf ("Please in put the in itial vector:"); for (i = 0; i < n; i++) scanf ("%f", &x[i]); do { for (i = 0; i < n; i++) { total = 0.0f; for (j = 0; j < n; j++) { if (i != j) total += a[i][j] * x[j]; } y[i] = (b[i] - total) / a[i][i]; } e=0.0f; for (j = 0; j < n; j++) e = e + ABS(x[j], y[j]); prin tf("%f\n",e); for (i = 0; i < n; i++) x[i] = y[i]; } while (e > 0.0001); for (i = 0; i < n; i++) printf ("x%d=%f\t", i, x[i]); printf ("\n"); return 0; } float ABS(float x,float y) {

雅克比迭代法、高斯-赛德尔迭代法

昆明理工大学(计算机算法)实验报告 实验名称: 实验时间:2009 年 6 月 3 日 专业:电信071 姓名:李春华 学号:200711102118成绩: 一、实验目的 1.通过实验进一步掌握高斯消去法的基本思想; 2.通过上机实验进一步掌握高斯消去法的计算步骤,并能灵活运 用; 3.通过对高斯消去法的调试练习,进一步体会他的特点; 4.通过上机调试运行,逐步培养解决实际问题的编程能力。 二、实习要求 1.熟悉Turbo C的编译环境; 2.实习前复习雅可比迭代法、高斯—塞得儿迭代法的计算步骤。 三、实习设备 1.硬件设备:单机或网络环境下的微型计算机一台; 2.软件设备:DOS 3.3以上炒作系统,Turbo C2.0编译器。

四、实习内容 雅可比迭代法与高斯—塞得儿迭代法 用雅可比雅可比迭代法与高斯—塞得儿迭代法求解线性方程组Ax=b: 要求:(1)写出程序的运行结果。 (2)写出迭代次数。 程序如下: 1、雅可比迭代法 #include #include #define n 3 #define MAX_N 100 #define eps 1e-6 int yacobi(fl oat a[n][n],fl oat b[n],fl oat x[n]) { fl oat d,s,max; fl oat y[n]; int i,j,k,flag; k=0; for(i=0;i

x[i]=0.0; while(1) { max=0.0; k++; for(i=0;i

相关主题
文本预览
相关文档 最新文档