Gauss消去法等matlab程序

合集下载

Gauss列主元消去法、QR(MATLAB)

Gauss列主元消去法、QR(MATLAB)

Gauss列主元消去法、QR(MATLAB)Gauss列主元消去法是一种线性方程组的求解方法,也称Gauss消去法。

其基本思想是将方程组转化为上三角矩阵,然后通过反向代入求解。

该方法的优点在于计算精度高,求解速度快,但缺点是需要大量的计算,尤其是在矩阵阶数较高时。

具体来讲,Gauss列主元消去法的步骤如下:步骤一:将系数矩阵A进行LU分解,其中L是下三角矩阵、U是上三角矩阵。

设$A=LU$,则原方程组可以写成$LUx=b$。

步骤二:通过初等矩阵左乘系数矩阵A,将每一列的主元变为该列所有元素中绝对值最大的那个元素。

这个过程称为选主元,可以避免计算中的数值不稳定问题。

步骤三:将选主元后的系数矩阵A进行LU分解,得到$L^{'}$、$U^{'}$。

步骤五:通过反向代入求解$U^{'}x=y$,得到$x$的解。

Gauss列主元消去法的实现通常通过矩阵的变换来实现。

对于$n$阶矩阵$A=[a_{ij}]$,通过一系列的行变换,可以将其变为上三角矩阵。

其中的变换可以表示为:$$ R_{i} \leftrightarrow R_{j} $$其中,$R_{i}$和$R_{j}$分别表示矩阵$A$中的第$i$行和第$j$行,$k$是一个非零常数。

这些变换被称为初等行变换。

在MATLAB中,可以使用已经实现好的{\color{blue}\texttt{gauss}}函数来求解线性方程组。

该函数实现的算法是Gauss列主元消去法。

其调用格式为:x = gauss(A,b)其中,$A$是系数矩阵,$b$是结果向量。

函数返回结果向量$x$。

如果$A$或$b$不合法,则函数会返回一个空向量。

除了Gauss列主元消去法,还有一种常用的求解线性方程组的方法是QR分解法。

步骤二:通过正交矩阵左乘系数矩阵$A$,使其变为一个上三角矩阵。

这个过程称为正交相似变换。

步骤三:将$b$进行正交相似变换,得到$Q^{T}b$。

matlab高斯消元法

matlab高斯消元法

matlab高斯消元法
高斯消元法(Gaussian elimination)是一种求解线性方程组的方法,也常用于求解矩阵的逆以及计算矩阵的秩等问题。

在MATLAB 中,可以通过调用 `rref` 函数来实现高斯消元法。

`rref` 函数的用法如下:
```
X = rref(A)
```
其中,`A` 是要进行高斯消元的矩阵,`X` 是结果。

`rref` 函数会将矩阵 `A` 转化为行最简形,并返回结果矩阵 `X`。

以下是一个使用高斯消元法求解线性方程组的示例:
```matlab
A = [2, 1, -1, 8; -3, -1, 2, -11; -2, 1, 2, -3];
X = rref(A);
```
执行上述代码后,`X` 将会是一个行最简形的矩阵,表示线性方程组的解。

另外,如果你只想求解线性方程组的解而不需要得到行最简形矩阵,可以使用 `linsolve` 函数。

```matlab
A = [2, 1, -1; -3, -1, 2; -2, 1, 2];
b = [8; -11; -3];
X = linsolve(A, b);
```
上述代码中,`A` 是系数矩阵,`b` 是常数向量,`X` 是解向量。

执行代码后,`X` 将会是线性方程组的解。

gauss列主元素消去法matlab

gauss列主元素消去法matlab

高斯列主元素消去法是一种解线性方程组的常用方法,特别在数值分析和线性代数中应用广泛。

在Matlab中,我们可以使用该方法来解决大规模的线性方程组,包括矩阵的求解和矩阵的反转。

一、高斯列主元素消去法的基本原理高斯列主元素消去法是一种基于矩阵消元的方法,它通过一系列的矩阵变换将原始的线性方程组转化为上三角形式,然后再进行回代求解。

这个方法的核心就是通过矩阵的变换来简化原始的线性方程组,使得求解过程更加简单高效。

在Matlab中,我们可以利用矩阵运算和函数来实现高斯列主元素消去法,如`lu`分解函数和`\"`运算符等。

通过这些工具,我们能够快速地求解各种规模的线性方程组并得到准确的结果。

二、高斯列主元素消去法在Matlab中的实现在Matlab中,我们可以通过调用`lu`函数来实现高斯列主元素消去法。

该函数返回一个上三角矩阵U和一个置换矩阵P,使得PA=LU。

通过对U进行回代求解,我们可以得到线性方程组的解。

除了`lu`函数之外,Matlab还提供了一些其他的函数和工具来帮助我们实现高斯列主元素消去法,比如`\"`运算符和`inv`函数等。

通过这些工具的组合使用,我们能够更加灵活地进行线性方程组的求解,并且可以方便地处理特殊情况和边界条件。

三、高斯列主元素消去法的应用与局限性高斯列主元素消去法在实际应用中具有广泛的适用性,特别是对于大规模的线性方程组或者稀疏矩阵的求解。

通过Matlab中的工具和函数,我们可以快速地求解各种规模的线性方程组,并得到高精度的数值解。

然而,高斯列主元素消去法也存在一些局限性,比如对于奇异矩阵或者接近奇异矩阵的情况时,该方法的求解精度可能会下降。

在实际应用中,我们需要结合具体的问题和矩阵特性来选择合适的求解方法,以确保得到准确的结果。

四、个人观点和总结作为一种经典的线性方程组求解方法,高斯列主元素消去法在Matlab 中具有较好的实现和应用效果。

通过对其原理和实现细节的深入理解,我们能够更加灵活地应用该方法,并且能够更好地理解其适用性和局限性。

(完整)高斯消去法解线性方程的Matlab程序

(完整)高斯消去法解线性方程的Matlab程序

1151091 杨晨辉高斯消去法解线性方程的Matlab 程序方法一:function x = gauss(A,b) n = length(b);for k = 1 : n-1if A(k,k)==0fprintf( 'Error: the %dth pivot element equal to zero!\n' return ;endindex = [k+1:n];m = -A(index,k)/A(k,k);A(index,index) = A(index,index) + m*A(k,index); b(index) = b(index) + m*b(k);endx = zeros(n,1);x(n) = b(n)/A(n,n);for i = n-1:-1:1x(i) = ( b(i) - A(i,[i+1:n])*x([i+1:n]) )/A(i,i); end运行结果:>> A=[1 1.355 1.4 2; 3 3.5 0.22 1; 0.5 2 2.1 3;>> b=[2.00,1.00,0.55,3.00]' b =2.00001.00000.55003.0000 >> gauss(A,b)ans =2.5225-2.23130.01771.2381 方法二:矩阵求逆:function [ B ] = qiuni( A )%UNTITLED Summary of this function goes here% Detailed explanation goes here n=numel(A);r=rank(A);B=eye(r);if n==L2for k=1:rfor i=1:r ,k);0.3 0.1 -0.55 2];for j=1:rii=i-1;jj=j-1;if ii==0 && jj==0;ii=r;jj=r;B(ii,jj)=1/A(1,1);elseif ii==0 && jj~=0;ii=r;B(ii,jj)=-A(1,j)/A(1,1);elseif jj==0 && ii~=0;jj=r;B(ii,jj)=A(i,1)/A(1,1);elseB(ii,jj)=A(i,j)-A(i,1)*A(1,j)/A(1,1);endendendA=B;B=eye(r);endB=A;elsemsgbox( ' 矩阵不可逆' , 'message' , 'warn' ); end endGr^l Jr«t jskiALM13LII4I3 S ]J. IXI f 8 4»LEF3f* ll.Tfil™'.*?a. nr-ii I. >3 DOC-1- E^:I.MQP n rml.»HGil・a血«.4WtOMHi超if iMr MHfH 曰ITfar !■ i: rIlliUliNJTL2in kLIU#•十*minilu-dzr齡 4 J 2.4 7^3.9 il-l-Z U • (14 M,1 1*1,1 i Ih.i 他[S 4 J 2 4 2 it 3.3 I ? 5.4 3 3 lh”gg飞『可选1M^4T<E AfrrE喩耳.庇賈■斗『.*玛11册V ttii< .M ■帥?脅 Q* M It 当方程不可逆时:第二种:fun ction [ B ] = lyxq inv( A )%UNTITLED Summary of this fun ctio n goes here % Detailed expla nati on goes here n=n umel(A);r=ra nk(A);B=eye(r);if n==L2E=eye(r);A=[A E];for k=1:(r-1)for i=(k+1):rfor j=(k+1):2*rA(i,j) = A(i,j)-A(i,k)* A(k,j) / A(k,k);endj=k;A(i,j) = A(i,j)-A(i,k)* A(k,j) / A(k,k);endendfor k=2:rpuspus !( .UJBM , £ .sBesseiu, £ ,廡址k 捌目# . )xoq6siu9S|9 :(j^:(i,+j )i:)a=apue pue©!)▼/(「!)皆(「!)日J^:L=[」oj」j=!」ojpue pue:(>l 1>l )V/(r>l )V.(>l 1!)V-(r!)V=(r!)V■>l=f pue:(>i i >i )v/(r>i )v.(>i i !)v-(r!)v=(r!)v j^:(i /+>i )=r 」oj(宀)J=!」OJ!■« ^'1 1 I t'C 0 £ S't t fe- S]-*-fiN1=5 3 If• ◎ ID * ・E -*w J£ 口1M^!PIS^'D-EMJ'DgfWP Sfft F IMF CGiK S^£j£K 加屜iz "UP EWtT>- UKH MX®MJFV- HQFU岡Z 伽巾w:MMsmn a t i 11 ft g i t z t if 町■ V —1 J£*frdrj_ E-C-^'P ■fp XklMC I «f*E|«ul3 5 ¥ 1 i I r'C 9 £ C I ・ ** epiiJbcMH L ^btLJ=Ul] Ci 1 J't 1 I L'L 9 ■£ R* L I 3]^j ",|Q 鼻 H-R r ft ・ 4 ■卩 * C- [- T'P- f ■门碑 :\|T- i TI :-q r R!- 3 I 旷£- « 1- 4 1- f E- F]-» 14肯1肚丫 F1 41 J. I 时4T ■ = FIT IF P 町贰F 3»rl-qll 5 I 3 -5 A I E :f B 5 P C E > 5]<*V] *■*iia t i i i E C g i P S I t ・町詐(q Fri "T<e fc-xsr[i —we*Fip - . jr r ■'w■I« !J►5 ft O EWK陆羽 LfEMLD?K :fl.«ll r miEI f lfiMlbiM.T -[| g 盅 E fi J E £'L 5> E »'Z € t £]=9 «IH -MnhiQui'u^iJEi 1I in-M ka« tfun cti on X=jie(A,b); [m,n ]=size(A);B=[A,b];RA=ra nk(A);RB=ra nk(B);formatratif RA==RB & RA==n %判断方程有唯一解 X=A\b;else if RA==RB & RA<n %判断方程有无穷解X=A\b %求特解 C=null(A,'R' );%求AX=0勺基础解系else X='方程无解’;%判断方程无解 end end上图的方程有两个,第一个有解,显示结果;第二个无解,显示 方程无解当方程有无穷解时,显示其特解■ -1^ u* sf Bi fclw JtJf• 6 •CiJ □ £J 4■谍 1 3 7 fl I 7 >7 13 D<L. rlsipc-hn- >Ji>; «»EV i > 1.4 > H >J < i T >■ t iipiM -caim 勒诵 < 3 j,4 g ].] I 7 5.? 3 fi« j a m 半・ jj.^(]!4M r A ).i i Fv.? > t 盯・・口©・ *-C5 4 3 a pfUkb)A F IB 4 ft 1J ji«L4ib)X|t 4 1 1,4 •EE i 3 2;a Jt Ct < 5 1.4 ■£L -2 J -L J -i & -J,2 I 2 -2P r «^(b 2 ]]',1 i 1J l !*«/■■ 1]X14N3 g 3.3 I T 5.S 3 5 l.|.b-[14Mi 1 6 3.3 I r 9.2 3 1 d|il>±(14rt if山n 4 I 2 4 I 4 3,9 3 r t,3 ) 6 lixim KJ Hip.EDM 酉52IDiU|i -a v -i ,s -i b o s ? ar■AT“n4 a M H 4 3 IQ:\・B I 各聲a&14+3 3l :gi52図邸H - g ><k 申r 5.71 %门.・口0医2 d ).] i. ?3 S i|,b-{^94 I■IWr=iIMIS» M 【l I 3 ・l"・l •> 4.1 5 V -«),tell < •】•.”心”」UTIMntrtE ex J 9 Q, " Si・ V12M)l»724?»n« Ut9・ i/i2«e )in^4rmi« m|g 门“t—SJ. *Mb 4 ) 1.4 2 ・).3 I r e.4 ) 1MH 4 >:.< 2 • X> I r «.? ) t ibMOHM “ 4 > 2.4 2 e X )I r 5.2 ) 3ibUOUMA^li 4 ) 2.4 2 « >.> I I C.2 ) < l)#b-(l«M IJWU.WMIS 4 > 2.4 7 • J.5 I f 5.2 S 1 IJUU.b>A F 5 < > >.4 < 3.S I > 6.J > « l).^(l«M 1 Mb <>:.<? « XI I r o.2 ) 9 lbW (l«M I "4 2 6 3.3 I 7 6.J 1 5l),W(l<M I4 > 2.4 2 • >.> t r B.2 > ■ IA=!l -2 3 -l.> -I 5 -3.2 I 2 -2!.bs(> 2 «* J A*|l 1 J -I i ・(・1 4.1 i -• -l|.b-(l 4 •)•*nu *" >«w “5*a□ Jk fi W 2f » -ute«twec»>x - €>»»<» M S^*9V«9<aa >4X<t * * J (J)Mg ■ r.Tp■"daStn m 一「一 . M4te~ 3144-18S44 3B • r *H» " MIL X14 4-189 15 M SmM*lte 3314^21719X3M4・ X144-3215152® .dbr«4M»U RMUMXH4^259O4C N 1 Qf* n M 低 an 心 2( aooTXT Mr201H-2 Id 1)518)0 &1Q @6 ■.U, _ B Ulw« Mi . : MUI 4iwAM« .。

方程组的各种解法法的Matlab程序及运行结果

方程组的各种解法法的Matlab程序及运行结果

1.列主元高斯消去法M文件function[x]=gauss(a,b)n=length(a);x=zeros(n,1);a=[a b];for k=1:n-1max=k;for i=k+1:nif a(i,k)>a(max,k)max=i;endendtemp=a(k,k:n+1);a(k,k:n+1)=a(max,k:n+1);a(max,k:n+1)=temp;for i=k+1:na(i,k)=-a(i,k)/a(k,k);a(i,k+1:n+1)=a(i,k+1:n+1)+a(i,k)*a(k,k+1:n+1);endendx(n,1)=a(n,n+1)/a(n,n);for i=n-1:-1:1sum=0;for j=i+1:nsum=sum+x(j,1)*a(i,j);endx(i,1)=(a(i,n+1)-sum)/a(i,i);endMatlab运行结果2.LU三角分解法M文件function y=LU(A,B);n=length(A);A=[A B];for k=1:n-1;for i=k:n;if(abs(A(i,k))==max(abs(A(k:n,k))))P(k)=i;temp=A(k,:);A(k,:)=A(i,:);A(i,:)=temp;endendfor j=k+1:n;A(j,k)=A(j,k)/A(k,k);A(j,k+1:n+1)=A(j,k+1:n+1)-A(j,k)*A(k,k+1:n+1);endendP(n)=n;L(1,1)=1;L(2:n,1)=A(2:n,1);L(1,2:n)=0;U(1,1)=A(1,1);U(2:n,1)=0;U(1,2:n)=A(1,2:n);for i=2:n;L(i,1:i-1)=A(i,1:i-1);L(i,i)=1;L(i,i+1:n)=0;U(i,1:i-1)=0;U(i,i:n)=A(i,i:n);endx(n) = A(n,n+1)/U(n,n);for k = n-1:-1:1x(k)=A(k,n+1);for p=n:-1:k+1;x(k) = x(k)-U(k,p)*x(p); endx(k)=x(k)/U(k,k);endxLUPEndMatlab运行结果3.龙贝格(Romberg)算法M文件function[t]=romberg(f,a,b,e)t=zeros(15,4);t(1,1)=(b-a)/2*(f(a)+f(b));for k=2:4sum=0;for i=1:2^(k-2)sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1));endt(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum;for i=2:kt(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1);endendfor k=5:15sum=0;for i=1:2^(k-2)sum=sum+f(a+(2*i-1)*(b-a)/2^(k-1));endt(k,1)=0.5*t(k-1,1)+(b-a)/2^(k-1)*sum;for i=2:4t(k,i)=(4^(i-1)*t(k,i-1)-t(k-1,i-1))/(4^(i-1)-1);endif k>6if abs(t(k,4)-t(k-1,4))<edisp(['答案',num2str(t(k,4))]);break;endendendif k>=15disp(['溢出']);endMatlab运行结果4.最小二乘法M文件function[a,max,det]=zuixiaoerchengfa(x,y,r) n=length(x);c=ones(n,r+1);for i=2:r+1for j=1:nc(j,i)=x(j)^(i-1);endendA=c'*c;b=c'*y';a=inv(A)*b;det=0;max=0;for i=1:nsum=a(1);for j=2:r+1sum=sum+a(j)*x(i)^(j-1);endcc=abs(y(i)-sum);if cc>maxmax=cc;enddet=det+cc^2;enddet=sqrt(det);Matlab运行结果§2.1.1 二分法的MATLAB主程序function [k,x,wuca,yx]=erfen(a,b,abtol)a(1)=a; b(1)=b;ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数if ya* yb>0,disp('注意:ya*yb>0,请重新调整区间端点a和b.'), returnendmax1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil是向+方向取整∞for k=1: max1+1a;ya=fun(a); b;yb=fun(b); x=(a+b)/2;yx=fun(x); wuca=abs(b-a)/2; k=k-1;[k,a,b,x,wuca,ya,yb,yx]if yx==0a=x; b=x;elseif yb*yx>0b=x;yb=yx;elsea=x; ya=yx;endif b-a< abtol , return, endendk=max1; x; wuca; yx=fun(x);§2.1.2 不动点迭代法的MATLAB主程序function [k,piancha,xdpiancha,xk,yk]=diedai2(x0,tol,ddmax) x(1)=x0;for i=1: ddmaxx(i+1)=fun(x(i));piancha=abs(x(i+1)-x(i));xdpiancha=piancha/( abs(x(i+1))+eps);i=i+1;xk=x(i);yk=fun(x(i)); [(i-1) piancha xdpiancha xk yk]if (piancha<tol)|(xdpiancha< tol)k=i-1; xk=x(i);return;endendif i>ddmaxdisp('迭代次数超过给定的最大值ddmax')k=i-1; xk=x(i);yk=fun(x(i));[(i-1) piancha xdpiancha xk yk];return;endP=[(i-1),piancha,xdpiancha,xk,yk]';§2.1.3 艾特肯加速迭代法的MATLAB主程序function [k,xk,yk,p]= Aitken (x0,tol, ddmax)x(1)=x0;for i=1: ddmaxx1(i+1)=fun(x(i)); x2(i+1)=fun(x1(i+1));x(i+1)=x2(i+1)-(x2(i+1)-x1(i+1))^2/(x2(i+1)-2*x1(i+1)+ x(i));piancha=abs(x(i+1)-x(i));xdpiancha= piancha/( abs(x(i+1))+eps);i=i+1; xk=x(i);yk=fun(x(i));if (piancha<tol)|(xdpiancha<tol)k=i-1; xk=x(i); yk=fun(x(i));m=[0,1:i-1]; p=[m',x1',x2',x'];return;endendif i>ddmaxdisp('迭代次数超过给定的最大值ddmax')k=i-1; xk=x(i); yk=fun(x(i));m=[0,1:i-1]; p=[m',x1',x2',x'];return;endm=[0,1:i-1]; p=[m',x1',x2',x'];§2.1.4 牛顿切线法的MATLAB主程序function [k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax) x(1)=x0;for i=1: gxmaxx(i+1)=x(i)-fun(x(i))/(dfun(x(i))+eps);piancha=abs(x(i+1)-x(i));xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1;xk=x(i);yk=fun(x(i)); [(i-1) xk yk piancha xdpiancha]if (abs(yk)<ftol)&((piancha<tol)|(xdpiancha< tol))k=i-1; xk=x(i);[(i-1) xk yk piancha xdpiancha]return;endendif i>gxmaxdisp('请注意:迭代次数超过给定的最大值gxmax。

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

高斯法和列主元高斯消去法解线性方程组(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 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);
end x(k)=S/A(k,k) end x %程序的计算结果 error=abs(x-ones(n,1))%误差 %误差小于直接进行高斯消去的计算误差

高斯消去、追赶法matlab

高斯消去、追赶法matlab

⾼斯消去、追赶法matlab 1. 分别⽤Gauss消去法、列主元Gauss消去法、三⾓分解⽅法求解⽅程组程序:(1)Guess消去法:function x=GaussXQByOrder(A,b)%Gauss消去法N = size(A);n = N(1);x = zeros(n,1);for i=1:(n-1)for j=(i+1):nif(A(i,i)==0)disp('对⾓元不能为0');return;endm = A(j,i)/A(i,i);A(j,i:n)=A(j,i:n)-m*A(i,i:n);b(j)=b(j)-m*b(i);endendx(n)=b(n)/A(n,n);for i=n-1:-1:1x(i)=(b(i)-sum(A(i,i+1:n)*x(i+1:n)))/A(i,i);end命令⾏输⼊:A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];b=[1 3 5 7];b=b';x=GaussXQByOrder(A,b)运算结果:x =-8.0000000000000000.3333333333333333.6666666666666672.000000000000000(2)列主元Gauss消去法程序:function x=GaussXQLineMain(A,b)%列主元Gauss消去法N = size(A);n = N(1);x = zeros(n,1);zz=zeros(1,n);for i=1:(n-1)[~,p]=max(abs(A(i:n,i)));zz=A(i,:);A(i,:)=A(p+i-1,:);A(p+i-1,:)=zz;temp=b(i);b(i)=b(i+p-1);b(i+p-1)=temp;for j=(i+1):nm = A(j,i)/A(i,i);A(j,i:n)=A(j,i:n)-m*A(i,i:n);b(j)=b(j)-m*b(i);endendx(n)=b(n)/A(n,n);for i=n-1:-1:1x(i)=(b(i)-sum(A(i,i+1:n)*x(i+1:n)))/A(i,i);end命令⾏:A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];b=[1 3 5 7];b=b';x=GaussXQLineMain(A,b)运⾏结果:x =-8.0000000000000050.3333333333333323.6666666666666682.000000000000000(3)三⾓分解⽅法程序:function x = LU(A,b)%三⾓分解N = size(A);n = N(1);L = eye(n,n);U = zeros(n,n);x = zeros(n,1);y = zeros(n,1);U(1,1:n) = A(1,1:n);L(1:n,1) = A(1:n,1)/U(1,1);for k=2:nfor i=k:nU(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i);endfor j=(k+1):nL(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k); endendy(1)=b(1)/L(1,1);for i=2:ny(i)=b(i)-sum(L(i,1:i-1)*y(1:i-1));endx(n)=y(n)/U(n,n);for i=n-1:-1:1x(i)=(y(i)-sum(U(i,i+1:n)*x(i+1:n)))/U(i,i);end命令⾏:A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];b=[1 3 5 7];b=b';x=LU(A,b)运⾏结果:x =-8.0000000000000000.3333333333333333.6666666666666672.000000000000000程序:function [times,wucha]=zhuiganfa(a,b,c,f)%追赶法:x为所求解,times为所有乘除运算次数(即时间),wucha为误差的2-范数。

gauss在matlab的程序编写

gauss在matlab的程序编写

1.高斯消元法function [x]=mgauss(A,b,flag)ticif nargin<3,flag=0;endn=length(b);for k=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endtoc2.程序验证n=6;>> r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);>> x=mgauss(a,b)Elapsed time is 0.000000 seconds.x =1.00001.00001.00001.00001.00001.0000n=100;r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);x=mgauss(a,b) Elapsed time is 0.015000 seconds.x =1.00001.00001.00001.00001.00001.00001.0000function [RA,RB,x]=gaus(A,b,flag)ticif nargin<3,flag=0;endB=[A b]; n=length(b); RA=rank(A);RB=rank(B);if RB-RA>0disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')for k=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endendtoc程序验证n=100; r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);[ra,rb,x]=gaus(a,b) 请注意:因为RA=RB=n,所以此方程组有唯一解.Elapsed time is 0.032000 seconds.ra =100rb =100x =1.00001.00001.00001.00001.00001.0000图形2.LU分解程序function[l,u,x]=mlu(a,b)ticn=length(b);l=zeros(n);u=zeros(n);x=zeros(n,1);y=zeros(n,1); for k=1:nu(k,k:n)=a(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k:n,k)=(a(k:n,k)-l(k:n,1:k-1)*u(1:k-1,k))/u(k,k);l(k,k)=1;endfor k=1:ny(k)=b(k)-l(k,1:k-1)*y(1:k-1);endfor k=n:-1:1x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);endtoc验证n=6,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n =6r =0.8462 0.6813 0.3046 0.1509 0.4966 0.34200.5252 0.3795 0.1897 0.6979 0.8998 0.28970.2026 0.8318 0.1934 0.3784 0.8216 0.34120.6721 0.5028 0.6822 0.8600 0.6449 0.53410.8381 0.7095 0.3028 0.8537 0.8180 0.72710.0196 0.4289 0.5417 0.5936 0.6602 0.3093 Elapsed time is 0.000000 seconds.l =1.0000 0 0 0 0 00.2303 1.0000 0 0 0 00.1367 0.1246 1.0000 0 0 00.2291 0.1977 0.1438 1.0000 0 00.2676 0.2622 0.1441 0.2122 1.0000 00.1814 0.1540 0.0926 0.1288 0.1104 1.0000u =8.1875 1.8854 1.1195 1.8760 2.1912 1.48510 7.8060 0.9728 1.5430 2.0464 1.20180 0 6.7424 0.9694 0.9715 0.62430 0 0 7.5994 1.6123 0.97890 0 0 0 7.6472 0.84410 0 0 0 0 6.4954 x =1.00001.00001.00001.00001.00001.0000n=90,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n =90r =Columns 1 through 90.8385 0.0164 0.4199 0.2731 0.8518 0.6859 0.8686 0.5152 0.19300.5681 0.1901 0.7537 0.6262 0.7595 0.6773 0.6264 0.6059 0.90960.3704 0.5869 0.7939 0.536x =1.00001.00001.00001.00001.0000经验证是正确的,太长了只节了部分。

