MATLAB课程设计可视化(GUI)的线性方程组的Jacobi迭代解法。
线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭
线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭按照算法(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; endif nargin <3 ep=1e-5; endn=length(A); k=0;x=zeros(n,1); y=zeros(n,1); index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10 | k==it_maxindex=0; return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<epbreak;endx=y; k=k+1;end用Jacobi迭代法求方程组的解。
输入:A=[4 3 0;3 3 -1;0 -1 4];b=[24;30;-24];[x, k, index]=Jacobi(A, b, 1e-5, 100)输出:x =-2.999811.9987-3.0001k =100index =2. 熟悉Gauss-Seidel迭代法,并编写Matlab程序function[v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp) %Gauss-Seidel迭代法求解线性方程组%A-系数矩阵 b-右端向量 x0-初始迭代点 errorBound-近似精度maxSp-最大迭代次数%v-近似解 sN-迭代次数 vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;for i=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);while error>=errorBound & step<maxspx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;用Gauss-Seidel迭代法求解上题的线性方程组,取。
解线性代数方程组迭代法的MATLAB GUI设计[文献综述]
毕业论文文献综述信息与计算科学解线性代数方程组迭代法的MATLAB GUI设计一、前言部分MATLAB是用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
图形用户界面(Graphical User Interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象构成的一个用户界面。
用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
GUI是向别人提供应用程序,进行某种技术、方法的演示,制作一个供反复使用且操作简单的专用工具的最好的选择之一[1]。
我们似乎都碰到过这样的问题,为了求得某个线性方程组的解而花费大量的时间和计算量,还容易出错,而应用迭代法求解线性代数方程组的解则可以解决这个问题。
一个收敛的迭代法不仅具有程序设计简单,适于自动计算的优点,而且较直接法而言用更少的计算量就可以获得满意的解。
因此迭代法是求解线性代数方程组,尤其是求解具有大型系数矩阵的线性方程组的主要方法之一。
而MATLAB的计算能力和MATLAB GUI的图形显示功能就能给研究特别是形象表示线性方程组的解带来了很大的方便。
二、主题部分2.1 MATLAB软件介绍2.1.1 MATLAB软件概况MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。
1984年由Little、Moler、Steve Bangert合作成立了的MathWorks公司正式把MATLAB推向市场。
实验三 迭代法解线性方程组
实验三 迭代法解线性方程组实验目的学会用Jacobi 迭代法、Gauss-Seidel 迭代法和超松驰迭代法求线性方程组解。
学会对迭代法做收敛性分析,研究求方程组解的最优迭代方法。
学会用共轭梯度法求线性方程组的解,研究共轭梯度法的计算效率。
实验要求按照题目要求完成实验内容。
写出相应的Matlab 程序。
给出实验结果。
对实验结果进行分析讨论。
写出相应的实验报告。
实验步骤1、研究Jacobi 迭代法求解线性方程组的方法和相应的收敛性。
(1)用Jacobi 迭代法(Jacobi.m )求解线性方程组⎪⎪⎩⎪⎪⎨⎧-=+--=-+-=--71912263532311321321321x x x x x x x x x (4.31) 取初始点()()Tx 0,0,00=,精度要求为105-=ε。
请给出满足精度要求的迭代次数和相应的计算结果。
function [x,k]=jc(a,b,x0,ep,max)n=length(a);k=0;if nargin<5max=500;endif nargin<4ep=1e-5;endif nargin<3x0=zeros(n,1);y=zeros(n,1);endx=x0;x0=x+2*ep;while norm(x0-x,inf)>ep&&k<maxk=k+1;x0=x;for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-a(i,j)*x0(j);endendif abs(a(i,i))<1e-10||k==maxwarning('a(i,i) ̫С');return ;endy(i)=y(i)/a(i,i);endx=y;endend>> a=[11 -3 -2;-1 5 -3;-2 -12 19];>> b=[3 6 -7]';>> [x,k]=jc(a,b)x =0.9999859531466561.9999778590069020.999978180649185k = 33研究相应迭代矩阵的谱半径和Jacobi 迭代的渐近收敛速度。
matlab解线性方程组的迭代法
i 1, 2,
,n
得到
1 1 ( x1 , x2 ,
, xi1,
, x1 n)
3 第二次迭代:
Bi 2 xi Aii
得到
2 1
j 1, j i
n
Aij Aii
2 i
x1 j
i 1, 2,
,n
(x , x ,
2 2
,x ,
n
,x )
2 n
4 同样做法,得到第k+1次迭代:
x
k 1 i
i 1, 2,
,n
MATLAB程序设计
function [x,n]=richason(A,b,x0,eps,M) if(nargin == 3) eps = 1.0e-6; while(norm(x-x1)>eps) x1=x; x=(I-A)*x1+b; n = n + 1; if(n>=M) disp('Warning: 迭代次数太多,现 在退出!'); return; end end
M = 200;
elseif(nargin == 4) M = 200;
End I =eye(size(A)); x1=x0; x=(I-A)*x0+b; n=1; 。。。。。。
例:求解方程组
1.0170 x1 0.0092 x2 0.0095 x3 1 0.0092 x1 0.9903 x2 0.0136 x3 0,[0, 0, 0] 0.0095 x 0.0136 x 0.9898 x 1 1 2 3
au 2 v 2 0 u v 1
Matlab非线性方程组求解
格式
运用雅可比迭代和高斯塞德尔迭代法求的解matlab
运用雅可比迭代和高斯塞德尔迭代法求的解matlab雅可比迭代和高斯塞德尔迭代法是解线性方程组的常用方法,它们都是迭代法的一种。
在Matlab中,可以通过编写程序实现这两种迭代法来求解线性方程组。
首先,我们需要了解什么是线性方程组。
线性方程组是一组等式,其中每个等式都是由一些未知量的系数和一个已知量组成的,这些未知量和已知量的关系是线性的。
例如,下面的方程组就是一个线性方程组:2x + 3y = 85x - 2y = 1要求解这个方程组,我们可以使用矩阵的形式表示它:|2 3| |x| = |8||5 -2| |y| |1|接下来,我们可以用雅可比迭代法和高斯塞德尔迭代法来求解这个线性方程组。
雅可比迭代法是一种简单的迭代法,它的基本思想是将方程组的每个未知量视为新的未知量,然后用当前的未知量估计下一个未知量的值。
具体实现方法是将原方程组改写为下面的形式:x = D^(-1)(b - (L+U)x)其中,D是原方程组的对角线部分,L是原方程组的下三角部分(除去对角线),U是原方程组的上三角部分(除去对角线)。
这个迭代公式表示,每次使用上一次迭代得到的未知量来估计下一个未知量的值,直到达到一定的精度为止。
在Matlab中,可以使用以下代码来实现雅可比迭代法求解线性方程组:function [x,k]=jacobi(A,b,x0,maxk,tol)n=length(b); x=x0; k=0;while(k<maxk)k=k+1;for i=1:nx(i)=(b(i)-A(i,1:i-1)*x0(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);enderr=norm(x-x0);if err<tol; return; endx0=x;endend其中,A是系数矩阵,b是常数向量,x0是初始解向量,maxk是最大迭代次数,tol是迭代精度。
高斯塞德尔迭代法和雅可比迭代法类似,只是在推导迭代公式时使用了更多的新的未知量来计算下一个未知量的值。
MATLAB块雅克比迭代法求线性方程组Ax=b的解块高斯-赛德尔迭代法求线性方程组Ax=b的解
MATLAB块雅克比迭代法求线性方程组Ax=b的解块高斯-赛德尔迭代法求线性方程组Ax=b的解function [x,N]= BJ(A,b,x0,d,eps,M) %块雅克比迭代法求线性方程组Ax=b的解if nargin==4eps= 1.0e-6;M = 10000;elseif nargin<4errorreturnelseif nargin ==5M = 10000; %参数的默认值endNS = size(A);n = NS(1,1);if(sum(d) ~= n)disp('分块错误!');return;endbnum = length(d);bs = ones(bnum,1);for i=1:(bnum-1)bs(i+1,1)=sum(d(1:i))+1;%获得对角线上每个分块矩阵元素索引的起始值endDB = zeros(n,n);for i=1:bnumendb = bs(i,1)+d(i,1)-1;DB(bs(i,1):endb,bs(i,1):endb)=A(bs(i,1):endb,bs(i,1):endb );%求A的对角分块矩阵endfor i=1:bnumendb = bs(i,1)+d(i,1)-1;invDB(bs(i,1):endb,bs(i,1):endb)=inv(DB(bs(i,1):endb,bs(i ,1): endb));%求A的对角分块矩阵的逆矩阵endN = 0;tol = 1;while tol>=epsx = invDB*(DB-A)*x0+invDB*b; %由于LB+DB=DB-AN = N+1; %迭代步数tol = norm(x-x0); %前后两步迭代结果的误差x0 = x;if(N>=M)disp('Warning: 迭代次数太多,可能不收敛!');return;endendfunction [x,N]= BGS(A,b,x0,d,eps,M) %块高斯-赛德尔迭代法求线性方程组Ax=b的解if nargin==4eps= 1.0e-6;M = 10000;elseif nargin<4errorreturnelseif nargin ==5M = 10000;endNS = size(A);n = NS(1,1);bnum = length(d);bs = ones(bnum,1);for i=1:(bnum-1)bs(i+1,1)=sum(d(1:i))+1;%获得对角线上每个分块矩阵元素索引的起始值endDB = zeros(n,n);for i=1:bnumendb = bs(i,1)+d(i,1)-1;DB(bs(i,1):endb,bs(i,1):endb)=A(bs(i,1):endb,bs(i,1):endb ); %求A的对角分块矩阵endLB = -tril(A-DB); %求A的下三角分块阵UB = -triu(A-DB); %求A的上三角分块阵N = 0;tol = 1;while tol>=epsinvDL = inv(DB-LB);x = invDL*UB*x0+invDL*b; %块迭代公式N = N+1;tol = norm(x-x0);x0 = x;if(N>=M)disp('Warning: 迭代次数太多,可能不收敛!');return;endend类别:matlab 编程 | | 添加到搜藏 | 分享到i贴吧 | 浏览(168) | 评论 (0)上一篇:MATLAB 共轭梯度法求线性方程组A...。
matlab 解线性方程组的迭代法
迭代过程本质上就是计算极限的过程,一般不能 得到精确解。
迭代法的优点是程序简单,适合于大型方程组求 解,但缺点是要判断迭代是否收敛和收敛速度问题 。 1. 雅可比(Jacobi(1804-1851))迭代法(简单迭代法) 2. 赛得尔 (Seidel (1821 - 1896))迭代法
2、简单迭代法
while(norm(x-x1)>eps) x1=x; x=(I-A)*x1+b; n = n + 1; if(n>=M) disp('Warning: 迭代次数太多,现
在退出!'); return;
end end
例:求解方程组
clear all; A =[ 1.0170 -0.0092 0.0095;
遗传算法是一种基于自然选择的用于求解有约束和无约束 最优问题的方法。遗传算法反复修改包含若干个体的种群 。遗传算法在每一步中,随机从当前种群中选择若干个个 体作为父辈,并用它们产生下一代子辈。在若干代之后, 种群就朝着最优解“进化”。我们可以利用遗传算法去解决 各种最优化问题,包括目标函数是不连续、不可微、随机 或者高度非线性的问题。
若不满足收敛条件,适当调整方程次序或作一 定的线性组合,就可能满足收敛条件。
5、MATLAB的线性方程组求解函数 2
格式
solve('eqn1','eqn2',...,'eqnN','var1,var2,...,varN')
matlab中jacobi迭代法
一、简介Matlab中jacobi迭代法是一种用于求解线性方程组的迭代方法,适用于系数矩阵为对称、正定矩阵的情况。
该迭代方法通过将系数矩阵分解为对角矩阵、上三角矩阵和下三角矩阵的形式,然后通过迭代计算得到方程组的解。
在Matlab中,可以利用矩阵运算和迭代循环来实现jacobi迭代法。
二、 jacobi迭代法原理1. 基本思想jacobi迭代法的基本思想是将系数矩阵分解为对角矩阵D、上三角矩阵U和下三角矩阵L的形式,即A=D+L+U,其中D为系数矩阵A 的对角线元素组成的对角矩阵,L为系数矩阵A的下三角部分,U为系数矩阵A的上三角部分。
令x为方程组的解向量,b为方程组的右端向量,则方程组可表示为Ax=b。
根据方程组的性质,可将方程组表示为(D+L+U)x=b,然后利用迭代的方式逐步逼近方程组的解。
2. 迭代公式假设迭代到第k次,方程组可表示为(D+L+U)x=b,将其转化为迭代形式x(k+1)=(D+L)^(-1)(b-Ux(k)),利用迭代公式可以逐步计算出方程组的解。
3. 收敛条件对于jacobi迭代法,收敛条件为系数矩阵A为对角占优矩阵或正定矩阵。
如果满足这一条件,迭代计算会逐步收敛于方程组的解。
三、 Matlab中jacobi迭代法实现在Matlab中,可以利用矩阵运算和迭代循环来实现jacobi迭代法。
具体步骤如下:1. 对系数矩阵进行分解将系数矩阵A分解为对角矩阵D、上三角矩阵U和下三角矩阵L的形式。
2. 初始化迭代变量初始化迭代的初始值x0、迭代次数k、逐次逼近解向量x(k+1)。
3. 迭代计算利用迭代公式x(k+1)=(D+L)^(-1)(b-Ux(k))来逐步计算出方程组的解。
4. 判断收敛条件在迭代计算过程中,需要实时判断迭代计算是否满足收敛条件,如果满足则停止迭代计算,得到方程组的解。
四、实例分析假设有如下方程组:2x1 + x2 + 4x3 = 103x1 + 4x2 - x3 = 10x1 + 2x2 + 3x3 = 0可以利用jacobi迭代法来求解该方程组,在Matlab中可以通过编程实现迭代计算过程。
麦夸特迭代法matlab
麦夸特迭代法matlab麦夸特迭代法(Jacobi iterative method)是一种常用的线性方程组求解方法,其求解思路相对较为简单,易于理解与实现。
本文将从麦夸特迭代法的基本思路、求解步骤以及matlab代码实现三个方面进行介绍,以期为读者对该方法的掌握提供一定的参考。
麦夸特迭代法的基本思路是通过不断迭代,逐渐逼近线性方程组的解。
该方法的核心在于将线性方程组分解为对角矩阵和其余部分两部分,其中对角矩阵由原矩阵的对角线元素组成,其余部分则是原矩阵除对角线元素外的所有元素。
迭代时,首先将对角线元素提取出来,其余部分作为误差向量,然后通过不断迭代,将误差向量不断减小,最终得到方程组的近似解。
麦夸特迭代法的基本流程如下:1. 将线性方程组Ax=b分解为对角矩阵D和其余部分R,即A=D-R;2. 将方程组改为x=D^{-1}(Rx+b);3. 取一个初值x_0,代入上一式中,计算出一个近似解x_1=D^{-1}(Rx_0+b);4. 将x_1代入上一式中,继续迭代,直到满足一定的精度要求。
需要注意的是,麦夸特迭代法的收敛性与矩阵的特征值有关。
当原矩阵A是对称正定矩阵时,麦夸特迭代法一定收敛;当原矩阵A是实对称矩阵时,麦夸特迭代法在某些条件下收敛。
因此,在实际应用中需要对矩阵的特征值进行判断。
接下来,我们将介绍麦夸特迭代法的matlab代码实现。
假设我们需要解如下的线性方程组:2x_1+3x_2+4x_3=5;6x_1+7x_2+8x_3=9;10x_1+11x_2+12x_3=13;首先,我们可以将其转化为矩阵形式:A=[2 3 4;6 7 8;10 11 12];b=[5;9;13];接下来,我们便可以按照麦夸特迭代法的基本流程进行实现。
具体代码如下:D=diag(diag(A)); % 提取对角线元素R=A-D; % 提取其余部分x=zeros(size(b)); % 初值for i=1:100 % 迭代100次x=(D\R)*x+D\b; % 计算if norm(A*x-b)<1e-8 % 精度要求break;endend其中,norm函数用于计算向量的模长,1e-8表示精度要求。
Jacobi迭代法 Gauss-Seidel迭代法
Matlab线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭代法)实验报告2008年11月09日星期日12:491.熟悉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; endif nargin <3 ep=1e-5; endn=length(A); k=0;x=zeros(n,1); y=zeros(n,1); index=1;while 1for i=1:ny(i)=b(i);for j=1:nif j~=iy(i)=y(i)-A(i,j)*x(j);endendif abs(A(i,i))<1e-10 | k==it_maxindex=0; return;endy(i)=y(i)/A(i,i);endif norm(y-x,inf)<epbreak;endx=y; k=k+1;end用Jacobi迭代法求方程组的解。
输入:A=[4 3 0;3 3 -1;0 -1 4];b=[24;30;-24];[x, k, index]=Jacobi(A, b, 1e-5, 100)输出:x =-2.999811.9987-3.0001k =100index =2.熟悉Gauss-Seidel迭代法,并编写Matlab程序function [v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp)%Gauss-Seidel迭代法求解线性方程组%A-系数矩阵b-右端向量x0-初始迭代点errorBound-近似精度maxSp-最大迭代次数%v-近似解sN-迭代次数vChain-迭代过程的所有值step=0;error=inf;s=size(A);D=zeros(s(1));vChain=zeros(15,3);%最多能记录15次迭代次数k=1;fx0=x0;for i=1:s(1)D(i,i)=A(i,i);end;L=-tril(A,-1);U=-triu(A,1);while error>=errorBound & step<maxSpx0=inv(D)*(L+U)*x0+inv(D)*b;vChain(k,:)=x0';k=k+1;error=norm(x0-fx0);fx0=x0;step=step+1;endv=x0;sN=step;用Gauss-Seidel迭代法求解上题的线性方程组,取。
解线性方程组的Jacobi迭代法
function [x,k]=jacobi2(A,b,x0,e) n=length(b); D=diag(A); D=diag(D); L=zeros(n,n); U=zeros(n,n); x=zeros(n,1); k=1; for i=2:n for j=1:i-1
3
L(i,j)=A(i,j); end end for i=1:n-1 for j=i+1:n U(i,j)=A(i,j); end end x=-inv(D)*(L+U)*x0+inv(D)*b; while norm(x-x0)>e x0=x; x=-inv(D)*(L+U)*x0+inv(D)*b; k=k+1; end disp(x); disp(k);
⎛ a11 ⎜ 其中, D = ⎜ ⎜ ⎜ ⎝ a22
a22
⎞ ⎛ 0 ⎟ ⎜ ⎟ + ⎜ a21 ⎟ ⎜ ⎟ ⎜ ann ⎠ ⎝ an1
0 an 2
⎞ ⎛ 0 a12 ⎟ ⎜ 0 ⎟+⎜ ⎟ ⎜ ⎟ ⎜ … 0⎠ ⎝
a1n ⎞ ⎟ a2 n ⎟ ⎟ ⎟ 0 ⎠ a1n ⎞ ⎟ a2 n ⎟ 。 ⎟ ⎟ 0 ⎠
【解答】
迭代格式为
(k ) (k ) ⎛ 3 + 2 x2 ⎞ + x3 ⎜ ⎟ 10 ⎟ ⎛ x1( k +1) ⎞ ⎜ (k ) ⎟ ⎜ ( k +1) ⎟ ⎜ 15 + 2 x1( k ) + x3 ⎟ ⎜ x2 ⎟ = ⎜ 10 ( k +1) ⎟ ⎜ ⎟ ⎜ x3 ( ⎝ ⎠ ⎜ 10 + x k ) + 2 x ( k ) ⎟ 1 2 ⎜ ⎟ 5 ⎝ ⎠
matlab求线性方程组的解
matlab求线性方程组的解求解线性方程分为两种方法–直接法和迭代法常见的方法一共有8种直接法Gauss消去法Cholesky分解法迭代法Jacobi迭代法Gauss-Seidel迭代法超松弛迭代法共轭梯度法Bicg迭代法Bicgstab迭代法这里我从计算代码的角度来解释一下,代码按以下顺序给出。
把方程组直接带入已知条件,就可以得到答案。
适用条件Gauss消去法:求解中小规模线性方程(阶数不过1000),一般用于求系数矩阵稠密而且没有任何特殊结构的线性方程组Cholesky分解法:对称正定方程优先使用,系数矩阵A是n 阶对称正定矩阵Jacobi迭代法非奇异线性方程组,分量的计算顺序没有关系Gauss-Seidel迭代法与Jacobi迭代法相似,但计算的分量不能改变超松弛迭代法Jacobi迭代法和Gauss-Seidel迭代法的加速版,由Gauss-Seidel迭代法改进而来,速度较快共轭梯度法需要确定松弛参数w,只有系数矩阵具有较好的性质时才可以找到最佳松弛因子。
但好处是不用确定任何参数,他是对称正定线性方程组的方法也是求解大型稀疏线性方程组最热门的方法Bicg迭代法本质是用双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求Bicgstab迭代法本质是用稳定双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求Gauss消去法第一、二个函数ltri、utri是一定要掌握的,后面的几乎每个函数都要用到ltri简单来说,当Ly=bb,L(非奇异下三角矩阵)已知求yfunction y =ltri(L,b)n=size(b,1);y=zeros(n,1);for j =1:n-1y(j)=b(j)/L(j,j);b(j+1:n)=b(j+1:n)-y(j)*L(j+1:n,j); endy(n)=b(n)/L(n,n);utri简单来说,当Ux=yy,U(非奇异上三角矩阵)已知求xfunction x =utri(U,y)n=size(y,1);x=zeros(n,1);for j = n:-1:2x(j)=y(j)/U(j,j);y(1:j-1)=y(1:j-1)-x(j)*U(1:j-1,j);endx(1)=y(1)/U(1,1);gauss算法,计算时粘贴过去就好function[L,U]=gauss(A)n=size(A,1);for k =1:n-1A(k+1:n,k)=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k +1:n)-A(k+1:n,k)*A(k,k+1:n);endL=tril(A,-1)+eye(n);U=triu(A);使用例子已经知道一个线性方程组,这里我就不写出数学形式了,A是系数矩阵,直接把上面写好的函数复制过来在运算就可以。
LAB07_解线性方程组的基本迭代法实验
Lab07.解线性方程组的基本迭代法实验【实验目的和要求】1.使学生深入理解Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法;2.通过对Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法的程序设计,以提高学生程序设计的能力;3.应用编写的程序解决具体问题,掌握三种基本迭代法的使用,通过结果的分析了解每一种迭代法的特点。
【实验内容】1.根据Matlab 语言特点,描述Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法。
2.编写Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法的M 文件。
3.给定2020⨯∈R A 为五对角矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------321412132141412132141412132141412132141213 (1)选取不同的初始向量)0(x 及右端面项向量b ,给定迭代误差要求,分别用编写的Jacobi 迭代法和Gauss-Seidel 迭代法程序求解,观察得到的序列是否收敛?若收敛,通过迭代次数分析计算结果并得出你的结论。
(2)用编写的SOR 迭代法程序,对于(1)所选取的初始向量)0(x 及右端面项向量b 进行求解,松驰系数ω取1<ω<2的不同值,在5)1()(10-+≤-k k x x 时停止迭代,通过迭代次数分析计算结果并得出你的结论。
【实验仪器与软件】1.CPU 主频在1GHz 以上,内存在128Mb 以上的PC ;2.Matlab 6.0及以上版本。
实验讲评:实验成绩:评阅教师: 200 年 月 日Lab07.解线性方程组的基本迭代法实验一、算法描述1、雅可比迭代法描述如下:将线性方程组b Ax =中的系数矩阵n n ij R a A ⨯∈=)(分为三部分UL D a a a a a a a a aa a a a a a A n n n n n n n n n n n n nn --=⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-------⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-------⎪⎪⎪⎪⎪⎭⎫⎝⎛=------00000000,121,211,1121,212,11,1212211设),,2,1(0n i a ii =≠选取M 为A 的对角元素部分,即选取M=D (对角矩阵),A=D-N,由⎪⎩⎪⎨⎧=+=+,,1,0,)(1)(k (0)k f Bx xx k初始向量得到解Ax=b 的雅可比迭代法 ⎪⎩⎪⎨⎧=+=+,,1,0,)(1)(k (0)k f Bx xx k初始向量其中b D f J U L D A D I B 111,)(---=≡+=-=,称J 为解Ax=b 的雅可比迭代法的迭代矩阵。
(完整word版)matlab数值分析例题
1、 在MATLAB 中用Jacobi 迭代法讨论线性方程组,1231231234748212515x x x x x x x x x -+=⎧⎪-+=-⎨⎪-++=⎩(1)给出Jacobi 迭代法的迭代方程,并判定Jacobi 迭代法求解此方程组是否收敛。
(2)若收敛,编程求解该线性方程组.解(1):A=[4 -1 1;4 —8 1;-2 1 5] %线性方程组系数矩阵A =4 -1 1 4 -8 1 —2 1 5>> D=diag(diag(A))D =4 0 0 0 —8 0 0 0 5〉〉 L=—tril (A,-1) % A 的下三角矩阵L =0 0 0 —4 0 0 2 —1 0〉〉U=-triu(A,1)% A的上三角矩阵U =0 1 —10 0 —10 0 0B=inv(D)*(L+U)% B为雅可比迭代矩阵B =0 0.2500 —0。
25000.5000 0 0.12500。
4000 —0.2000 0〉〉r=eigs(B,1)%B的谱半径r =0。
3347 〈1Jacobi迭代法收敛。
(2)在matlab上编写程序如下:A=[4 —1 1;4 -8 1;—2 1 5];〉〉b=[7 —21 15]';>〉x0=[0 0 0]’;〉〉[x,k]=jacobi(A,b,x0,1e—7)x =2。
00004.00003。
0000k =17附jacobi迭代法的matlab程序如下:function [x,k]=jacobi(A,b,x0,eps)% 采用Jacobi迭代法求Ax=b的解%A为系数矩阵%b为常数向量%x0为迭代初始向量%eps为解的精度控制max1= 300; %默认最多迭代300,超过300次给出警告D=diag(diag(A));%求A的对角矩阵L=-tril(A,—1); %求A的下三角阵U=—triu(A,1); %求A的上三角阵B=D\(L+U);f=D\b;x=B*x0+f;k=1;%迭代次数while norm(x-x0)>=epsx0=x;x=B*x0+f;k=k+1;if(k〉=max1)disp(’迭代超过300次,方程组可能不收敛’);return;endend2、设有某实验数据如下:(1)在MATLAB中作图观察离散点的结构,用多项式拟合的方法拟合一个合适的多项式函数;(2)在MATLAB中作出离散点和拟合曲线图。
jacobi迭代法matlab编程例题
jacobi迭代法matlab编程例题Jacobi迭代法是一种常用的数值方法,用于求解线性方程组。
它的基本思想是通过迭代逐步逼近方程组的解。
在使用Jacobi迭代法解决线性方程组时,首先需要将方程组的系数矩阵A进行分解,即将A分解为D、L和U三个矩阵的和,其中D是A的对角线矩阵,L是A的下三角矩阵,U是A的上三角矩阵。
然后可以得到迭代公式:X(k+1) = D^(-1) * (B - (L+U) * X(k))其中,X(k)表示第k次迭代的解向量,X(k+1)表示第k+1次迭代的解向量,B是方程组的常数项向量。
下面我们通过一个具体的例子来展示如何使用Matlab编程实现Jacobi迭代法。
假设有如下线性方程组:2x + y + z = 9x + 3y - z = 43x - y + 2z = 8首先,我们可以将这个方程组转换为矩阵形式:Ax = B其中,A = [2 1 1;1 3 -1;3 -1 2]B = [9; 4; 8]然后,我们需要将矩阵A进行分解:D = diag(diag(A)) = [2 0 0;0 3 0;0 0 2]L = -tril(A) + D = [0 0 0;-1 0 0;-3 1 0]U = -triu(A) + D = [0 -1 -1;0 0 1;0 0 0]接下来,我们需要设置迭代的初始解向量X(0),这里可以选择一个任意的初始值。
假设我们选择X(0) = [0; 0; 0]。
然后,我们可以通过迭代公式来逐步逼近方程组的解。
根据公式,我们可以得到如下的迭代过程:X(1) = D^(-1) * (B - (L+U) * X(0))X(2) = D^(-1) * (B - (L+U) * X(1))X(3) = D^(-1) * (B - (L+U) * X(2))...直到满足停止条件,通常可以选择迭代次数或解的相对误差作为停止条件。
在Matlab中,我们可以使用for循环来实现迭代过程,具体代码如下:A = [2 1 1; 1 3 -1; 3 -1 2];B = [9; 4; 8];X = [0; 0; 0]; % 初始解向量D = diag(diag(A));L = -tril(A) + D;U = -triu(A) + D;for k = 1:100 % 设置最大迭代次数为100X = inv(D) * (B - (L+U) * X);% 判断停止条件% 可以根据需要设置不同的停止条件,比如迭代次数或解的相对误差if norm(A*X - B) < 1e-6break;endenddisp('解向量:');disp(X);在上述代码中,我们设置了最大迭代次数为100,并使用了解的相对误差作为停止条件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华东交通大学课程设计(论文)任务书软件学院学院09 软件工程+电气专业 3 班一、课程设计(论文)题目可视化(GUI)的线性方程组的Jacobi迭代解法二、课程设计(论文)工作自 2011年6月27日起至2011 年 7月1 日止。
三、课程设计(论文) 地点: 电气学院机房四、课程设计(论文)内容要求:1.本课程设计的目的(1)熟练掌握MATLAB语言的基本知识和技能;(2)熟悉MA TLAB下的GUI程序设计;(3)熟悉多项式曲线拟合,MA TLAB的绘图功能;(4)培养分析、解决问题的能力;提高学生的科技论文写作能力。
2.课程设计的任务及要求1)基本要求:(1)利用matlab中的GUI设计窗口设计一个界面程序。
其中主界面包含控制背景颜色与图形坐标的菜单;(2)含有一个按钮控件,它的作用能够对一个文件的数据进行多项式曲线拟合;(3)文件名通过一个编辑控件由用户给定,给定文件内包含要拟合曲线的数据;(4)拟合好的多项式曲线能够在另一个坐标控件中显示;(5)拟合好的曲线与实际数据曲线用不同的颜色并加各种必要标注在坐标中显示。
2)创新要求:GUI界面使程序更加友好、美观和合理3)课程设计论文编写要求(1)要按照课程设计模板的规格书写课程设计论文(2)论文包括目录、正文、心得体会、参考文献等(3)课程设计论文用B5纸统一打印,装订按学校的统一要求完成4)答辩与评分标准:(1)完成原理分析:20分;(2)完成设计过程:40分;(3)完成调试:20分;(4)回答问题:20分;5)参考文献:(1)刘卫国.MATLAB程序设计与应用(第二版). 北京:高等教育出版社,2008.(2)刘志刚.电力电子学.北京:清华大学出版社、北京交通大学出版社,2004.(3)李传琦. 电力电子技术计算机仿真实验.电子工业出版社,2006.6)课程设计进度安排内容天数地点构思及收集资料2图书馆编程设计与调试1实验室撰写论文2图书馆、实验室学生签名:2011 年月日课程设计(论文)评审意见(1)完成原理分析(20分):优()、良()、中()、一般()、差();(2)设计分析(20分):优()、良()、中()、一般()、差();(3)完成调试(20分):优()、良()、中()、一般()、差();(4)翻译能力(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否()(7) 总评分数优()、良()、中()、一般()、差();评阅人:职称:讲师2011年月日Matlab应用课程设计目录课程设计任务书 (1)一、Matlab 软件简介 (4)1.1 MATLAB产生的历史背景 (4)1.2 MATLAB的语言特点和开发环境 (4)1.3 基本语法 (5)二、URI简介 (8)2.1特点 (8)2.2组成部分 (8)2.3实现方法 (10)三、设计题目 (10)四、设计内容 (10)4.1Jacobi迭代法基本原理 (10)4.2实验内容 (11)4.3实验结果 (19)五、课程设计心得 (21)六、参考文献 (21)一、Matlab 软件简介MATLAB是美国MathWorks公司生产的一个为科学和工程计算专门设计的交互式大型软件,是一个可以完成各种精确计算和数据处理的、可视化的、强大的计算工具。
它集图示和精确计算于一身,在应用数学、物理、化工、机电工程、医药、金融和其他需要进行复杂数值计算的领域得到了广泛应用。
它不仅是一个在各类工程设计中便于使用的训‘算工具,而且也是一个在数学、数值分析和工程计算等课程教学中的优秀的教学工具,在世界各地的高等院校中十分流行,在各类工业应用中更有不俗的表现。
MATLAB可以在几乎所有的PC机和大型计算机上运行,适用于Windows、UNIX等多种系统平台。
1.1 MATLAB产生的历史背景MATLAB名称是由两个英文单词Ma~ix和Laboratory的前二个字母组成。
20世纪70年代后期,美国新墨西哥大学计算机系主任Cleve.Moler教授为了便于教学,减轻学生编写Fortran程序的负担,为两个矩阵运算软件包Linpack和Eispack编写了接口程序,这也许就算MATLAB的第一个版本。
1984年,在JackLittle(也称JohnLittle)的建议推动下,由Little、Moler、SteveBangert 三人合作,成立rMathWorks公司,同时把MATLAB正式推向市场。
从那时开始,MATLAB的源代码采用C语言编写,除加强了原有的数值计算能力外,还增加了数据图形的可视化功能。
1993年,MathWorks公司推出了MATLAB的4.0版本,系统平台由DOS改为Windows,推出了功能强大的、可视化的、交互环境的用于模拟非线性动态系统的工具Simulink,第一次成功开发出了符号计算工具包Symbolic Math Toolbox 1.0,为MATLAB进行实时数据分析、处理和硬件开发而推出了与外部直接进行数据交换的组件,为MATLAB能融科学计算、图形可视、文字处理于一体而制作了Notebook,实现了MATLAB与大型文字处理软件Word 的成功对接。
至此,MathWorks使MATLAB成为国际控制界公认的标准计算软件。
1997年,MathWorks公司推出了MATLAB的5.0版本,紧接着产生了5.1、5.2版本,至1999年MATLAB发展到5.3版本。
MATLAB拥有了更丰富的数据类型和结构,更好的面向对象的快速精美的图形界面,更多的数学和数据分析资源,MATLAB工具也达到了25个,几乎涵盖了整个科学技术运算领域。
在大部分大学里,应用代数、数理统计、自动控制、数字信号处理、模拟与数字通信、时间序列分析、动态系统仿真等课程的教材都把MATLAB作为必不可少的内容。
在国际学术界,MATLAB被确认为最准确可靠的科学计算标准软件,在许多国际一流的学术刊物上都可以看到MATLAB在各个领域里的应用。
MATLAB当前推出的最新版本是7.0版(R14),本书无特殊注明均指7.0版。
1.2 MATLAB的语言特点和开发环境MATLAB作为一种科学计算的高级语言之所以受欢迎,就是因为它有丰富的函数资源和工具箱资源,编程人员可以根据自己的需要选择函数,而无需再去编写大量繁琐的程序代码,从而减轻了编程人员的工作负担。
被称为第四代编程语言的MATLAB最大的特点就是简洁开放的程序代码和直观实用的开发环境。
具体地说MATLAB主要有以下特点:(1)库函数资源丰富数百种库函数大大减轻了用户子程序的编写工作量,也避免了一些不必要的错误,因而用户也不必担心程序的可靠性问题。
(2)语言精炼,代码灵活MATLAB的编程语言符合人们的思维习惯,对代码的书写也没有特别严格的控制,语言精炼,程序的亢余度非常小。
(3)运算符多而灵活MATLAB的内核是用c语言编写的,它为用户提供了和C语言一样多的运算符,用户运用这些运算符可以使程序更加简炼。
(4)面向对象,控制功能优良MATLAB在5.x各版本中优化了数据结构,使得程序的结构化控制更精良,面向对象的功能更加友善。
特别是当前的7.0版,在可视化编程方面比以前的版本又有了更大的提高,使界面编程更方便、自由。
(5)程序设计自由MATLAB7.0版支持长变量名达到63个字符,用户可以不对矩阵进行预定义就使用,变量和数组的应用也有了很大的扩展,这为用户编写程序提供了更大的自由度,使编程更加简单、方便。
(6)图形功能强大在很多程序语言中,绘制图形是一件很麻烦的事情。
但在MATLAB中,只需调用相应的绘图函数即可,既方便又迅速。
随着硬件的发展和MATLAB7.0推出,MATLAB的图形功能更好,可视化编程能力得到更进一步的提高。
(7)程序的兼容性好MATLAB可以在各种PC机、大型计算机和各种操作系统上运行。
(8)源代码开放MATLAB的最重要的特点是源代码的开放性,除了内部函数,所有的MATLAB 核心文件和工具箱文件都完全开放,都可渎可改。
用户对源文件修改就可以生成适合自己的源代码文件。
(9)形形色色的工具箱凡有工具箱的软件大都分为两大部分,就是核心部分和形形色色的工具箱。
MATLAB有数百个核心内部函数,数十个形形色色的工具箱。
工具箱大致可以分为两大类,——类是学科性工具箱,另一类是功能性工具箱。
学科性工具箱大都涵盖了本学科所有的已有的基本概念和基本运算,大都十分专业。
如符号数学工具箱,简直就是一个高等数学、工程数学解题器。
极限、导数、微分、积分、级数运算与展开、微分方程求解、Laplace变换等应有尽有。
还有控制系统、信号处理、模糊逻辑、神经网络、小波分析、统计;优化、金融预测等工具箱,无一不是非常优秀的运算工具。
这些工具箱都可以添加自己根据需要编写的函数,用户可以不断更新自己的工具箱,使之更适合于自己的研究和计算1.3 基本语法1.3.1变量1、变量的命名:变量的名字必须以字母开头(不能超过19个字符),之后可以是任意字母、数字或下划线;变量名称区分字母的大小写;变量中不能包含有标点符号。
2、一些特殊的变量:ans:用于结果的缺省变量名i、j:虚数单位pi:圆周率realmin:最小正实数realmax:最大正实数1.3.2简单的数学运算1、常用的数学运算符:+,—,*(乘),/(左除),\(右除),^(幂)在运算式中,MATLAB通常不需要考虑空格;多条命令可以放在一行中,它们之间需要用分号隔开;逗号告诉MATLAB显示结果,而分号则禁止结果显示。
2、常用数学函数:abs,sin,cos,tan,sqrt,exp,imag,real, rem,1.3.3流程控制语句1、if语句基本格式:if 逻辑表达式执行语句End其执行过程为:当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。
2、while循环语句基本格式:while 表达式循环体End其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。
4、switch语句基本格式:switch 表达式(%可以是标量或字符串)case 值1语句1case 值2语句2….otherwise语句3End其执行过程为:当表达式的值等于表达式1的值时,执行语句组1,当表达式的值等于表达式2的值时,执行语句组2,…,当表达式的值等于表达式m的值时,执行语句组m,当表达式的值不等于case所列的表达式的值时,执行语句组n。
当任意一个分支的语句执行完后,直接执行switch语句的下一句。