归并排序
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)