高斯消元法,列主元素消元法及LU分解法的matlab程序

高斯消元法,列主元素消元法及LU分解法的matlab程序

§2.2.1高斯消元法的MATLAB程序f unction [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,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') endend运行命令及结果a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48];b=[0.05;1.03;-0.53];[RA,RB,n,X] =gaus (A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =1.4531-1.5892-0.2749§2.2.2 列主元素消元法的MATLAB程序function [RA,RB,n,X]=liezhu(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为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:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') endend运行命令及结果a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48];b=[0.05;1.03;-0.53];[RA,RB,n,X]=liezhu(A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3RB =3n =3X =1.4531-1.5892-0.2749§2.2.3 LU分解法的MATLAB程序function hl=zhjLU(A)[n n] =size(A); RA=rank(A);if RA~=ndisp('请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下:'), RA,hl=det(A);returnendif RA==nfor p=1:nh(p)=det(A(1:p, 1:p));endhl=h(1:n);for i=1:nif h(1,i)==0disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:'), hl;RAreturnendendif h(1,i)~=0disp('请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:')for j=1:nU(1,j)=A(1,j);endfor k=2:nfor i=2:nfor j=2:nL(1,1)=1;L(i,i)=1;if i>jL(1,1)=1;L(2,1)=A(2,1)/U(1,1);L(i,1)=A(i,1)/U(1,1);L(i,k)=(A(i,k)- L(i,1:k-1)*U(1:k-1,k))/U(k,k);elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);endendendendhl;RA,U,Lendend运行命令及结果a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48];hl=zhjLU(A)请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:RA =3U =2.5100 1.4800 4.53000 0.9300 -3.97110 0 -0.0837L =1.0000 0 00.5896 1.0000 01.0677 1.5696 1.0000hl =2.5100 0.1439 13.6410>> U=[2.5100 1.4800 4.53000 0.9300 -3.97110 0 -0.0837];>>L= [1.0000 0 00.5896 1.0000 01.0677 1.5696 1.0000];>> b=[0.05;1.03;-0.53];U1=inv(U); L1=inv(L); X=U1*L1*b,x=A\bX =-111.8440110.953125.7324x =1.4531-1.5892-0.2749例2.1: 用高斯消元法求解下面的非齐次线性方程组。

高斯顺序gauss消去法

高斯顺序gauss消去法

现代数值计算方法 matlab版程序function x=magauss2(A,b,flag)A=[1 1 1 1;-1 2 -3 1;3 -3 6 -2;-4 5 2 -3];b=[10 -2 7 0]';if nargin<3,flag=0;endn=length(b);for k=1:n-1[ap,p]=max(abs(A(k:n,k)));p=p+k-1;if p>kt=A(k,:);A(k,:)=A(p,:);A(p,:)=t;t=b(k);b(k)=b(p);b(p)=t;endm=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b], endend%huidaix=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);end>> x=magauss2(A,b,1)Ab =-4.0000 5.0000 2.0000 -3.0000 00 0.7500 -3.5000 1.7500 -2.00000 0.7500 7.5000 -4.2500 7.00000 2.2500 1.5000 0.2500 10.0000Ab =-4.0000 5.0000 2.0000 -3.0000 00 2.2500 1.5000 0.2500 10.00000 0 7.0000 -4.3333 3.66670 0 -4.0000 1.6667 -5.3333Ab =-4.0000 5.0000 2.0000 -3.0000 00 2.2500 1.5000 0.2500 10.00000 0 7.0000 -4.3333 3.66670 0 0 -0.8095 -3.2381x =1.00002.00003.0000> x=magauss(A,b,2)function x=magauss(A,b,flag)A=[1 1 1 1;-1 2 -3 1;3 -3 6 -2;-4 5 2 -3];b=[10 -2 7 0]';if nargin<3,flag=0;endn=length(b);for k=1:n-1m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endend%huidaix=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endAb =1 1 1 1 100 3 -2 2 80 -6 3 -5 -230 9 6 1 40Ab =1 1 1 1 100 3 -2 2 80 0 -1 -1 -70 0 12 -5 16Ab =1 1 1 1 100 3 -2 2 80 0 -1 -1 -70 0 0 -17 -68x =123function x=machase(a,b,c,d)clear;clc;close;a=ones(50,1);b=4*ones(50,1);c=ones(50,1);d=6*ones(50,1);d(1)=5;d(50)=5;n=length(a);for k=2:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(k)=(d(k)-c(k)*x(k+1))/b(k);endfunction [x,l,u]=malu(A,b)clear;A=[2 -1 4 -3 1;-1 1 2 1 3;4 2 3 3 -1;-3 1 3 2 4;1 3 -1 4 4];b=[11 14 4 16 18]';n=length(b);u=zeros(n,n);l=eye(n,n);u(1,:)=A(1,:);l(2:n,1)=A(2:n,1)/u(1,1);for k=2:nu(k,k:n)=A(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k+1:n,k)=(A(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k); endy=zeros(n,1);y(1)=b(1);for k=2:ny(k)=b(k)-l(k,1:k-1)*y(1:k-1);endx=zeros(n,1);x(n)=y(n)/u(n,n);for k=n-1:-1:1x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);end[x,l,u]=malu(A,b)x =1.00002.00001.0000-1.00004.0000l =1.0000 0 0 0 0-0.5000 1.0000 0 0 02.0000 8.0000 1.0000 0 0-1.5000 -1.0000 -0.3514 1.0000 00.5000 7.0000 0.8378 -1.2069 1.0000u =2.0000 -1.0000 4.0000 -3.0000 1.00000 0.5000 4.0000 -0.5000 3.50000 0 -37.0000 13.0000 -31.00000 0 0 1.5676 -1.89190 0 0 0 2.6897 function [x ,l,d]=machol(A,b)n=length(b);d=zeros(1,n);l=eye(n,n);d(1)=A(1,1);l(2:n,1)=A(2:n,1)/d(1);d(2)=A(2,2)-l(2,1)*l(2,1)*d(1);for i=3:nfor j=2:(i-1)s=0;for k=1:(j-1)s=s+d(k)*l(i,k)*l(j,k);endl(i,j)=(A(i,j)-s)/d(j);ends=0;for j=1:(i-1)s=s+d(j)*l(i,j)*l(i,j);endd(i)=A(i,i)-s;endy=zeros(n,1);y(1)=b(1);for i=2:ny(i)=b(i)-l(i,1:i-1)*y(1:i-1);endfor i=1:nz(i)=y(i)/d(i);endll=l';x=zeros(n,1);x(n)=z(n);for i=n-1:-1:1x(i)=z(i)-ll(i,i+1:n)*x(i+1:n);endx=x';[x ,l,d]=machol(A,b)1.00002.0000 1.0000 -1.0000 4.0000l =1.0000 0 0 0 0-0.5000 1.0000 0 0 02.0000 8.0000 1.0000 0 0-1.5000 -1.0000 -0.3514 1.0000 00.5000 7.0000 0.8378 -1.2069 1.0000d =2.0000 0.5000 -37.0000 1.5676 2.6897曲线拟合function p=mafit(x,y,m)a=zeros(m+1,m+1);for i=0:mfor j=0:mA(i+1,j+1)=sum(x.^(i+j));endb(i+1)=sum(x.^i.*y);enda=A\b';p=fliplr(a');复化梯形公式function s=matrap(fun,a,b,n)h=(b-a)/n;s=0;for k=1:n-1x=a+h*k;s=s+feval(fun,x);ends=h/2*(feval(fun,a)+feval(fun,b)+2*s);format longfun=inline('4./(1+x.^2)');matrap(fun,0,1,10)3.141592652969785龙贝格求积公式function s=maromb(fun,a,b,tol)if nargin<4 tol=1e-4;endh=b-a;i=1;j=1;T(1,1)=h*(feval(fun,a)+feval(fun,b))/2;T(i+1,j)=T(i,j)/2+sum(feval(fun,a+h/2:h:b-h/2))*h/2; T(i+1,j+1)=(4^j*T(i+1,j)-T(i,j))/(4^j-1);while abs(T(i+1,j+1)-T(i,j))>toli=i+1;h=h/2;T(i+1,1)=T(i,1)/2+sum(feval(fun,a+h/2:h:b-h/2))*h/2;for j=1:iT(i+1,j+1)=(4^j*T(i+1,j)-T(i,j))/(4^j-1);endendTs=T(i+1,j+1);format longfun=inline('4./(1+x.^2)');s=maromb(fun,0,1,1e-6)T =Columns 1 through 33.000000000000000 0 03.100000000000000 3.133333333333333 03.131176470588235 3.141568627450980 3.1421176470588233.138988494491089 3.141592502458707 3.1415940941258883.140941612041389 3.141592********* 3.1415926611425633.141429893174975 3.141592653552837 3.141592653708038 Columns 4 through 60 0 00 0 00 0 03.141585783761874 0 03.141592638396796 3.141592665277717 03.141592653590029 3.141592653649611 3.141592653638244s =3.141592653638244Euler解常微分方程的欧拉方法x=0:0.1:0.5;y=zeros(6,1);y1=zeros(6,1);h=.1;for k=1:5y(k+1)=(1-h)*y(k)+h*x(k);endx,y=y'for k=1:5y1(k+1)=1/(1+h)*(y1(k)+h*x(k+1));endy1=y1'y2=exp(-x)+x-1;y2x =0 0.1000 0.2000 0.3000 0.4000 0.5000 y =0 0 0.0100 0.0290 0.0561 0.0905 y1 =0 0.0091 0.0264 0.0513 0.0830 0.1209 y2 =0 0.0048 0.0187 0.0408 0.0703 0.1065 改进的欧拉法function [x,y]=maeuler(dyfun,xspan,y0,h)dyfun=inline('x+y');h=.1;xspan=[0 .5];y0=1;x=xspan(1):h:xspan(2);y(1)=y0;for n=1:(length(x)-1)k1=feval(dyfun,x(n),y(n));y(n+1)=y(n)+h*k1;k2=feval(dyfun,x(n+1),y(n+1));y(n+1)=y(n)+h*(k1+k2)/2;end%x=x';y=y';[x;y]dyfun=inline('x+y');h=.1;xspan=[0 .5];y0=1;[x,y]=maeuler(dyfun,xspan,y0,h);y1=2*exp(x)-x-1wu=y1-yans =0 0.1000 0.2000 0.3000 0.4000 0.50001.0000 1.1100 1.2421 1.3985 1.5818 1.7949 y1 =1.0000 1.1103 1.2428 1.3997 1.5836 1.7974 wu =0 0.0003 0.0008 0.0013 0.0018 0.0025function [x,y]=marunge4(dyfun,xspan,y0,h)dyfun=inline('y-2*x./y');y0=1;;h=.2;xspan=[0,1];y(1)=y0;x=xspan(1):h:xspan(2);for n=1:length(x)-1k1=feval(dyfun,x(n),y(n));k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2);k4=feval(dyfun,x(n+1),y(n)+h*k3);y(n+1)=y(n)+h/6*(k1+2*k2+2*k3+k4);endclc[x;y]y1=sqrt(1+2*x)wu=y1-yfunction [x,y]=marunge4(dyfun,xspan,y0,h)%dyfun=inline('y-2*x./y');y0=1;;h=.2;xspan=[0,1];y(1)=y0;x=xspan(1):h:xspan(2);for n=1:length(x)-1k1=feval(dyfun,x(n),y(n));k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2);k4=feval(dyfun,x(n+1),y(n)+h*k3);y(n+1)=y(n)+h/6*(k1+2*k2+2*k3+k4);endclc[x;y]y1=2*exp(x)-x-1wu=y1-ydyfun=inline('x+y');[x,y]=marunge4(dyfun,[0,0.5],1,.1);function [x,y]=maadams4(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);[xx,yy]=marunge4(dyfun,[x(1),x(4)],y0,h);y(1)=yy(1);y(2)=yy(2);y(3)=yy(3);y(4)=yy(4);for n=4:(length(x)-1)p=y(n)+h/24*(55*feval(dyfun,x(n),y(n))-59*feval(dyfun,x(n-1),y(n-1))... +37*feval(dyfun,x(n-2),y(n-2))-9*feval(dyfun,x(n-3),y(n-3)));y(n+1)=y(n)+h/24*(feval(dyfun,x(n-2),y(n-2))-5*feval(dyfun,x(n-1),...y(n-1))...+19*feval(dyfun,x(n),y(n))+9*feval(dyfun,x(n+1),p));endx;y;clc,clear;dyfun=inline('y-2*x./y');y0=1;h=.1;xspan=[0,1]; [x,y]=maadams4(dyfun,xspan,y0,h);y1=sqrt(1+2*x);%y1=2*exp(x)-x-1wu=y1-y;[x',y',y1',wu']方程组的4阶runge kutta法function [x,y]=marunge4s(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y=zeros(length(y0),length(x));y(:,1)=y0(:);for n=1:length(x)-1k1=feval(dyfun,x(n),y(:,n));k2=feval(dyfun,x(n)+h/2,y(:,n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(:,n)+h/2*k2);k4=feval(dyfun,x(n+1),y(:,n)+k3*h);y(:,n+1)=y(:,n)+h/6*(k1+2*k2+2*k3+k4);endx=x';y=y';function f=dyfun(t,y)f(1)=-.01*y(1)-99.99*y(2);f(2)=-100*y(2);f=f(:);[x,y]=marunge4s(@dyfun,[0 60],[1 2],0.02);plot(x,y);axis([-2,80,-0.5,2]);text(20,0.4,'y(x)');text(50,0.1,'z(x)')function f=dyfun(t,y)f(1)=y(2);f(2)=5*(1-y(1)^2)*y(2)-y(1);f=f(:);[x,y]=marunge4s(@dyfun,[0 60],[1 2],0.02);plot(x,y);axis([-2,80,-6,6]);text(20,0.4,'y(x)');text(50,0.1,'z(x)')function [x,y]=marunge4s(dyfun,xspan,y0,h)x=xspan(1):h:xspan(2);y=zeros(length(y0),length(x));y(:,1)=y0(:);for n=1:length(x)-1k1=feval(dyfun,x(n),y(:,n));k2=feval(dyfun,x(n)+h/2,y(:,n)+h/2*k1);k3=feval(dyfun,x(n)+h/2,y(:,n)+h/2*k2);k4=feval(dyfun,x(n+1),y(:,n)+k3*h);y(:,n+1)=y(:,n)+h/6*(k1+2*k2+2*k3+k4); endx=x';y=y';[x,y]=marunge4s(@dyfun1,[1,1.5],[1,1],.1); y1=1./(x-2);[x,y(:,1),y1]function f=dyfun1(t,y)f(1)=y(2);f(2)=2*y(1)^3;f=f(:);function masearch(fun,a,b,h)n=(b-a)/h;x1=zeros(1,n);x2=zeros(1,n);a1=a;b1=a1+h;k=1;while b1<bif feval(fun,a1)*feval(fun,b1)<0x1(k)=a1;x2(k)=b1;elsea1=b1;b1=a1+h; continue;enda1=b1;b1=a1+h;k=k+1;endfor i=1:kif x1(i)-x2(i)~=0[x1(i),x2(i)]endendmasearch(inline('x^3+x^2-3*x-3'),-3,3,0.6) function H=househ(x);n=length(x);I=diag(ones(1,n));sn=sign(x(1));if sn==0 sn=1;endz=x(2:n);if norm(z,inf)==0H=I;return;enda=sn*norm(x,2);u=x;u(1)=u(1)+a;rho=a*(a+x(1));H=I-1/rho*u*u';x=[2,1,-3,4]';%±ØÐëÊÇÁÐÏòÁ¿H=househ(x);H*xfunction A=hessen(A)[n,n]=size(A);for k=1:n-2x=A(k+1:n,k);H=househ(x);A(k+1:n,1:n)=H*A(k+1:n,1:n);A(1:n,k+1:n)=A(1:n,k+1:n)*H;function [C,D]=newpoly(x,y) %Å£¶Ù²åÖµn=length(x);D=zeros(n);D(:,1)=y';for j=2:n %¼ÆËã²îÉ̾ØÕófor k=j:nD(k,j)=(D(k,j-1)-D(k-1,j-1))/(x(k)-x(k-j+1));endendC=D(n,n);function fi=Lagran1(x,y,xi) %¸ù¾Ý¸ø³öµÄÊý¾ÝÏòÁ¿xºÍy£¬¹¹%ÔìÀ-¸ñÀÊÈÕ²åÖµ¶àÏîʽ£¬²¢¼ÆËãÔÚxi´¦µÄÖµ¡£fi=zeros(size(xi)); % È«ÁãÕónp1=length(y);for i=1:np1z=ones(size(xi)); %È«1Õófor j=1:np1if i~=jz=z.*(xi-x(j))/(x(i)-x(j)); %²åÖµ»ùº¯Êýendendfi=fi+z*y(i);endreturn牛顿插值公式x=[2 2.1 2.2 2.3 2.4]';y=[1.414214 1.449138 1.483240 1.516575 1.549193]';[C,D]=newpoly(x,y)function [C,D]=newpoly(x,y) %Å£¶Ù²åÖµn=length(x);D=zeros(n);D(:,1)=y';for j=2:n %¼ÆËã²îÉ̾ØÕófor k=j:nD(k,j)=(D(k,j-1)-D(k-1,j-1))/(x(k)-x(k-j+1));endendC=D(n,n);for k=(n-1):-1:1 %¹¹Ôì²åÖµ¶àÏîʽC=conv(C,poly(x(k)));m=length(C);C(m)=C(m)+D(k,k);endclear;clc;close all;x=[2,2.1,2.2,2.3,2.4];x=x'fx=sqrt(x)c=fx;n=length(x);disp('差商表');for j=1:n-1%compute the j-th order difference quotient;fori=n:-1:j+1 %f(x_{i-j},x_{i-j+1},...,x_{ i})c(i)=(c(i)-c(i-1))/(x(i)-x(i-j)); end;disp(sprintf('%d阶差商', j));disp(c(j+1:n));end;disp(sprintf('\n\n\n插值点'));xx=2.05disp('-----真实值---------');fxx=sqrt(xx)for n=1:4disp(sprintf('-----%d次多项式插值------',n));pnxx=c(n+1);for j=n:-1:1pnxx=pnxx*(xx-x(j))+c(j);end;disp(sprintf('插值结果:%.15f, 误差:%e', pnxx,fxx-pnxx));endx =2.0000000000000002.1000000000000002.2000000000000002.3000000000000002.400000000000000fx =1.4142135623730951.4491376746189441.4832396974191331.5165750888103101.549193338482967差商表1阶差商0.349241122458488 0.341020228001887 0.333353913911775 0.326182496726568 2阶差商-0.041104472283004 -0.038331570450560 -0.035857085926035 3阶差商0.009243006108147 0.008248281748417 4阶差商-0.002486810899327插值点xx =2.050000000000000 -----真实值--------- fxx =1.431782106327635-----1次多项式插值------插值结果:1.431675618496020, 误差:1.064878e-004-----2次多项式插值------插值结果:1.431778379676727, 误差:3.726651e-006-----3次多项式插值------插值结果:1.431781845804018, 误差:2.605236e-007-----4次多项式插值------插值结果:1.431782078942539, 误差:2.738510e-008clear;clc;close all;x=pi*[1/6 1/4 1/3]';y=sin(x);%x=[2,2.1,2.2,2.3,2.4];%%y=sqrt(x)c=y;n=length(x);disp('差商表');for j=1:n-1%compute the j-th order difference quotient;fori=n:-1:j+1 %f(x_{i-j},x_{i-j+1},...,x_{ i})c(i)=(c(i)-c(i-1))/(x(i)-x(i-j)); end;disp(sprintf('%d阶差商', j));disp(c(j+1:n));end;disp(sprintf('\n\n\n插值点'));%xx=2.05xx=2*pi/9;disp('-----真实值---------');%fxx=sqrt(xx)fxx=sin(xx)for k=1:n-1disp(sprintf('-----%d次多项式插值------',k));pnxx=c(k+1);for j=k:-1:1pnxx=pnxx*(xx-x(j))+c(j);end;disp(sprintf('插值结果:%.15f, 误差:%e', pnxx,fxx-pnxx));end;差商表1阶差商0.7910896313685740.6070244240594342阶差商-0.351538651133809插值点-----真实值---------fxx =0.642787609686539-----1次多项式插值------插值结果:0.638071187457698, 误差:4.716422e-003-----2次多项式插值------插值结果:0.643425427300882, 误差:-6.378176e-004clear allformat longx=[ 0.40 0.55 0.65 0.80 0.90 1.05]; y=[ 0.4075 0.57815 0.69675 0.88811 1.02652 1.2538];[c,d]=newpoly(x,y);polyval(c,0.596)function a=ployfit(x,y,w) %×îС¶þ³ËÄâºÏm=length(w);G=zeros(m);D=zeros(m,1);for i=1:mfor j=1:mG(i,j)=sum(w.*(x.^(i+j-2)));endD(i,1)=sum(w.*y.*(x.^(i-1)));endG=G(1:2,1:2)D=D(1:2)a=G^(-1) *Dclcclearsyms xA=[ 3 2 1 1; 3 2 2-x^2 1;5 1 3 27-x^2 1 3 2];D=det(A)f=factor(D)X=solve(D)A=[ 2 4 -1 4 16;-3 -6 2 -6 -233 6 -4 6 191 2 5 2 19];b=[-2 7 -23 43]';x1=null(A,'r')[R,s]=rref([A,b])[m,n]=size(A);x0=zeros(n,1)r=length(s);x0(s,:)=R(1:r,end);disp('feiqicifangchengzude tejiewei;')x0disp('duiyingqicixianxingfangchengde jichujiexiwei:')x=null(A,'r')clearsyms kA=[1-2*k 3 3 3;3 2-k 3 3 ;3 3 2-k 3;3 3 3 11-k];D=det(A);f=factor(D);kk=solve(f)for i=1:4AA=subs(A,k,kk(i));fprintf('dang k=');disp(kk(i));fprintf('»ù´¡½âϵΪ£º\n');x=null(AA)endA=[ 2 4 -1 4 16;-3 -6 2 -6 -233 6 -4 6 191 2 5 2 19];b=[-2 7 -23 43]';x1=null(A,'r')[R,s]=rref([A,b])[m,n]=size(A);x0=zeros(n,1)r=length(s);x0(s,:)=R(1:r,end);disp('feiqicifangchengzude tejiewei;')x0disp('duiyingqicixianxingfangchengde jichujiexiwei:')x=null(A,'r')a=[4 -1 -2; 2 1 -2; 2 -1 0];[v,d]=eig(a)if 3-rank(a-2*eye(3))==2;disp('nengduijiaohua')elsedisp('bunengduijiaohua')endv =0.727606875108999 -0.577350269189626 0.7436700670072020.485071250072666 -0.577350269189626 0.2373435120854640.485071250072666 -0.577350269189626 0.624998310964470d =2.000000000000000 0 00 1.000000000000001 00 0 2.000000000000000clearclcA=[1 -1 04 -3 01 0 1];[v,d]=eig(A);if 3-rank(A+eye(3))==2;disp('nengduijiaohua')elsedisp('bunengduijiaohua')endclearA=[1 0 0;0 2 2;0 2 2];[v1,d1]=eig(A)[v2,d2]=schur(A)判断矩阵的正定性clearA=input('shuruduichenzhen A:\n')if A-A'~=0disp('shurucuowu')return;endn=length(A);syms kd=det(A-k*eye(n));lambda=solve(d);lambda=eval(lambda);if lambda>0disp('juzhen A weizhengdingjuzheng') elseif lambda>=0disp('juzhen A banzhengdingjuzheng')elseif lambda<0disp('juzhen A fudingjuzheng') elseif lambda<=0disp('juzhen A banfudingjuzheng') elsedisp('juzhen A budingjuzheng') end矩阵分解clear allclcA=[2 2 3;2 3 2;3 2 9][v1,d1]=schur(A)[u2,s2,v2]=svd(A)[l3,u3]=lu(A)[q4,r4]=qr(A)l5=chol(A)clear allclose allclcsyms x1x2A=[1 2; 2 -3];b=[5;-4];u1=rref([A,b]);subplot(2,2,1)ezplot('x1+2*x2=5')hold onezplot('2*x1-3*x2=-4')title('fangchengzu1')grid onu2=rref([1 3 2;3 9 6]);subplot(2,2,2)ezplot('x1+3*x2=2')hold onezplot('3*x1+9*x2=6')title('fangchengzu2')grid onu3=rref([1 -3 5;2 -6 -6]); subplot(2,2,3)ezplot('x1-3*x2=5')hold onezplot('2*x1-6*x2=-6')title('fangchengzu3')grid onu4=rref([2 1 2;1 3 5]); subplot(2,2,4)ezplot('x1-2*x2=3')hold onezplot('2*x1+x2=2')ezplot('x1+3*x2=5')title('fangchengzu4')grid onhold off画出二维向量function drawvec(u)plot([0;u(1)],[0;u(2)]); hold ontheta=acos(u(1)/norm(u)); if (u(2)<0)theta=2*pi-theta;endfill([u(1)-.5*cos(theta+pi/12),u(1),u(1 )-...0.5*cos(theta-pi/12)],[u(2)-.5*sin(thet a+pi/12),...u(2),u(2)-0.5*sin(theta-pi/12)],'black' );hold offclear allclose allu=[1;2];v=[2;-1];w=[8;1];%plot([0;u(1)],[0;u(2)]);u1=2*u;v1=3*v;drawvec(u);hold ondrawvec(u1);hold ondrawvec(v);hold ondrawvec(v1);hold ondrawvec(w);hold onclose allclcclear allA1=[-1 3;2 5];A2=[1 -2; -1 5];A3=[1 2; 2 4];A4=[2 -1; 3 2];[v1,d1]=eig(A1)subplot(221)%eigshow(A1)subplot(222)[v2,d2]=eig(A2)eigshow(A2)subplot(223)[v3,d3]=eig(A3)%eigshow(A3)subplot(224)[v4,d4]=eig(A4)%eigshow(A4)14 刚体运动close allX=[0 4 6 10 8 5 3.5 6.1 6.5 3.2 2 00 14 14 0 0 11 6 6 4.5 4.5 0 01 1 1 1 1 1 1 1 1 1 1 1];M1=[1 0 -300 1 15;0 0 1];Y1=M1*X;plot(X(1,:),X(2,:));hold onaxis equalfill(Y1(1,:),Y1(2,:),'red')grid onR1=[cos(pi/3),-sin(pi/3)0;sin(pi/3),cos(pi/3) 0;0 0 1];Y2=R1*X;fill(Y2(1,:),Y2(2,:),'blue')M3=[1 0 20;0 1 30;0 0 1];l=3*pi/4;R3=[cos(l),-sin(l) 0; sin(l) cos(l) 0; 0 0 1]Y3=R3*X;fill(Y3(1,:),Y3(2,:),'yellow');Y4=M3*R3*X;fill(Y4(1,:),Y4(2,:),'black');clear allclose allclcformat shortN=input('N=:');t_u=input('temperature up:');t_d=input('temperature down:');t_l=input('temperature left:');t_r=input('temperature right:');A=zeros(N*N);b=zeros(N*N,1);for i=1:N*N;A(i,i)=4;endfor i=1:N*Nif i<=N;b(i)=t_u;endif mod(i,N)==0b(i)=b(i)+t_r;endif mod(i,N)==1b(i)=b(i)+t_l;endif i>N*(N-1)b(i)=b(i)+t_d;endif i>NA(i,i-N)=-1;endif mod(i,N)~=1A(i,i-1)=-1;endif mod(i,N)~=0A(i,i+1)=-1;endif i<=N*(N-1)A(i,i+N)=-1;endendu=rref([A,b]);for i=1:Nfor j=1:NB(i,j)=u(N*(i-1)+j,N*N+1);endendT(2:N+1, 2:N+1)=B;T(1,2:N+1)=20;T(2:N+1,1)=10;T(2:N+1,N+2)=30;T([1,N+2],[1,N+2])=NaN;TN=:5temperature up:20temperature down:50temperature left:10temperature right:30T =NaN 20.0000 20.0000 20.0000 20.0000 20.0000 NaN10.0000 16.5652 19.8667 21.8400 23.3415 25.3125 30.000010.0000 16.3958 21.0606 24.1538 26.2121 27.9111 30.000010.0000 17.9583 23.8261 27.5000 29.4426 30.1194 30.000010.0000 21.6087 28.7879 32.5769 33.9394 33.1233 30.000010.0000 29.6875 37.1395 40.0833 40.6140 38.4348 30.0000NaN 0 0 0 0 0 NaNA=[1 5; 4 3 ; 2 -1; 1 ,5] subplot(121);plot(A(:,1),A(:,2))axis equalaxis squaregrid onA=[-3 41 55 1-1 -1-6 ,1-3 4];subplot(122)plot(A(:,1),A(:,2))axis equalaxis square grid on。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end
huidai.M文件:
functionx=huidaini(a)
n=length(a)-1;
x=zeros(n,1);
s=0;
fori=1:1:n
ifi==1
orj=1:1:i-1
s=s+a(i,j)*x(j)
end
x(i)=(a(i,n+1)-s)/a(i,i)
2.)列主元消去法:
functionx=GaussL(A,b)
a=[A b];
x=[];
n=length(a)-1;
fork=1:n
A=a(k:n,k);
h=max(A);
[u,v]=find(A==h);
u=u+k-1;
B=a;
a(k,:)=B(u,:);
a(u,:)=B(k,:);
fori=k+1:n
L(j+1,i)=A(j+1,i)/A(i,i)
A(j+1,:)=A(j+1,:)-L(j+1,i)*A(i,:)
end
end
U=A(:,1:n)
a1=[L b]
y=zeros(n,1)
y=huidaini(a1)
a2=[U y]
x=huidai(a2)
4:实验结果:
1.)Gauss消去法:
>> A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
>> Gauss(A,b)
ans =
2 -2 1
2.)列主元消去法:
>> A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
GaussL(A,b)
ans =
2.0000 -2.0000 1.0000
3.)三角分解法:
>> A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
LU(A,b)
ans =
2 -2 1
5:实验总结
又一次用matlab解决数学问题,感觉好多东西都忘了,看来还要仔细看下书了,在解决以上问题时发现有共同的回代与逆回代过程,所以以子程序来简化m文件,在解决问题时细心分析就会简化问题。
c=a(i,k)/a(k,k);
forj=k:n+1
a(i,j)=a(i,j)-c*a(k,j)
end
end
end
x=huidai(a);
3.)三角分解法:
functionx=LU(A,b)
n=length(A)
A=[A b]
L=eye(n)
U=zeros(n)
fori=1:n-1
forj=i:n-1
Huidai.M文件:
functionx=huidai(a)
n=length(a)-1;
fori=n:-1:1
s=0;
ifi==n
x(i)=(a(n,n+1)-s)/a(n,n);
else
forj=n:-1:i
s=s+a(i,j)*x(j);
end
x(i)=(a(i,n+1)-s)/a(i,i);
end
实验题目
编写四个解线性方程组的程序
评 分
1、设计(实习)目的:
1.了解MATLAB在实际问题中的应用
2.通过实践加深对这门语言中M文件的了解
3.掌握运用matlab解决实际数学问题
2、实验内容:
运用matlab编写程序:
Gauss消去法
列主元消去法
LU三角分解法
3.详细设计:
由于以下四种消元法均含有回代与逆回代过程,因此事先编写的子文件如下:
s=0
end
end
1.)Gauss消去法:
functionx=Gauss(A,b)
a=[A b];
x=[];
n=length(a)-1;
fork=1:n
fori=k+1:n
c=a(i,k)/a(k,k);
forj=k:n+1
a(i,j)=a(i,j)-c*a(k,j)
end
end
end
x=huidai(a);
相关文档
最新文档