数值编程.docVIP

  • 1
  • 0
  • 约2.74千字
  • 约 3页
  • 2018-05-26 发布于河南
  • 举报
数值编程

function inx=fenduaninter(zbl,fvalue,x) %分段线性插值基函数 %zbl为输入的向量组x,fvalue为函数值y, %x为基函数的取值点,inx为x点对应的函数值 zbl=[0 400 800 1200 1600 2000]; fvalue=[370 470 550 600 670 690]; [m,n]=size(zbl); if xzbl(n)|xzbl(1) display(The input value is error) end if xzbl(2) qj=1; elseif xzbl(n-1) qj=n; else for i=2:n-1 if x=zbl(i+1)x=zbl(i) qj=i; end end end %插值点所在第qj个小区间 inx=fvalue(qj)*(x-zbl(qj+1))/(zbl(qj)-zbl(qj+1)) +fvalue(qj+1)*(x-zbl(qj))/(zbl(qj+1)-zbl(qj)) %返回插值点的函数值 function gjeuler %利用改进Euler方法求解两种群捕食模型并把结果用图形显示 yp(1)=10000;yq(1)=100;%给出兔子和狐狸的初始数量 h=0.2; %数值方法的步长 k1=0.012; %模型中的参数取值 k2=0.085; c=10^-4; d=10^-5; for n=2:1000 ypp=yp(n-1)+h*(k1*yp(n-1)-c*yp(n-1)*yq(n-1)); %兔子数量的预测值 ypq=yq(n-1)+h*(-k2*yq(n-1)+d*yp(n-1)*yq(n-1)); %狐狸数量的预测值 cp=yp(n-1)+h*(k1*ypp-c*ypp*ypq); %兔子数量的校正值 cq=yq(n-1)+h*(-k2*ypq+d*ypp*ypq); %狐狸数量的校正值 yp(n)=(ypp+cp)/2; %tn时刻的兔子数量 yq(n)=(ypq+cq)/2; %tn时刻的狐狸数量 plot(yp(n),yq(n)) hold on end function x=gs(A,b,epsilon) %利用Gauss-Seidel迭代法求解线性代数方程组Ax=b的解 %A为系数矩阵,b为右端常熟向量,epsilon为误差精度 %以无穷范数为误差度量标准 [m,n]=size(A); %给出矩阵维数,m为行数,n为列数 epsilon0=1; %初始误差,保证while循环语句执行 x=zeros(1,n);y=zeros(1,n); %x,y均为初始解向量 while epsilonepsilon0 x(1)=(-sum(A(1,2:n).*y(2:n))+b(1))/A(1,1); %解的第一个分量 z(1)=y(1)-x(1); %第一个分量前后两次解的差 y(1)=x(1); for i=2:n x(i)=(b(i)-sum(A(i,1:i-1).*x(1:i-1))-sum(A(i,i+1:n).*y(i+1:n)))/A(i,i); %解的第二至第n个分量 z(i)=y(i)-x(i); %解的第二至第n个分量前后两次的差 y(i)=x(i); end epsilon0=sum(abs(z)); %前后两次解的差取无穷范数 end function [l,u]=jzhlu(a) %矩阵的LU分解。给定矩阵a,返回单位下三角矩阵l和上三角矩阵u %直接应用矩阵的lu分解,未选主元素 % a=[1 0 -2 2 3 1 5 6 0 8; % 2 1 3 0 0 5 8 -2 3 0; % 1 0 2 4 3 4 6 5 7 8; % -2 0 3 0 0 5 8 -2 3 -1; % 1 0 0 2 1 4 5 -6 7 8; % 5 4 3 0 0 5 0 -2 3 0; % -3 1 2 2 3 4 5 6 7 8; % 2 0 3 0 0 5 8 -2 0 0; % 1 -5 2 2 3 4 5 6 7 8; % 2 -1 3 0 0 5 1 -2 3 0]; [m,n]=size(a); for j=1:n u(1,j)=a(1,j); %给出u的第一行 l(j,1)=a(j,1)/u(1,1); %给出l的第一列 end i=1; for k=2:n %给出u的行(2到n)和l的列 for j=k:n for m=1:(k-1) uu(m)=l(k,m)*u(m,j); end u(k,j)=a(k,j)-sum(uu); for m

文档评论(0)

1亿VIP精品文档

相关文档