数值分析各种代码Word下载.docx
《数值分析各种代码Word下载.docx》由会员分享,可在线阅读,更多相关《数值分析各种代码Word下载.docx(5页珍藏版)》请在冰豆网上搜索。
1
x(j)=y(j)-u(j)*x(j+1);
拉格朗日
functionyh=lagrange(x,y,xh)
n=length(x);
m=length(xh);
yh=zeros(1,m);
c1=ones(n-1,1);
c2=ones(1,m);
fori=1:
xp=x([1:
i-1i+1:
n]);
yh=yh+y(i)*prod((c1*xh-xp'
*c2)./(x(i)-xp'
*c2));
end
线性
x=[x1,x2]y=[y1.y2]xh=[xh]
抛物线
X=[x1,x2,x3]y=[y1,y2,y3]xh=[xh]
牛顿差商(输入x,y为列向量)
function[p,q]=chashang(x,y)
p(:
1)=x;
2)=y;
forj=3:
n+1
p(1:
n+2-j,j)=diff(p(1:
n+3-j,j-1))./(x(j-1:
n)-x(1:
n+2-j));
q=p(1,2:
n+1)'
;
三次样条
x=[0123];
y=[0.200.52.01.5-1];
pp=csape(x,y,'
complete'
)
[breaks,coefs,npolys,ncoefs,dim]=unmkpp(pp)
最小二乘
x=[0.240.650.951.241.732.012.232.522.772.99]'
y=[0.23-0.26-1.1-0.450.270.1-0.290.240.561]'
A=[log(x)cos(x)exp(x)];
Z=A\y;
a0=Z
(1)
a1=Z
(2)
a2=Z(3)
x=[00.250.500.751.00];
y=[1.001.2841.64872.11702.7183];
p=polyfit(x,y,2)
a2=p
(1)
a1=p
(2)
a0=p(3)
复合中点
functionI=fmid(fun,a,b,n)
h=(b-a)/n;
x=linspace(a+h/2,b-h/2,n);
y=feval(fun,x);
I=h*sum(y);
复合梯形
functionI=ftrapz(fun,a,b,n)
x=linspace(a,b,n+1);
I=h*(0.5*y
(1)+0.5*y(n+1)+sum(y(2:
n)));
复合辛普森
functionI=fsimpson(fun,a,b,n)
x=linspace(a,b,2*n+1);
I=h/6*(y
(1)+y(2*n+1)+2*sum(y(3:
2:
2*n-1))+4*sum(y(2:
2*n)));
雅克比迭代
function[x,iter]=jacobi(A,b,tol)
D=diag(diag(A));
L=D-tril(A);
U=D-triu(A);
x=zeros(size(b));
foriter=1:
500
x=D\(b+U*x+L*x);
error=norm(b-A*x)/norm(b);
if(error<
tol)
break;
GS迭代
function[x,iter]=GS(A,b,tol)
x=(D-L)\(b+U*x);
SOR迭代
function[x,iter]=SOR(A,b,omega,tol)
x=(D-omega*L)\(omega*b+(1-omega)*D*x+omega*U*x);
二分法
functionv=f(x)
v=x^3-x-1;
functionx=erfenfa(f,a,b,tol)
ifnargin<
4
tol=1e-5;
fa=feval(f,a);
fb=feval(f,b);
whileabs(a-b)>
tol
x=(a+b)/2;
fx=feval(f,x);
ifsign(fx)==sign(fa)
a=x;
fa=fx;
elseifsign(fx)==sign(fb)
b=x;
fb=fx;
>
x=erfenfa('
f'
1,2)
牛顿法
function[x,it]=newton(f,g,x0,tol)
it=0;
done=0;
while~done
x=x0-feval(f,x0)/feval(g,x0);
it=it+1;
done=(norm(x-x0)<
=tol);
if~done
x0=x;
functionr=f(x)
r=polyval([1,2,10,-20],x);
functionr=g(x)
p=polyder([1,2,10,-20]);
r=polyval(p,x);
牛顿下山法
乘幂法
function[t,y]=chengmifa(a,xinit,ep)
v0=xinit;
[tv,ti]=max(abs(v0));
lam0=v0(ti);
u0=v0/lam0;
flag=0;
while~flag
v1=a*u0;
[tv,ti]=max(abs(v1));
lam1=v1(ti);
u0=v1/lam1;
err=abs(lam0-lam1);
iferr<
ep
flag=1
lam0=lam1;
t=lam1;
y=u0;
反幂法
function[t,y]=fanmifa(a,xinit,ep)
v1=inv(a)*u0;
flag=1;
t=1/lam1;
改进欧拉法
function[x,y]=odeIEuler(f,y0,a,b,n)
x=a:
h:
b;
y
(1)=y0;
yp=y(i)+h*feval(f,x(i),y(i));
yc=y(i)+h*feval(f,x(i+1),yp);
y(i+1)=1/2*(yp+yc);
functionr=f(x,y)
r=y-2*x/y;