分享一下数值分析经常遇到的算法,代码有点多;算法原理之类的网上均可以找到,本文只给出对应的代码实现。
1、线性代数的直接接法
%追赶法求解线性方程组Ax=b,其中A是三对角方阵function x=tridiagsolver(A,b)[n,n]=size(A);for i=1:n if(i==1) l(i)=A(i,i); y(i)=b(i)/l(i); else i l(i)=A(i,i)-A(i,i-1)*u(i-1); y(i)=(b(i)-A(i,i-1)*y(i-1))/l(i); end if(i u(i)=A(i,i+1)/l(i); endendx(n)=y(n);for j=n-1:-1:1 x(j)=y(j)-x(j+1)*u(j);end
调用程序
clcclearA=[2,-1,0,0;-1,3,-2,0;0,-2,4,-3;0,0,-3,5];b=[6;1;-2;1];x= tridiagsolver(A,b)
2、插值法
2.1 拉格朗日插值法
function yh=lagrange(x,y,xh)n=length(x);m=length(xh);yh=zeros(1,m);for j=1:m; for i=1:n xp=x([1:i-1 i+1:n]); yh(j)=yh(j)+y(i)*prod((xh(j)-xp)./(x(i)-xp)); %注意区分yh和y endend
调用程序