logo资料库

数值分析 MATLAB代码.pdf

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
MATLAB数值计算代码 G. 编写 插入排序 function Y=INSERTION_SORT(X) len=length(X); for j=2:len key=X(j); i=j-1; while(i>0&&X(i)>key) X(i+1)=X(i); i=i-1; end X(i+1)=key; end Y=X; 冒泡排序 function Y=BUBBLESORT(X) len=length(X); for i=1:len-1 for j=len:-1:(i+1) if X(j)
快速排序 function Y=QUICKSORT(X,p,r) len=length(X); if nargin<3 r=len; end if nargin<2 p=1; end if p
归并排序 function Y=MERGE_SORT(X,p,r) if nargin<3 r=length(X); end if nargin<2 p=1; end if p
秦九韶算法 function y=qin(A,x) %A为系数向量,x为求值点 %系数由高阶向低阶排列 n=length(A); y=A(1); for i=2:n y=y.*x+A(i); end 欧拉法求常微分方程数值解 function y=euler(f,x0,y0,h,x) if xabs(h)) y0=y0+f(x0,y0)*h; x0=x0+h; end h=x-x0; y=y0+f(x0,y0)*h; 改进的欧拉法 function y=euler_mod(f,x0,y0,h,x) if xabs(h)) y_p=y0+f(x0,y0)*h; x0=x0+h; y_c=y0+f(x0,y_p)*h; y0=(y_p+y_c)/2; end h=x-x0; y_p=y0+f(x0,y0)*h; x0=x0+h; y_c=y0+f(x0,y_p)*h; y=(y_p+y_c)/2;
四阶经典龙格库塔方法 function [X,Y]=RK_4_class(f,x,y0,step) %f为函数句柄,x=[x0,x1]为求解区间,y0为初值向量,step为步长 if nargin<4 step=0.01; end num=round(abs(x(2)-x(1))/step); h=(x(2)-x(1))/num; X=linspace(x(1),x(2),num+1); Y(:,1)=y0; for i=1:num K1=f(X(i),Y(:,i)); K2=f(X(i)+h/2,Y(:,i)+K1*h./2); K3=f(X(i)+h/2,Y(:,i)+K2*h./2); K4=f(X(i)+h,Y(:,i)+K3*h); Y(:,i+1)=Y(:,i)+(K1+2*K2+2*K3+K4)*h./6; end 勒让德多项式 function y=lege(x,n) %Legendre polynomial % if n==0 y=1; else if n==1 y=x; else y=((2*n-1)*x.*lege(x,n-1)-(n-1)*lege(x,n-2))./n; end end
切比雪夫多项式 function y=cheb(x,n) %Chebyshev polynomial %Find the value of chebyshev polynomial at x if n==0 y=1; else if n==1 y=x; else y=2*x.*cheb(x,n-1)-cheb(x,n-2); end end 理查德外推求微分 function df=diff_ric(f,x,h,m) %微分的理查德外推方法 %f为求微分的函数,x为微分点,h为步长,m为外推步数 if m==0 df=(f(x+h)-f(x-h))./(2*h); else df=(4^m*diff_ric(f,x,h/2,m-1)-diff_ric(f,x,h,m-1))./(4^m-1) ; end function S=inte_tra_rec(f,a,b,t) %梯形公式的外推法 %f为被积函数,a为积分上限,b为积分下限,t为外推次数 h=b-a; S=h*(f(a)+f(b))/2; if t>0 for i=1:t h=h/2; S=S/2+h*sum(f(linspace(a+h,b-h,2^(i-1)))); end end
自适应积分——辛普森方法 function y=inte_sim_ade(f,a,b,err) if nargin<4 err=0.000001; end delta=b-a; S1=(f(a)+f(b)+4*f((a+b)/2))*delta/6; delta=delta/2; S2=(f(a)+4*(f(a+delta/2)+f(a+3*delta/2))+2*f(a+delta)+f(b)) *delta/6; if abs(S1-S2)
自适应二重积分——辛普森方法 function y=inte_sim_ade2(f,a,b,c,d,err) if nargin<6 err=0.000001; end delta=d-c; S1=(inte_sim_ade(f,c,a,b,err)+inte_sim_ade(f,d,a,b,err)+4*i nte_sim_ade(f,(c+d)/2,a,b,err))*delta/6; delta=delta/2; S2=(inte_sim_ade(f,c,a,b,err)+4*(inte_sim_ade(f,c+delta/2,a ,b,err)+inte_sim_ade(f,c+3*delta/2,a,b,err))+2*inte_sim_ade (f,c+delta,a,b,err)+inte_sim_ade(f,d,a,b,err))*delta/6; if abs(S1-S2)
分享到:
收藏