(完整word版)数值分析的MATLAB程序
数值分析MATLAB编程-推荐下载
题目三:设������(������) = ������������,在[-1,1]上用 Legendre 多项式作������(������)的 3 次最佳平方逼近多项式。 >> a=-1;b=1; >> n=3; >> syms x; >> fx=exp(x); >> exp(x); >> for k=3 F=x^k*fx; d(k+1)=int(F,a,b); end >> d=reshape(d,n+1,1); >> H=hilb(n+1); >Fra bibliotek a=H\d a=
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
(完整word版)含答案《MATLAB实用教程》
第二章 MATLAB 语言及应用实验项目实验一 MATLAB 数值计算三、实验内容与步骤1.创建矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=987654321a(1(2)用(3)用(42.矩阵的运算(1)利用矩阵除法解线性方程组。
⎪⎪⎩⎪⎪⎨⎧=+++=-+-=+++=+-12224732258232432143214321421x x x x x x x x x x x x x x x 将方程表示为AX=B ,计算X=A\B 。
(2)利用矩阵的基本运算求解矩阵方程。
已知矩阵A 和B 满足关系式A -1BA=6A+BA ,计算矩阵B 。
其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=7/10004/10003/1A ,Ps: format rata=[1/3 0 0;0 1/4 0;0 0 1/7];b=inv(a)*inv(inv(a)-eye(3))*6*a(3)计算矩阵的特征值和特征向量。
已知矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=1104152021X ,计算其特征值和特征向量。
(4)Page:322利用数学函数进行矩阵运算。
已知传递函数G(s)=1/(2s+1),计算幅频特性Lw=-20lg(1)2(2w )和相频特性Fw=-arctan(2w),w 的范围为[0.01,10],按对数均匀分布。
3.多项式的运算(1)多项式的运算。
已知表达式G(x)=(x-4)(x+5)(x 2-6x+9),展开多项式形式,并计算当x 在[0,20]内变化时G(x)的值,计算出G(x)=0的根。
Page 324(2)多项式的拟合与插值。
将多项式G(x)=x 4-5x 3-17x 2+129x-180,当x 在[0,20]多项式的值上下加上随机数的偏差构成y1,对y1进行拟合。
对G(x)和y1分别进行插值,计算在5.5处的值。
Page 325 四、思考练习题1.使用logspace 函数创建0~4π的行向量,有20个元素,查看其元素分布情况。
Ps: logspace(log10(0),log10(4*pi),20) (2) sort(c,2) %顺序排列 3.1多项式1)f(x)=2x 2+3x+5x+8用向量表示该多项式,并计算f(10)值. 2)根据多项式的根[-0.5 -3+4i -3-4i]创建多项式。
数值分析算法在matlab中的实现
数值分析matlab实现高斯消元法: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,所以此方程组无解.')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,所以此方程组有无穷多解.')endendX列主元消去法: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,所以此方程组有无穷多解.')endendXJacobi迭代法:例1用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4)其中A=[8-11;2 10-1;11-5];b=[1;4;3]。
数值分析matlab程序实例
1,秦九韶算法,求出P(x=3)=2+4x+5x^2+2x^3的值clear all;x=3;n=3;a(1)=2;a(2)=4;a(3)=5;a(4)=2v(1)=a(n+1);for k=2:(n+1);v(k)=x*v(k-1)+a(n-k+2);endp=v(n+1)p=,1132,一次线型插值程序:利用100.121.求115的开方。
clear all;x1=100;x2=121;y1=10;y2=11;x=115;l1=(x-x2)/(x1-x2);l2=(x-x1)/(x2-x1);p1=l1*y1+l2*y2p1=10.71433,分段插值程序,已知为S1(x)为(0,0),(1,1),(2,5)(3,8)上的分段一次插值,求S1(1.5).clear allx=[0123];y=[0158];n=length(x);a=1.5;for i=2:nif(x(i-1)<=a<x(i));endendH1=y(i-1)+(y(i)-y(i-1))/(x(i)-x(i-1))*(a-x(i-1))H1=3.50004)曲线拟合:用一个5次多项式在区间[0,2π]内逼近函数sin(x)。
clear allX=linspace(0,2*pi,50);Y=sin(X);[P,S]=polyfit(X,Y,5)plot(X,Y,'k*',X,polyval(P,X),'k-')P=-0.00560.0874-0.39460.26850.87970.0102S=R:[6x6double]df:44normr:0.03375)求有理分式的导数clear allP=[3,5,0,-8,1,-5];Q=[10,5,0,0,6,0,0,7,-1,0,-100];[p,q]=polyder(P,Q)6)将以下数据按从小到大排序:4.3 5.7 5.2 1.89.4a=[4.35.75.21.89.4];b(1:100)=0;n=1;b(a*10)=1;for k=1:100a(n)=k/10;if b(k)>0a(n)=k/10;n=n+1;endendaa=1.8000 4.3000 5.2000 5.70009.400010.00007)用二分法求方程x 3-x-1=0在[1,2]内的近似根,要求误差不超过10-3。
(完整word版)同济大学数值分析matlab编程题汇编
MATLAB 编程题库 1.下面的数据表近似地满足函数21cxbax y ++=,请适当变换成为线性最小二乘问题,编程求最好的系数c b a ,,,并在同一个图上画出所有数据和函数图像.625.0718.0801.0823.0802.0687.0606.0356.0995.0628.0544.0008.0213.0362.0586.0931.0ii y x ----解:x=[-0.931 -0.586 -0.362 -0.213 0.008 0.544 0.628 0.995]'; y=[0.356 0.606 0.687 0.802 0.823 0.801 0.718 0.625]'; A=[x ones(8,1) -x.^2.*y]; z=A\y;a=z(1); b=z(2); c=z(3); xh=-1:0.1:1;yh=(a.*xh+b)./(1+c.*xh.^2); plot(x,y,'r+',xh,yh,'b*')2.若在Matlab工作目录下已经有如下两个函数文件,写一个割线法程序,求出这两个函数10 的近似根,并写出调用方式:精度为10解:>> edit gexianfa.mfunction [x iter]=gexianfa(f,x0,x1,tol)iter=0;while(norm(x1-x0)>tol)iter=iter+1;x=x1-feval(f,x1).*(x1-x0)./(feval(f,x1)-feval(f,x0));x0=x1;x1=x;end>> edit f.mfunction v=f(x)v=x.*log(x)-1;>> edit g.mfunction z=g(y)z=y.^5+y-1;>> [x1 iter1]=gexianfa('f',1,3,1e-10)x1 =1.7632iter1 =6>> [x2 iter2]=gexianfa('g',0,1,1e-10)x2 =0.7549iter2 =83.使用GS 迭代求解下述线性代数方程组:123123123521242103103x x x x x x x x x ì++=-ïïïï-++=íïïï-+=ïî解:>> edit gsdiedai.mfunction [x iter]=gsdiedai(A,x0,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); iter=0; x=x0;while((norm(b-A*x)./norm(b))>tol) iter=iter+1; x0=x;x=(D-L)\(U*x0+b); end>> A=[5 2 1;-1 4 2;1 -3 10]; >> b=[-12 10 3]'; >>tol=1e-4; >>x0=[0 0 0]';>> [x iter]=gsdiedai(A,x0,b,tol); >>x x =-3.0910 1.2372 0.9802 >>iter iter = 64.用四阶Range-kutta 方法求解下述常微分方程初值问题(取步长h=0.01),(1)2x dy y e xy dx y ìïï=++ïíïï=ïî解:>> edit ksf2.mfunction v=ksf2(x,y) v=y+exp(x)+x.*y;>> a=1;b=2;h=0.01; >> n=(b-a)./h; >> x=[1:0.01:2]; >>y(1)=2;>>fori=2:(n+1)k1=h*ksf2(x(i-1),y(i-1));k2=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k1); k3=h*ksf2(x(i-1)+0.5*h,y(i-1)+0.5*k2); k4=h*ksf2(x(i-1)+h,y(i-1)+k3); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end >>y调用函数方法>> edit Rangekutta.mfunction [x y]=Rangekutta(f,a,b,h,y0) x=[a:h:b]; n=(b-a)/h; y(1)=y0; fori=2:(n+1)k1=h*(feval(f,x(i-1),y(i-1)));k2=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k1)); k3=h*(feval(f,x(i-1)+0.5*h,y(i-1)+0.5*k2)); k4=h*(feval(f,x(i-1)+h,y(i-1)+k3)); y(i)=y(i-1)+(k1+2*k2+2*k3+k4)./6; end>> [x y]=Rangekutta('ksf2',1,2,0.01,2); >>y5.取0.2h =,请编写Matlab 程序,分别用欧拉方法、改进欧拉方法在12x ≤≤上求解初值问题。
数值分析matlab
plot(90,389,'*r')
hold on
grid
A=[30,50,70,90];
B=[133,221,305,Βιβλιοθήκη 89];norm(A,2)
norm(B,2)
程序运行如图:
x =
40 60 80
y =
177 263 352
p2 =
0.0037 3.9250 14.0000
二.解题方法描述、程序代码、结果展示
x=[40,60,80]
y=[177,263,352]
plot(x,y,'*r')
hold on
grid
p2=polyfit(x,y,2)
py2=polyval(p2,x)
plot(x,py2,'b')
a=polyfit(x,y,length(x)-1);
poly2sym(a)
一.问题
已知E和C的关系如下表,E为自变量,C为函数
n
0
1
2
3
4
5
6
En
30
40
50
60
70
80
90
Cn
133
177
221
263
305
352
389
求:以n=1、3、5,三点为测试点进行2阶多项式插值和线性拟合,在一幅图中分别画出7个离散的点和两条曲线(插值和拟合各一条),并以n=0、2、4、6为检验点进行二范数误差分析。
plot(x,y);
图像:
求得多项式为0.0037x^2+3.9250x+14.0000.
数值分析matlab代码
1、%用牛顿法求f(x)=x-sin x 的零点,e=10^(-6)disp('牛顿法');i=1;n0=180;p0=pi/3;tol=10^(-6);for i=1:n0p=p0-(p0-sin(p0))/(1-cos(p0));if abs(p-p0)<=10^(-6)disp('用牛顿法求得方程的根为')disp(p);disp('迭代次数为:')disp(i)break;endp0=p;endif i==n0&&~(abs(p-p0)<=10^(-6))disp(n0)disp('次牛顿迭代后无法求出方程的解')end2、disp('Steffensen加速');p0=pi/3;for i=1:n0p1=0.5*p0+0.5*cos(p0);p2=0.5*p1+0.5*cos(p1);p=p0-((p1-p0).^2)./(p2-2.*p1+p0);if abs(p-p0)<=10^(-6)disp('用Steffensen加速求得方程的根为')disp(p);disp('迭代次数为:')disp(i)break;endp0=p;endif i==n0&&~(abs(p-p0)<=10^(-6))disp(n0)disp('次Steffensen加速后无法求出方程的解')end1、%使用二分法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('二分法')a=0.2;b=0.26;tol=0.0001;n0=10;fa=600*(a.^4)-550*(a.^3)+200*(a.^2)-20*a-1;for i=1:n0p=(a+b)/2;fp=600*(p.^4)-550*(p.^3)+200*(p.^2)-20*p-1;if fp==0||(abs((b-a)/2)<tol)disp('用二分法求得方程的根p=')disp(p)disp('二分迭代次数为:')disp(i)break;endif fa*fp>0a=p;else b=p;endendif i==n0&&~(fp==0||(abs((b-a)/2)<tol))disp(n0)disp('次二分迭代后没有求出方程的根')end2、%使用牛顿法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('牛顿法')p0=0.3;for i=1:n0p=p0-(600*(p0.^4)-550*(p0.^3)+200*(p0.^2)-20*p0-1)./(2400*(p0.^3) -1650*p0.^2+400*p0-20);if(abs(p-p0)<tol)disp('用牛顿法求得方程的根p=')disp(p)disp('牛顿迭代次数为:')disp(i)break;endp0=p;endif i==n0&&~(abs(p-p0)<tol)disp(n0)disp('次牛顿迭代后没有求出方程的根')end3、%使用割线法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('割线法')p0=0.2;p1=0.25;q0=600*(p0.^4)-550*(p0.^3)+200*(p0.^2)-20*p0-1;q1=600*(p1.^4)-550*(p1.^3)+200*(p1.^2)-20*p1-1;for i=2:n0p=p1-q1*(p1-p0)/(q1-q0);if abs(p-p1)<toldisp('用割线法求得方程的根p=')disp(p)disp('割线法迭代次数为:')disp(i)break;endp0=p1;q0=q1;pp=p1;p1=p;q1=600*(p.^4)-550*(p.^3)+200*(p.^2)-20*p-1;endif i==n0&&~(abs(p-pp)<tol)disp(n0)disp('次割线法迭代后没有求出方程的根')end4、%使用试位法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('试位法')p0=0.2;p1=0.25;q0=600*(p0.^4)-550*(p0.^3)+200*(p0.^2)-20*p0-1;q1=600*(p1.^4)-550*(p1.^3)+200*(p1.^2)-20*p1-1;for i=2:n0p=p1-q1*(p1-p0)/(q1-q0);if abs(p-p1)<toldisp('用试位法求得方程的根p=')disp(p)disp('试位法迭代次数为:')disp(i)break;endq=600*(p.^4)-550*(p.^3)+200*(p.^2)-20*p-1;if q*q1<0p0=p1;q0=q1;endpp=p1;p1=p;q1=q;endif i==n0&&~(abs(p-pp)<tol)disp(n0)disp('次试位法迭代后没有求出方程的根')end5、%使用muller方法找到方程 600 x^4 -550 x^3 +200 x^2 -20 x -1 =0 在区间[0.1,1]上的根,%误差限为 e=10^-4disp('muller法')x0=0.1;x1=0.2;x2=0.25;h1=x1-x0;h2=x2-x1;d1=((600*(x1.^4)-550*(x1.^3)+200*(x1.^2)-20*x1-1)-(600*(x0.^4)-55 0*(x0.^3)+200*(x0.^2)-20*x0-1))/h1;d2=((600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)-(600*(x1.^4)-55 0*(x1.^3)+200*(x1.^2)-20*x1-1))/h2;d=(d2-d1)/(h2+h1);for i=3:n0b=d2+h2*d;D=(b*b-4*(600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)*d)^0.5;if(abs(d-D)<abs(d+D))E=b+D;else E=b-D;endh=-2*(600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)/E;p=x2+h;if abs(h)<toldisp('用muller方法求得方程的根p=')disp(p)disp('muller方法迭代次数为:')disp(i)break;endx0=x1;x1=x2;x2=p;h1=x1-x0;h2=x2-x1;d1=((600*(x1.^4)-550*(x1.^3)+200*(x1.^2)-20*x1-1)-(600*(x0.^4)-55 0*(x0.^3)+200*(x0.^2)-20*x0-1))/h1;d2=((600*(x2.^4)-550*(x2.^3)+200*(x2.^2)-20*x2-1)-(600*(x1.^4)-55 0*(x1.^3)+200*(x1.^2)-20*x1-1))/h2;d=(d2-d1)/(h2+h1);endif i==n0%条件有待商榷?!disp(n0)disp('次muller方法迭代后没有求出方程的根')end1、%观察Lagrange插值的Runge现象x=-1:0.05:1;y=1./(1+25.*x.*x);plot(x,y),grid on;n=5;x=-1:2/n:1;y=1./(1+25.*x.*x);for i=1:n+1q(1,i)=y(i);endh=0.05;z=-1:h:1;for k=1:2/h+1for i=2:n+1for j=2:iq(j,i)=((z(k)-x(i-j+1))*q(j-1,i)-(z(k)-x(i))*q(j-1,i-1))/(x(i)-x( i-j+1));endendw(k)=q(n+1,n+1);endhold on, plot(z,w,'r'),grid on;%**** n=10 ****n=10;x=-1:2/n:1;y=1./(1+25.*x.*x);for i=1:n+1q(1,i)=y(i);endh=0.05;z=-1:h:1;for k=1:2/h+1for i=2:n+1for j=2:iq(j,i)=((z(k)-x(i-j+1))*q(j-1,i)-(z(k)-x(i))*q(j-1,i-1))/(x(i)-x( i-j+1));endendw(k)=q(n+1,n+1);endhold on,plot(z,w,'k'),grid on;legend ('原始图','n=5','n=10');2、%固支样条插植%********第一段********x=[1,2,5,6,7,8,10,13,17];a=[3,3.7,3.9,4.2,5.7,6.6,7.1,6.7,4.5];n=numel(a);for i=1:n-1h(i)=x(i+1)-x(i);endA=[2*h(1),h(1),0,0,0,0,0,0,0;h(1),2*(h(1)+h(2)),h(2),0,0,0,0,0,0;0,h(2),2*(h(2)+h(3)),h(3),0,0,0,0,0;0,0,h(3),2*(h(3)+h(4)),h(4),0,0,0,0;0,0,0,h(4),2*(h(4)+h(5)),h(5),0,0,0;0,0,0,0,h(5),2*(h(5)+h(6)),h(6),0,0;0,0,0,0,0,h(6),2*(h(6)+h(7)),h(7),0;0,0,0,0,0,0,h(7),2*(h(7)+h(8)),h(8);0,0,0,0,0,0,0,h(8),2*h(8)];e=[3*(a(2)-a(1))/h(1)-3;3*(a(3)-a(2))/h(2)-3*(a(2)-a(1))/h(1);3*(a(4)-a(3))/h(3)-3*(a(3)-a(2))/h(2);3*(a(5)-a(4))/h(4)-3*(a(4)-a(3))/h(3);3*(a(6)-a(5))/h(5)-3*(a(5)-a(4))/h(4);3*(a(7)-a(6))/h(6)-3*(a(6)-a(5))/h(5);3*(a(8)-a(7))/h(7)-3*(a(7)-a(6))/h(6);3*(a(9)-a(8))/h(8)-3*(a(8)-a(7))/h(7);3*(-0.67)-3*(a(9)-a(8))/h(8)];c=inv(A)*e;for i=1:8b(i)=(a(i+1)-a(i))/h(i)-h(i)*(2*c(i)+c(i+1))/3;d(i)=(c(i+1)-c(i))/(3*h(i));endfor i=1:8z=x(i):0.05:x(i+1);w=a(i)+b(i).*(z-x(i))+c(i).*(z-x(i)).^2+d(i).*(z-x(i)).^3; grid on, plot(z,w),hold on;end%********第二段********x=[17,20,23,24,25,27,27.7];a=[4.5,7,6.1,5.6,5.8,5.2,4.1];for i=1:6h(i)=x(i+1)-x(i);endA=[2*h(1),h(1),0,0,0,0,0;h(1),2*(h(1)+h(2)),h(2),0,0,0,0;0,h(2),2*(h(2)+h(3)),h(3),0,0,0;0,0,h(3),2*(h(3)+h(4)),h(4),0,0;0,0,0,h(4),2*(h(4)+h(5)),h(5),0;0,0,0,0,h(5),2*(h(5)+h(6)),h(6)0,0,0,0,0,h(6),2*h(6)];e=[3*(a(2)-a(1))/h(1)-3*3;3*(a(3)-a(2))/h(2)-3*(a(2)-a(1))/h(1);3*(a(4)-a(3))/h(3)-3*(a(3)-a(2))/h(2);3*(a(5)-a(4))/h(4)-3*(a(4)-a(3))/h(3);3*(a(6)-a(5))/h(5)-3*(a(5)-a(4))/h(4);3*(a(7)-a(6))/h(6)-3*(a(6)-a(5))/h(5);3*(-4)-3*(a(7)-a(6))/h(6)];c=inv(A)*e;for i=1:6b(i)=(a(i+1)-a(i))/h(i)-h(i)*(2*c(i)+c(i+1))/3;d(i)=(c(i+1)-c(i))/(3*h(i));endfor i=1:6z=x(i):0.05:x(i+1);w=a(i)+b(i).*(z-x(i))+c(i).*(z-x(i)).^2+d(i).*(z-x(i)).^3; grid on, plot(z,w),hold on;end%********第三段********x=[27.7,28,29,30];a=[4.1,4.3,4.1,3];for i=1:3h(i)=x(i+1)-x(i);endA=[2*h(1),h(1),0,0;h(1),2*(h(1)+h(2)),h(2),0;0,h(2),2*(h(2)+h(3)),h(3);0,0,h(3),2*h(3)];e=[3*(a(2)-a(1))/h(1)-3*0.33;3*(a(3)-a(2))/h(2)-3*(a(2)-a(1))/h(1);3*(a(4)-a(3))/h(3)-3*(a(3)-a(2))/h(2);3*(-1.5)-3*(a(4)-a(3))/h(3)];c=inv(A)*e;for i=1:3b(i)=(a(i+1)-a(i))/h(i)-h(i)*(2*c(i)+c(i+1))/3;d(i)=(c(i+1)-c(i))/(3*h(i));endfor i=1:3z=x(i):0.05:x(i+1);w=a(i)+b(i).*(z-x(i))+c(i).*(z-x(i)).^2+d(i).*(z-x(i)).^3; grid on, plot(z,w),hold on;endgrid on,title('注:横纵坐标的比例不一样!!!');1、%用不动点迭代法求方程 x-e^x+4=0的正根与负根,误差限是10^-6%disp('不动点迭代法');n0=100;p0=-5;for i=1:n0p=exp(p0)-4;if abs(p-p0)<=10^(-6)if p<0disp('|p-p0|=')disp(abs(p-p0))disp('不动点迭代法求得方程的负根为:')disp(p);break;elsedisp('不动点迭代法无法求出方程的负根.')endelsep0=p;endendif i==n0disp(n0)disp('次不动点迭代后无法求出方程的负根')endp1=1.7;for i=1:n0pp=exp(p1)-4;if abs(pp-p1)<=10^(-6)if pp>0disp('|p-p1|=')disp(abs(pp-p1))disp('用不动点迭代法求得方程的正根为')disp(pp);elsedisp('用不动点迭代法无法求出方程的正根');endbreak;elsep1=pp;endendif i==n0disp(n0)disp('次不动点迭代后无法求出方程的正根')end2、%用牛顿法求方程 x-e^x+4=0的正根与负根,误差限是10^-6 disp('牛顿法')n0=80;p0=1;for i=1:n0p=p0-(p0-exp(p0)+4)/(1-exp(p0));if abs(p-p0)<=10^(-6)disp('|p-p0|=')disp(abs(p-p0))disp('用牛顿法求得方程的正根为')disp(p);break;elsep0=p;endendif i==n0disp(n0)disp('次牛顿迭代后无法求出方程的解')endp1=-3;for i=1:n0p=p1-(p1-exp(p1)+4)/(1-exp(p1));if abs(p-p1)<=10^(-6)disp('|p-p1|=')disp(abs(p-p1))disp('用牛顿法求得方程的负根为')disp(p);break;elsep1=p;endendif i==n0disp(n0)disp('次牛顿迭代后无法求出方程的解')end1、使用欧拉法、改进欧拉法和四阶R-K方法求下列微分方程的解。
数值分析MATLAB代码
% LU分解% 算例A=[1 2 3;1 3 5;1 3 6],b=[2 3 4]'function lufun(A,b)n=length(A);L=zeros(n);U=zeros(n);y=ones(n,1);x=ones(n,1);for i=1:nL(i,i)=1;endfor i=1:nfor j=1:nif i>jU(i,j)=0;L(j,i)=0;endendendfor i=1:nfor j=i:nU(i,j)=A(i,j);endfor j=i+1:nL(j,i)=A(j,i)/U(i,i);endfor j=i+1:nfor k=i+1:nA(j,k)=A(j,k)-L(j,i)*U(i,k);endendendfor k=1:ns=0;for j=1:k-1s=s+L(k,j)*y(j);endy(k)=b(k)-s;endfor k=n:(-1):1s=0;for j=k+1:ns=s+U(k,j)*x(j);endx(k)=(y(k)-s)/U(k,k);endL,U,y,x % 顺序Gauss消去法解线性方程组function x=gauss(A,b)n=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);endx=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% Jacobi-迭代法% 系数矩阵,A=[5 2 1;-1 4 2;2 -3 10]% 常数向量,b=[-12;20;3]% 初值向量,x0=[-3;1;1]function Jacfun(A,b,x0)D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=D\(L+U);F=D\b;format longn=1x=B*x0+Fwhile norm(x-x0)>=1e-3x0=x;n=n+1x=B*x0+Fif n>=500breakendend% SOR迭代法% A=[4 -1 0;-1 4 -1;0 -1 4];% b=[1;4;-3];% x0=[0 0 0]';function sorfun(A,b,x0)w=0.8;D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);n=1x=inv(D-w*L)*((1-w)*D+w*U)*x0+w*inv(D-w*L)*bwhile norm(x-x0)>=1e-6x0=x;n=n+1x=inv(D-w*L)*((1-w)*D+w*U)*x0+w*inv(D-w*L)*bif n>=500breakendend% GS-迭代法% 系数矩阵,A=[5 2 1;-1 4 2;2 -3 10]% 常数向量,b=[-12;20;3]% 初值向量,x0=[-3;1;1]function gsfun(A,b,x0)D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=(D-L)\U;F=(D-L)\b;n=1x=B*x0+Fwhile norm(x-x0)>=1e-9x0=x;n=n+1x=B*x0+Fif n>=500breakendend% 乘幂法求主特征值特征向量% v特征值,u特征向量% m----最大特征值% 算例A=[-12 3 3;3 1 -2;3 -2 7]function cmfun(A)k=length(A);n=0;m1=0;u=ones(k,1);while n<=500n=n+1v=A*ufor i=1:n[m,i]=max(abs(v));endm=v(i);u=v/mif abs(m-m1)<1e-8breakendm1=m;end% QR分解% 算例A=[1 2 2;2 2/3 -1;2 1/3 -1],求A的QR分解function qrfun(A)n=length(A);A0=A;s=0;for j=1:n-1for i=j:ns=s+A(i,j)^2;enda=sign(A(j,j))*sqrt(s);b=A(j,j)+a;u=A(j:n,j);u(1)=b;t=length(u);R1=eye(t)-u*u'/(a*b);H=blkdiag(eye(n-t),R1);A1=H*A;A=A1;s=0;endR=AQ=A0/REnd 用雅可比法求特征值和特征向量算例A=[1 1 0.5;1 1 0.25;0.5 0.25 2];function jcbfun(A)n=length(A);Q0=eye(n);I=1;J=1;for k=1:400B=triu(A,1)+tril(A,-1);% 求矩阵B中绝对值最大的元素及所在的行和列a=0;for i=1:nfor j=1:nif a<abs(B(i,j))I=i;J=j;a=abs(B(i,j));endendendI;J;a=B(I,J);% 求平面旋转变换矩阵的相位角tif A(I,I)==A(J,J)t=pi*sign(A(I,J))/4;elsed=-2*A(I,J)/(A(I,I)-A(J,J));t=atan(d)/2;end% 求平面旋转矩阵PP=eye(n);P(I,I)=cos( t);P(I,J)=sin( t);P(J,I)=-sin( t);P(J,J)=cos( t);kA1=P'*A*P;A=A1Q=Q0*PQ0=Q;B=triu(A,1)+tril(A,-1);if norm(B,'fro')<=1e-9breakendend% A为实对称矩阵时,则可约化为三对角矩阵% 算例A=[1 2 1 2;2 2 -1 1;1 -1 1 1;2 1 1 1];function sdjfun(A)a1=sign(A(2,1))*sqrt(A(2,1)^2+A(3,1)^2+A(4,1)^2);b1=A(2,1)+a1;u1=[b1;A(3,1);A(4,1)];R1=eye(3)-u1*u1'/(a1*b1);H1=blkdiag(eye(1),R1)A1=H1*A*H1A=A1;a2=sign(A(3,2))*sqrt(A(3,2)^2+A(4,2)^2);b2=A(3,2)+a2;u2=[b2;A(4,2)];R2=eye(2)-u2*u2'/(a2*b2);H2=blkdiag(eye(2),R2)A2=H2*A*H2H=H2*H1A=A2% 拉格朗日插值函数% 算例x=[-2 -0.8 0.4 1.2];y=[1 1.4 1.8 2.0];function lagfun(x,y)syms t;n=length(x);s=0;for i=1:nla=y(i);for j=1:nif j~=ila=la*(t-x(j))/(x(i)-x(j));endends=s+la;simplify(s);ends=subs(s,'t','x');s=collect(s);s=vpa(s,6)% 牛顿插值法% 算例x=[-1 0 1 2 3];y=[-2 1 3 4 8]; function newton(x,y)syms p;s=y(1);t=0;d=1;n=length(x);for i=1:n-1for j=i+1:nt(j)=(y(j)-y(i))/(x(j)-x(i));endtemp(i)=t(i+1);d=d*(p-x(i));s=s+temp(i)*d;y=t;ends=subs(s,'p','x');y=simplify(s)龙贝格求积function romberg(a,b,f)tol=0.5e-5;n=1;h=b-a;delt=1;x=a;k=0;R=zeros(4,4);R(1,1)=h*(f(a)+f(b))/2;while delt>tolk=k+1h=h/2;s=0;for j=1:nx=a+h*(2*j-1);s=s+f(x);endR(k+1,1)=R(k,1)/2+h*s;n=2*n;for i=1:kR(k+1,i+1)=((4*i)*R(k+1,i)-R(k,i))/(4*i-1);enddelt=abs(R(k+1,k)-R(k+1,k+1)); s=R(k+1,k+1)endfunction z=f(x)z=@(x)4/(1+x^2); % 三次样条插值(第一类边界条件)% X为插值点,Y为插值点对应的函数值,dY为插值点两端点对应的一阶导数值% 算例X=[1 2 3];Y=[2 4 2];dY=[1 -1];function spline3(X,Y,dY)N=size(X,2);m=5;s0=dY(1); sN=dY(2);h=zeros(1,N-1);for i=1:N-1h(1,i)=X(i+1)-X(i);endd(1,1)=6*((Y(1,2)-Y(1,1))/h(1,1)-s0)/h(1,1);d(N,1)=6*(sN-(Y(1,N)-Y(1,N-1))/h(1,N-1))/h(1,N-1);for i=2:N-1d(i,1)=6*((Y(1,i+1)-Y(1,i))/h(1,i)-(Y(1,i)-Y(1,i-1))/h(1,i-1))/(h(1,i)+h(1,i-1));endmu=zeros(1,N-1);md=zeros(1,N-1);md(1,N-1)=1;mu(1,1)=1;for i=1:N-2u=h(1,i+1)/(h(1,i)+h(1,i+1));mu(1,i+1)=u;md(1,i)=1-u;endp(1,1)=2;q(1,1)=mu(1,1)/2;for i=2:N-1p(1,i)=2-md(1,i-1)*q(1,i-1);q(1,i)=mu(1,i)/p(1,i);endp(1,N)=2-md(1,N-1)*q(1,N-1);y=zeros(1,N);y(1,1)=d(1)/2;for i=2:Ny(1,i)=(d(i)-md(1,i-1)*y(1,i-1))/p(1,i);endx=zeros(1,N);x(1,N)=y(1,N);for i=N-1:-1:1x(1,i)=y(1,i)-q(1,i)*x(1,i+1);endM=x;syms t;digits (m);for i=1:N-1pp(i)=M(i)*(X(i+1)-t)^3/(6*h(i))+M(i+1)*(t-X(i))^3/(6*h(i))+(Y(i)-M(i)*h(i)^2/6)*(X(i+1)-t)/h(i)+(Y(i+1)-M(i+1)*h(i)^2/6)*(t-X(i))/h(i)pp(i)=simplify(pp(i));f=sym2poly(pp(i));if length(f)~=4tt=f(1:3); f(1:4)=0; f(2:4)=tt;ends=sym(f,'d');s=poly2sym(s,'t');fprintf('在区间[%f,%f]内',X(i),X(i+1));send% 四级四阶龙格库塔方法% 算例y'=1-y ,y(0)=0(0<=x<=1),步长h=0.1% Runge_Kutta( 0, 0, 0.1, 20)function Runge_Kutta(x0, y0, h, n)x=zeros(n+1,1);y=zeros(n+1,1);x(1)=x0;y(1)=y0;for i=1:nx(i+1)=x(i)+h;k1=h*f(x(i),y(i));k2=h*f(x(i)+1/2*h,y(i)+1/2*k1);k3=h*f(x(i)+1/2*h,y(i)+1/2*k2);k4=h*f(x(i)+h,y(i)+k3);y(i+1)=y(i)+1/6*(k1+2*k2+2*k3+k4);endT=[x,y]% 显式欧拉法function E=Euler(x0,y0,xn,n)x=zeros(n+1,1);y=zeros(n+1,1);x(1)=x0;y(1)=y0;h=(xn-x0)/n;for i=1:nx(i+1)=x(i)+h;y(i+1)=y(i)+h*f(x(i),y(i));endT=[x,y]。
matlab简单程序运用-数值分析篇
1:三次样条插值法h0=figure('toolbar','none',...'position',[200 50 350 450],...'name','实例86');h1=axes('parent',h0,...'position',[0.10 0.45 0.8 0.5],...'visible','off');x=0:0.2:2*pi;y=sin(x);plot(x,y)b1=uicontrol('parent',h0,...'units','points',...'tag','b1',...'style','pushbutton',...'string','三次样条插值',...'backgroundcolor',[0.75 0.75 0.75],...'position',[20 60 70 20],...'callback',[...'y=0,',...'sy=0,',...'strn1=get(e2,''string'');,',...'n1=str2num(strn1);,',...'strn2=get(e3,''string'');,',...'n2=str2num(strn2);,',...'x=n1:0.2:n2;,',...'i=1;,',...'for t=n1:0.2:n2,',...'y(i)=sin(t);,',...'sy(i)=san(t,n1,n2);,',...'i=i+1;,',...'end,',...'plot(x,y,''b*'',x,sy,''r-''),',...'axis([0 7 -1.5 1.5]),',...'legend(''sin(x)'',''N-Hermite插值'')']); b2=uicontrol('parent',h0,...'units','points',...'tag','b2',...'style','pushbutton',...'string','误差比较',...'backgroundcolor',[0.75 0.75 0.75],...'position',[170 60 70 20],...'callback',[...'strdn1=get(e2,''string'');,',...'n1=str2num(strdn1);,',...'strdn2=get(e3,''string'');,',...'n2=str2num(strdn2);,',...'strdn=get(e1,''string'');,',...'dn=str2num(strdn);,',...'dd=abs(sin(dn)-san(dn,n1,n2));,',...'msgbox([''误差为:'',num2str(dd)],''计算结果'')']); e1=uicontrol('parent',h0,...'units','points',...'tag','e1',...'style','edit',...'fontsize',12,...'string','1.20',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[200 100 40 20]);t1=uicontrol('parent',h0,...'units','points',...'tag','t1',...'style','text',...'string','误差点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[160 100 40 20]);e2=uicontrol('parent',h0,...'units','points',...'tag','e2',...'style','edit',...'fontsize',12,...'string','1.00',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[20 85 40 20]);t2=uicontrol('parent',h0,...'units','points',...'tag','t2',...'style','text',...'string','第一节点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[15 105 50 20]);e3=uicontrol('parent',h0,...'units','points',...'tag','e3',...'fontsize',12,...'string','3.00',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[100 85 40 20]);t3=uicontrol('parent',h0,...'units','points',...'tag','t3',...'style','text',...'string','第二节点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[95 105 50 20]);b3=uicontrol('parent',h0,...'units','points',...'tag','b3',...'style','pushbutton',...'string','关闭',...'backgroundcolor',[0.75 0.75 0.75],...'position',[100 20 60 20],...'callback','close');2:NEWTON插值h0=figure('toolbar','none',...'position',[200 50 350 450],...'name','实例87');h1=axes('parent',h0,...'position',[0.10 0.45 0.8 0.5],...'visible','off');x=0:0.2:2*pi;y=sin(x);plot(x,y)b1=uicontrol('parent',h0,...'units','points',...'tag','b1',...'style','pushbutton',...'string','牛顿插值',...'backgroundcolor',[0.75 0.75 0.75],...'position',[20 60 70 20],...'callback',[...'strn=get(e1,''string'');,',...'n=str2num(strn);,',...'x=0:0.2:2*pi;,',...'for t=0:0.2:2*pi,',...'y(i)=sin(t);,',...'ynt(i)=newton(t,n);,',...'i=i+1;,',...'end,',...'plot(x,y,''b*'',x,ynt,''r-''),',...'axis([0 7 -1.5 1.5]),',...'legend(''sin(x)'',''牛顿插值'')']);b2=uicontrol('parent',h0,...'units','points',...'tag','b2',...'style','pushbutton',...'string','误差比较',...'backgroundcolor',[0.75 0.75 0.75],...'position',[170 60 70 20],...'callback',[...'strn=get(e1,''string'');,',...'n=str2num(strn);,',...'strdn=get(e2,''string'');,',...'dn=str2num(strdn);,',...'dd=abs(sin(dn)-newton(dn,n));,',...'msgbox([''误差为:'',num2str(dd)],''计算结果'')']); e1=uicontrol('parent',h0,...'units','points',...'tag','e1',...'style','edit',...'fontsize',12,...'string','5',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[50 100 40 20]);e2=uicontrol('parent',h0,...'units','points',...'tag','e2',...'style','edit',...'fontsize',12,...'string','1.20',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[200 100 40 20]);t1=uicontrol('parent',h0,...'units','points',...'tag','t1',...'string','节点数:(<6)',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[10 100 40 30]);t2=uicontrol('parent',h0,...'units','points',...'tag','t2',...'style','text',...'string','误差点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[160 100 40 20]);b3=uicontrol('parent',h0,...'units','points',...'tag','b3',...'style','pushbutton',...'string','关闭',...'backgroundcolor',[0.75 0.75 0.75],...'position',[100 20 60 20],...'callback','close');3mewton形式的hermite插值h0=figure('toolbar','none',...'position',[200 50 350 450],...'name','实例89');h1=axes('parent',h0,...'position',[0.10 0.45 0.8 0.5],...'visible','off');x=0:0.2:2*pi;y=sin(x);plot(x,y)b1=uicontrol('parent',h0,...'units','points',...'tag','b1',...'style','pushbutton',...'string','N-Hermite插值',...'backgroundcolor',[0.75 0.75 0.75],...'position',[20 60 70 20],...'callback',[...'strn1=get(e2,''string'');,',...'n1=str2num(strn1);,',...'strn2=get(e3,''string'');,',...'n2=str2num(strn2);,',...'x=0:0.2:2*pi;,',...'i=1;,',...'for t=0:0.2:2*pi,',...'y(i)=sin(t);,',...'ynh(i)=nhermite(t,n1,n2);,',...'i=i+1;,',...'end,',...'plot(x,y,''b*'',x,ynh,''r-''),',...'axis([0 7 -1.5 1.5]),',...'legend(''sin(x)'',''N-Hermite插值'')']);b2=uicontrol('parent',h0,...'units','points',...'tag','b2',...'style','pushbutton',...'string','误差比较',...'backgroundcolor',[0.75 0.75 0.75],...'position',[170 60 70 20],...'callback',[...'strdn1=get(e2,''string'');,',...'n1=str2num(strdn1);,',...'strdn2=get(e3,''string'');,',...'n2=str2num(strdn2);,',...'strdn=get(e1,''string'');,',...'dn=str2num(strdn);,',...'dd=abs(sin(dn)-nhermite(dn,n1,n2));,',...'msgbox([''误差为:'',num2str(dd)],''计算结果'')']); e1=uicontrol('parent',h0,...'units','points',...'tag','e1',...'style','edit',...'fontsize',12,...'string','1.20',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[200 100 40 20]);t1=uicontrol('parent',h0,...'units','points',...'tag','t1',...'style','text',...'string','误差点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[160 100 40 20]);e2=uicontrol('parent',h0,...'units','points',...'tag','e2',...'style','edit',...'fontsize',12,...'string','1.00',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[20 85 40 20]);t2=uicontrol('parent',h0,...'units','points',...'tag','t2',...'style','text',...'string','第一节点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[15 105 50 20]);e3=uicontrol('parent',h0,...'units','points',...'tag','e3',...'style','edit',...'fontsize',12,...'string','3.00',...'horizontalalignment','right',...'backgroundcolor',[1 1 1],...'position',[100 85 40 20]);t3=uicontrol('parent',h0,...'units','points',...'tag','t3',...'style','text',...'string','第二节点:',...'fontsize',12,...'backgroundcolor',[0.75 0.75 0.75],...'position',[95 105 50 20]);b3=uicontrol('parent',h0,...'units','points',...'tag','b3',...'style','pushbutton',...'string','关闭',...'backgroundcolor',[0.75 0.75 0.75],...'position',[100 20 60 20],...'callback','close');。
三种迭代法matlab程序 数值分析
•
end
• end
• err=abs(norm(X'-P));
• P=X';
• if(err<delta)
•
break
• end
• end
• X=X';
• err,k
function X=jacobi(A,b,P,delta,max1) %A是n维非奇异阵。%b是n维向量。%P是初值。%delta是误差界。 %max1是给定的迭代最高次数。%X为所求的方程组AX=b的近似解。 N=length(b); for k=1:max1 for j=1:N
X(j)=(b(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j); end err=abs(norm(X'-P)); P=X'; if(err<delta)
break end end X=X';k,erction X=gseid(A,b,P,delta,max1)
• %A是n维非奇异阵。%b是n维向量。%P是初值。
• %delta是误差界。%max1是给定的迭代最高次数。%X为所求的方程组AX=b的近似解。
• N=length(b);
• for k=1:max1
• for j=1:N
•
if j==1
•
X(1)=(b(1)-A(1,2:N)*P(2:N))/A(1,1);
•
elseif j==N
•
X(N)=(b(N)-A(N,1:N-1)*(X(1:N-1))')/A(N,N);
•
else
•
X(j)=(b(j)-A(j,1:j-1)*X(1:j-1)-A(j,j+1:N)*P(j+1:N))/A(j,j);
(完整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中作出离散点和拟合曲线图。
《数值分析及其MATLAB实现》篇MATLAB快速入门word
4.2 微积分运算4.2.1 导数在MA TLAB 系统中为用户提供了一元显函数求导的符号计算函数diff ,可以调用此函数求符号导数,不但使用方便,而且计算准确,迅速,尤其是求结构复杂的高阶导数更显示出其优越性。
用diff 可以求一元显函数的各阶导函数和在某点处的各阶导数。
在这里将一元显函数)(x f y =的各阶导函数 ,''',",'y y y 分别记作 ,,,yxxx yxx yx 。
用diff 作符号求导函数和在一点处的导数的调用格式和功能如表4-1。
表4-1 求一元显函数)(x f y =的各阶导函数的MA TLAB 方法[例1] 设一元函数))25sin(23arctan(32-+=x x y ,求y 的一阶导函数)('x y 和四阶导函数)()4(x y。
解 下面用函数diff 的两种调用格式求解。
(1)输入计算y 对x 的一阶导函数和四阶导函数的程序:>> syms x yy=atan(3*x^2+2*sin(5*x^3-2)); yx=diff (y,x); yx4=diff (y,x,4);y1=simple(yx), pretty(y1) y4=simple(yx4), pretty(y4)运行后屏幕显示y 对x 的一阶导数和四阶导数如下:y1 =(6*x+30*cos(5*x^3-2)*x^2)/(1+(3*x^2+2*sin(5*x^3-2))^2) y4 =(101250*sin(5*x^3-2)*x^8-81000*cos(5*x^3-2)*x^5-9000*sin(5*x^3-2)*x^2)/(1+(3*x^2+2*sin(5*x^3-2))^2)-8*(-6750*cos(5*x ^3-2)*x^6-2700*sin(5*x^3-2)*x^3+60*cos(5*x^3-2))/(1+(3*x^2+2*s in(5*x^3-2))^2)^2*(3*x^2+2*sin(5*x^3-2))*(6*x+30*cos(5*x^3-2)*x^2)+48*(6-450*sin(5*x^3-2)*x^4+60*cos(5*x^3-2)*x)/(1+(3*x^2+2*sin(5*x^3-2))^2)^3*(3*x^2+2*sin(5*x^3-2))^2*(6*x+30*cos(5*x^3-2)*x^2)^2-12*(6-450*sin(5*x^3-2)*x^4+60*cos(5*x^3-2)*x)/(1+(3*x^2+2*sin(5*x^3-2))^2)^2*(6*x+30*cos(5*x^3-2)*x^2)^2-6*(6-450*sin(5*x^3-2)*x^4+60*cos(5*x^3-2)*x)^2/(1+(3*x^2+2*sin(5*x^3-2))^2)^2*(3*x^2+2*sin(5*x^3-2))-48*(6*x+30*cos(5*x^3-2)*x^2)^4/(1+(3*x^2+2*sin(5*x^3-2))^2)^4*(3*x^2+2*sin(5*x^3-2))^3+24*(6*x+30*cos(5*x^3-2)*x^2)^4/(1+(3*x^2+2*sin(5*x^3-2))^2)^3*(3*x^2+2*sin(5*x^3-2))(2) 用下面的MATLAB 程序分别计算y 对x 的一阶导数和四阶导数:>> syms x yyx=diff((6*x+30*cos(5*x^3-2)*x^2)/(1+(3*x^2+2*sin(5*x^3-2))^2),x)yx4=diff((6*x+30*cos(5*x^3-2)*x^2)/(1+(3*x^2+2*sin(5*x^3-2))^2),x,4)所得到的结果与(1)相同。
数值分析中常用的matlab程序
1.% 最小二乘法拟合数据点方法1:% 左除右除:xA=B ==> x=B/A | Ax=B ==> x=B\A% A 表示拟合函数的组合,如:多项式插值,A=[1,x,x.^2,...,x.^n],表示拟合函数为% 多项式:s(x)=a0+a1*x+...+an*x^n;又如:A=[log(x),cos(x),exp(x)]%则表示拟合函数为s(x)=a0*ln(x)+a1*cos(x)+a2*exp(x)% 法方程为:A'*A*z=A'*y ==> A*z=y ==> z=A\y z=(a0,...,an)'% Date: 2012-1-1clear;clc;x=[0 0.25 0.5 0.75 1]';y=[1 1.284 1.6487 2.1170 2.7183]';%索要拟合的数据点x1=ones(size(x),1);A=[x1 x x.^2];%拟合函数Z=A\y %A中每列函数的参数% 最小二乘法拟合数据方法2:采用polyfit函数% Date:2012-1-1clear;clc;x=[0 0.25 0.5 0.75 1]';y=[1 1.284 1.6487 2.1170 2.7183]';%索要拟合的数据点p=polyfit(x,y,2) %polyfit(x,y,n),(x,y)为数据点坐标,n为拟合多项式阶数,p 为% 所求拟合多项式的幂次从高到低排列的系数。
2.% 复合梯形公式计算积分值% 输入:fun--积分函数;a,b--积分区间;n--区间等分数% 输出:I--数值积分结果% 调用格式(ex):re=ftrapz(@fun1,0,1,10)% 2012-1-1function I=ftrapz(fun,a,b,n)h=(b-a)/n;%区间等分x=linspace(a,b,n+1);%将a到b的区间等分成(n+1)-1个区间,数据点有(n+!)个y=feval(fun,x);I=h*(0.5*y(1)+sum(y(2:n))+0.5*y(n+1));%积分原函数% Date:2012-1-1function y=fun1(x)y=exp(-x);3.% 复合simpson公式求积分% 输入:fun--积分函数;a,b--积分区间;n--区间等分数% 输出:I--数值积分结果% 调用格式(ex):re=fsimpson(@fun1,0,1,10)% 2012-1-1function I=fsimpson(fun,a,b,n)h=(b-a)/n;x=linspace(a,b,2*n+1);y=feval(fun,x);I=(h/6)*(y(1)+2*sum(y(3:2:2*n-1))+4*sum(y(2:2:2*n))+y(2*n+1));4.% 两点GS-Legendre公式求积分% 输入:fun--积分函数;a,b--积分区间;% 输出:I--数值积分结果% 调用格式(ex):re=GSLege(@fun2,0,1)% 2012-1-1function I=GSLege(fun,a,b)%将区间[a.b]通过变量替换x=(a+b)/2-(b-a)/2*t变到[-1,1]%其中t取GS-Lege的高斯点m1=feval(fun,(a+b)/2+(b-a)/2*(-1/sqrt(3)));m2=feval(fun,(a+b)/2+(b-a)/2*(1/sqrt(3)));I=(b-a)/2*(m1+m2);% GS-Legendre公式的积分函数% Date:2012-1-1function y=fun2(x)y=sin(x)/x;5.% 追赶法求解线性方程组Ax=b,其中A是三对角方阵%function x=tridiagsolver(A,b)clear;clc;A=[2 -1 0 0;-1 3 -2 0;0 -2 4 -3;0 0 -3 5];%三对角矩阵,线性方程组系数矩阵b=[6,1,-2,1]';%[n,n]=size(A);for i=1:nif(i<2)l(i)=A(i,i);y(i)=b(i)/l(i);u(i)=A(i,i+1)/l(i);elseif i<nl(i)=A(i,i)-A(i,i-1)*u(i-1);y(i)=(b(i)-y(i-1)*A(i,i-1))/l(i);u(i)=A(i,i+1)/l(i);elsel(i)=A(i,i)-A(i,i-1)*u(i-1);y(i)=(b(i)-y(i-1)*A(i,i-1))/l(i);endendx(n)=y(n);for j=n-1:-1:1x(j)=y(j)-u(j)*x(j+1);endx6.% SOR迭代求解非线性方程组Ax=b% 输入:A--系数矩阵;b--;omega--松弛因子(0~2);tol--精度% 输出:x--方程的解向量;iter--迭代次数;% 调用格式(ex):[x,iter=sor(A,b,1.1,1e-4)% 2012-1-1%function [x,iter]=sor(A,b,omega,tol)%{%}clear;clc;A=[2 -1 0;-1 3 -1;0 -1 2];b=[1 8 -5]';omega=1.1;tol=1e-4;D=diag(diag(A));%diag(A)返回的是A的对角元组成的列向量;diag(b)返回的是以列向量b为对角元的方阵;L=D-tril(A);%tril(A)返回的是矩阵A的下三角矩阵;U=D-triu(A);%triu(A)返回的是矩阵A的上三角矩阵;x=zeros(size(b));%给定迭代初始值零向量iter=1;while iter<500x=(D-omega*L)\(omega*b+(1-omega)*D*x+omega*U*x);%迭代格式error=norm(b-A*x)/norm(b);%收敛条件if error<tolbreak;enditer=iter+1;endif iter>= 500fprintf('root not found!');end7.% 牛顿法求解非线性方程的根% 输入:fun--非线性函数;dfun--非线性函数导数;x0--初始值;tol--精度;% 输出:x--非线性方程数值根% 调用格式(ex):x=newton(@fun3,@dfun3,6,1e-3)% 2012-1-1function x=newton(fun,dfun,x0,tol)iter=1;if abs(feval(fun,x0))<tolx=x0;return;endwhile iter<500if iter==1x=x0-feval(fun,x0)/feval(dfun,x0);if abs(feval(fun,x))<tolbreak;endelsex=x-feval(fun,x)/feval(dfun,x);if abs(feval(fun,x))<tolbreak;endenditer=iter+1;endif iter==500fprintf('not successful!');x=NaN;end% newton的函数文件% Date:2012-1-1function y=fun3(x)y=3.*x.^3-8.*x.^2-8.*x-11;% newton的导函数文件% Date:2012-1-1function y=dfun3(x)y=9.*x.^2-16.*x-8;8.% 两点割线法求解非线性方程的根% 输入:fun--非线性函数;a,b--两个初始值;tol--精度;% 输出:x--非线性方程数值根% 调用格式(ex):x=gexian(@fun3,3,6,1e-3)% 2012-1-1function x=gexian(fun,a,b,tol)iter=1;xk1=a;xk2=b;while iter<500xk3=xk2-feval(fun,xk2)*(xk2-xk1)/(feval(fun,xk2)-feval(fun,xk1));if abs(feval(fun,xk3))<tolbreak;elsexk1=xk2;xk2=xk3;enditer=iter+1;endif iter==500fprintf('not successful!');x=NaN;elsex=xk3;end9.% 乘幂法求矩阵的按模最大特征值及其特征向量% 输入:A--要求的矩阵;v0--初始非零向量;tol--精度;% 输出:x--特征向量;lam--按模最大特征值% 调用格式(ex):[lam,x]=power(A,v0,1e-2)% 2012-1-1function [lam,x]=matrixpower(A,v0,tol)v1=A*v0;v2=A*v1;sum=0;p=0;for i=1:size(v1)if v1(i)~=0sum=sum+v2(i)/v1(i);p=p+1;endendlam0=sum/p;iter=2;vk1=v2;while iter<500vk2=A*vk1;sum=0;p=0;for i=1:size(vk1)if vk1(i)~=0sum=sum+vk2(i)/vk1(i);p=p+1;endendlam=sum/p;if abs(lam-lam0)<tolbreak;elselam0=lam;vk1=vk2;endendif iter==500fprintf('not successful!');lam=NaN;elsex=vk2;end9_2% 改进乘幂法求矩阵的按模最大特征值及其特征向量% 输入:A--要求的矩阵;v0--初始非零向量;tol--精度;% 输出:x--特征向量;lam--按模最大特征值% 调用格式(ex):[lam,x]=pMatrixPower(A,v0,1e-2)% Date:2012-1-2function [lam,x]=pMatrixPower(A,v0,tol)[ty,ti]=max(abs(v0));%返回v0中元素绝对值最大的元素值与下标,ti为下标lam0=v0(ti);u0=v0/lam0;iter=1;while iter<500v1=A*u0;[tv,ti]=max(abs(v1));lam1=v1(ti);u0=v1/lam1;if abs(lam0-lam1)<tolbreak;elselam0=lam1;iter=iter+1;endendif iter>=500fprintf('not successful!');lam=NaN;elselam=lam1;x=u0;end10.% 反幂法求矩阵的按模最小特征值及其特征向量% 输入:A--要求的矩阵;v0--初始非零向量;tol--精度;% 输出:x--特征向量;lam--按模最大特征值% 调用格式(ex):[lam,x]=invMatrixPower(A,v0,1e-2)% Date:2012-1-2function [lam,x]=invMatrixPower(A,v0,tol)[ty,ti]=max(abs(v0));lam0=v0(ti);u0=v0/lam0;iter=1;while iter<500v1=A\u0;[tv,ti]=max(abs(v1));lam1=v1(ti);u0=v1/lam1;if abs(1/lam0-1/lam1)<tolbreak;elselam0=lam1;iter=iter+1;endendif iter>=500fprintf('not successful!');lam=NaN;elselam=1/lam1;x=u0;end11.% 欧拉方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=odeEuler(@fun4,0,1,1,10)% Date:2012-1-2function y=odeEuler(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;x=a:h:b;for i=1:ny(i+1)=y(i)+h*feval(fun,x(i),y(i));end% 常微分方程fun4=0% Date:2012-1-2function re=fun4(x,y)re=y-2*x/y;12.% 改进欧拉公式(预估--校正)方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=pOdeEuler(@fun4,0,1,1,10)% Date:2012-1-2function y=pOdeEuler(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;x=a:h:b; for i=1:nyp=y(i)+h*feval(fun,x(i),y(i));yc=y(i)+h*feval(fun,x(i+1),yp);y(i+1)=0.5*(yp+yc);end13.% 梯形方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=trapezium(@fun4,0,1,1,10)% Date:2012-1-2function y=trapezium(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;x=a:h:b;tol=1e-6;for i=1:n%用不动点迭代的方法求解非线性方程:%y(i+1)=y(i)+h*feval(fun,x(i),y(i))/2+h*feval(fun,x(i),y(i+1))/2;iter=1;yy0=1+(i-1)*h;%迭代初始值while iter<500yy1=y(i)+h*feval(fun,x(i),y(i))/2+h*feval(fun,x(i)+h,yy0)/2;if abs(yy1-yy0)<tolbreak;elseyy0=yy1;iter=iter+1;endendif iter>=500printf('not successful!');y=NaN;return;elsey(i+1)=yy1;endend14.% 标准四阶四段龙格-库塔方法求解一阶常微分方程初值问题% 输入:fun--一阶常微分函数;a,b--求解区间;y0--函数在a点值y(a);n--所分区间数;% 输出:y--常微分方程在区间[a,b]上各点的数值解;% 调用格式(ex):y=longekuta(@fun4,0,1,1,10)% Date:2012-1-2function y=longekuta(fun,a,b,y0,n)h=(b-a)/n;y(1)=y0;for k=2:n+1x=a+(k-2)*h;k1=h*feval(fun,x,y(k-1));k2=h*feval(fun,x+h/2,y(k-1)+k1/2);k3=h*feval(fun,x+h/2,y(k-1)+k2/2);k4=h*feval(fun,x+h,y(k-1)+k3);y(k)=y(k-1)+(k1+2*k2+2*k3+k4)/6;end15.插值% 拉格朗日插值% 输入:x,y--插值数据点(x,y均为行向量);xh--要插值的点; % 输出:yh--插值结果;% 调用格式(ex):yh=lagrange(x,y,xh)% Date:2012-1-2function yh=lagrange(x,y,xh)n=length(x);m=length(xh);yh=zeros(1,m);c1=ones(n-1,1);c2=ones(1,m);for i=1:nxp=x([1:i-1 i+1:n]);yh=yh+y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2));%prod对输入的一个向量返回其所有分量的乘积end%拉格朗日调用clear;clc;x=[11 12];y=[2.3979 2.4849];xh=11.75;yh=lagrange(x,y,xh)15_2% 牛顿插值% 输入:x,y--插值数据点(x,y均为行向量);xh--要插值的点; % 输出:yh--插值结果;% 调用格式(ex):yh=newtonPol(x,y,xh)% Date:2012-1-2function yh=newtonPol(x,y,xh)n=length(x);p(:,1)=x;p(:,2)=y;for j=3:n+1p(1:n+2-j,j)=diff(p(1:n+3-j,j-1))./(x(j-1:n)-x(1:n+2-j))';%求差商表endq=p(1,2:n+1)';%求牛顿法的系数--取第一行yh=0;m=1;yh=q(1);for i=2:nm=q(i);for j=2:im=m*(xh-x(j-1));%求牛顿法中各多项式值(xh-x0)…(xh-x n-1) endyh=yh+m;%求和end%牛顿插值调用clear;clc;x=[11 12 13];y=[2.3979 2.4849 2.5649];xh=11.75;yh=newtonPol(x,y,xh)。
数值分析matlab程序
数值分析(matlab程序)曹德欣曹璎珞第一章绪论数值稳定性程序,计算P11 试验题一积分function try_stableglobal nglobal aa=input('a=');N = 20;I0 = log(1+a)-log(a);I = zeros(N,1);I(1) = -a*I0+1;for k = 2:NI(k) = - a*I(k-1)+1/k;endII = zeros(N,1);if a>=N/(N+1)II(N) = (1+2*a)/(2*a*(a+1)*(N+1));elseII(N) =(1/((a+1)*(N+1))+1/N)/2;endfor k = N:-1:2II(k-1) = ( - II(k) +1/k) / a;endIII = zeros(N,1);for k = 1:Nn = k;III(k) = quadl(@f,0,1);endclcfprintf('\n 算法1结果算法2结果精确值') for k = 1:N,fprintf('\nI(%2.0f) %17.7f %17.7f %17.7f',k,I(k),II(k),III(k)) endfunction y = f(x)global nglobal ay = x.^n./(a+x);return第二章非线性方程求解下面均以方程y=x^4+2*x^2-x-3为例:1、二分法function y=erfen(a,b,esp)format longif nargin<3 esp=1.0e-4;endif fun(a)*fun(b)<0n=1;c=(a+b)/2;while c>espif fun(a)*fun(c)<0b=c;c=(a+b)/2;elseif fun(c)*fun(b)<0a=c;c=(a+b)/2;else y=c; esp=10000;endn=n+1;endy=c;elseif fun(a)==0y=a;elseif fun(b)==0y=b;else disp('these,nay not be a root in the intercal')endnfunction y=fun(x)y=x^4+2*x^2-x-3;2、牛顿法function y=newton(x0)x1=x0-fun(x0)/dfun(x0);n=1;while (abs(x1-x0)>=1.0e-4) & (n<=100000000)x0=x1;x1=x0-fun(x0)/dfun(x0);n=n+1;endy=x1nfunction y=fun(x)y=x^4+2*x^2-x-3; 3、割线法function y=gexian(x0,x1)x2=x1-fun(x1)*(x1-x0)/(fun(x1)-fun(x0)); %根据初始XO 和X1求X2 n=1;while (abs(x1-x0)>=1.0e-4) & (n<=100000000) %判断两个条件截止 x0=x1; %将x1赋给x0 x1=x2; %将x2赋给x1 x2=x1-fun(x1)*(x1-x0)/(fun(x1)-fun(x0)); %迭代运算 n=n+1; end y=x2 nfunction y=fun(x)y=x^4+2*x^2-x-3;第四章题目:推导外推样条公式:⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--------1232123211223322~~~~~22~n n n n n n n n d d d d M M M Mδμλμλμλδ,并编写程序与Matlab 的Spline 函数结果进行对比,最后调用追赶法解方程组。
数值分析matlab函数.docx
1.求数值积分: fx=@(x)exp( 1 ./x);» quadl(fx,l,5)2 •获取x=xlsread( 'oillack.xls ;r sh eetl'a 1:a 73')excel文件名是oillack.xls, sheetl是表名,a1:a73‘是a列的1到73行long x=xlsread(T:\学习\大三\大三下\巷道力学模型\新建文件夹(2)\l.xlsx‘,'sheetl;'a2:a')3. 在matlab的图中插入文本框后将文本框旋转的方法:text(0.5,0.6;渗透率/mD7Rotation',90)4. matlab中插入一条直线的方法:line([0.01 0.01],[0 1.75])5. Matlab中画三维图x=-7.5:0.5:7.5; y=x; % 先产生x 及y 二个阵列» [x,y]=meshgrid(x,y); % 再以meshgrid 形成二维的网格数据» z=x.A2+y.A2; %产生z轴的数据» mesh(x,y,z) %将z轴的变化值以网格方式闹岀>> surf(x, y, z) %将z轴的变化值以曲血方式画出Matlab指数拟合方法x=[1982 1992 2002];y=[103.5 34.5 23.3];cftool (x, y)在弹出的对话框选择fitting,弹岀新的对话框选择new fit,然后在第三个下拉菜单(Type of fit)屮选择Exponential,然后点击Apply,即可;最麻结果General model Expl:f(x) = a*exp(b*x)Coefficients (with 95% confidence bounds):a= 1.453e+082 (-7.288e+084,7.317e+084) b= -0.09312 (-0.3464, 0」602)6 ◎入excel表格数据Xlswrite(4文件名,,变量,‘sheet','A P)7.档中的Text Properties:上标用八(指数)F标用_(F划线)斜体\it黑体\bf希腊字母等特殊字符用\加拼音如希腊字母等特殊字符用\加拼音如P\rho密度参数a \alpha卩\betay \gamma匸\theta0 \Thetar \Gamma8 \deltaA \Dclta& \xiE\Xi8 \eltas \epsilon8 \zctau \miuu \nun \tauX \lambdaA \Lambda兀\pin\PiC \sigmaE \Sigmao \phi0 \PhiV \psi屮\Psix \chi3 \omegaQ \Omega< \leq>\geq不等于\neq« Ml»\gg 正负\pm 左箭头\leftarrow 右箭头\rightarrow 上箭头\uparrow例text(2,3 ,'\alpha_2A\beta*)注:可用{}把须放在一•起的括起來Matlab图形中允许用TEX文件格式来显示字符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
列主元法
function lianzhuyuan(A,b)
n=input('请输入n:') %选择阶数A=zeros(n,n); %系数矩阵A
b=zeros(n,1); %矩阵b
X=zeros(n,1); %解X
for i=1:n
for j=1:n
A(i,j)=(1/(i+j-1)); %生成hilbert矩阵A
end
b(i,1)=sum(A(i,:)); %生成矩阵b
end
for i=1:n-1
j=i;
top=max(abs(A(i:n,j))); %列主元
k=j;
while abs(A(k,j))~=top %列主元所在行
k=k+1;
end
for z=1:n %交换主元所在行a1=A(i,z);
A(i,z)=A(k,z);
A(k,z)=a1;
end
a2=b(i,1);
b(i,1)=b(k,1);
b(k,1)=a2;
for s=i+1:n %消去算法开始m=A(s,j)/A(i,j); %化简为上三角矩阵
A(s,j)=0;
for p=i+1:n
A(s,p)=A(s,p)-m*A(i,p);
end
b(s,1)=b(s,1)-m*b(i,1);
end
end
X(n,1)=b(n,1)/A(n,n); %回代开始
for i=n-1:-1:1
s=0; %初始化s
for j=i+1:n
s=s+A(i,j)*X(j,1);
end
X(i,1)=(b(i,1)-s)/A(i,i);
end
X
欧拉法
clc
clear
% 欧拉法
p=10; %贝塔的取值
T=10; %t取值的上限
y1=1; %y1的初值
r1=1; %y2的初值
%输入步长h的值
h=input('欧拉法please input number(h=1 0.5 0.25 0.125 0.0625):h=') ; if h>1 or h<0
break
end
S1=0:T/h;
S2=0:T/h;
S3=0:T/h;
S4=0:T/h;
i=1;
% 迭代过程
for t=0:h:T
Y=(exp(-t));
R=(1/(p-1))*exp(-t)+((p-2)/(p-1))*exp(-p*t);
y=y1+h*(-y1);
y1=y;
r=r1+h*(y1-p*r1);
r1=r;
S1(i)=Y;
S2(i)=R;
S3(i)=y;
S4(i)=r;
i=i+1;
end
t=[0:h:T];
% 红线为解析解,'x'为数值解
plot(t,S1,'r',t,S3,'x')
改进欧拉法
clc
clear
p=10; %贝塔的取值
T=10; %t取值的上限
y1=1; %y1的初值
r1=1; %y2的初值
%输入步长h的值
h=input('改进欧拉法please input number(h=1 0.5 0.25 0.125 0.0625):h=') ; if h>1 or h<0
break
end
S1=0:T/h;
S2=0:T/h;
S3=0:T/h;
S4=0:T/h;
i=1;
% 迭代过程
for t=0:h:T
Y=(exp(-t));
R=(1/(p-1))*exp(-t)+((p-2)/(p-1))*exp(-p*t);
k1=-y1;
l1=y1-p*r1;
k2=-(y1+h*k1);
l2=y1+h*k1-p*(r1+h*l1);
y=y1+h*(k1+k2)/2;
r=r1+h*(k1+k2)/2;
r1=r;
y1=y;
S1(i)=Y;
S2(i)=R;
S3(i)=y;
S4(i)=r;
i=i+1;
end
t=[0:h:T];
% 红线为解析解,'x'为数值解
plot(t,S1,'r',t,S3,'x')
高斯-赛德尔
function gaosisaideer
n=input('n='); %阶数
tol=input('tol='); %迭代精度
A=zeros(n,n);
b=zeros(n,1); %生成b向量
for i=1:n %给Hilbert矩阵和b向量赋值for j=1:n
A(i,j)=(1/(i+j-1));
end
b(i,1)=sum(A(i,:));
end
y=zeros(n,1); %迭代解
x1=zeros(n,1); %准确解
for i=1:n
y(i,1)=0; %迭代解赋初值
x1(i,1)=1; %生成准确解
end
k=0;
while norm(y-x1)>=tol %精度控制(采用自动步数控制) k=k+1;
for i=1:n %迭代开始
a1=0;
a2=0;
for j=1:i-1
a1=a1+A(i,j)*y(j,1);
end
for j=i+1:n
a2=a2+A(i,j)*y(j,1);
end
y(i,1)=(b(i,1)-a1-a2)/A(i,i);
end
end
disp('迭代步数k')
k
disp(y) %显示y
end
最速下降法
function gaosisaideer
n=input('阶数n='); %阶数
tol=input('迭代精度tol='); %迭代精度
eps=input('最速下降法eps=');
A=zeros(n,n);
b=zeros(n,1); %生成b向量
for i=1:n %给Hilbert矩阵和b向量赋值
for j=1:n
A(i,j)=(1/(i+j-1));
end
b(i,1)=sum(A(i,:));
end
y=zeros(n,1); %迭代解
x1=zeros(n,1); %准确解
t=zeros(n,1);
r=zeros(n,1);
for i=1:n
y(i,1)=0; %迭代解赋初值
x1(i,1)=1; %生成准确解
end
r=b-A*y;
while norm(r)>=eps; %先进行最速下降法求得进行赛德尔迭代的初始解y
t=(r'*r)/(r'*A*r);
s1=t*r;
y=y+s1;
r=b-A*y;
end
k=0;
while norm(y-x1)>=tol %精度控制(采用自动步数控制)
k=k+1;
for i=1:n %迭代开始
a1=0;
a2=0;
for j=1:i-1
a1=a1+A(i,j)*y(j,1);
end
for j=i+1:n
a2=a2+A(i,j)*y(j,1);
end
y(i,1)=(b(i,1)-a1-a2)/A(i,i);
end
end
disp('迭代步数k')
disp(k)
disp(y) %显示y
四阶龙格-库塔法
clc
clear
p=10; %贝塔的取值
T=10; %t取值的上限
y1=1; %y1的初值
r1=1; %y2的初值
%输入步长h的值
h=input('四阶龙格please input number(h=1 0.5 0.25 0.125 0.0625):h=') ; if h>1 or h<0
break
end
S1=0:T/h;
S2=0:T/h;
S3=0:T/h;
S4=0:T/h;
i=1;
% 迭代过程
for t=0:h:T
Y=(exp(-t));
R=(1/(p-1))*exp(-t)+((p-2)/(p-1))*exp(-p*t);
k1=-y1;
l1=y1-p*r1;
k2=-(y1+h*k1/2);
l2=y1+h*k1/2-p*(r1+h*l1/2);
k3=-(y1+h*k2/2);
l3=y1+h*k2/2-p*(r1+h*l2/2);
k4=-(y1+h*k3);
l4=y1+h*k3-p*(r1+h*l3);
y=y1+h*(k1+2*k2+2*k3+k4)/6;
r=r1+h*(l1+2*l2+2*l3+l4)/6;
r1=r;
y1=y;
S1(i)=Y;
S2(i)=R;
S3(i)=y;
S4(i)=r;
i=i+1;
end
t=[0:h:T];
% 红线为解析解,'x'为数值解plot(t,S1,'r',t,S3,'x')。