数值分析算法在matlab中的实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析matlab实现高斯消元法:
function[RA,RB,n,X]=gaus(A,b)
B=[A b];n=length(b);RA=rank(A);
RB=rank(B);zhica=RB-RA;
if zhica>0,
disp('请注意:因为RA~=RB,所以此方程组无解.')
return
end
if RA==RB
if RA==n
disp('请注意:因为RA=RB=n,所以此方程组有唯一解.')
X=zeros(n,1);C=zeros(1,n+1);
for p=1:n-1
for k=p+1:n
m=B(k,p)/B(p,p);B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1); end
end
b=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('请注意:因为RA=RB end end X 列主元消去法: function[RA,RB,n,X]=liezhu(A,b) B=[A b];n=length(b);RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('请注意:因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') X=zeros(n,1);C=zeros(1,n+1); for p=1:n-1 [Y,j]=max(abs(B(p:n,p)));C=B(p,:); B(p,:)=B(j+p-1,:);B(j+p-1,:)=C; for k=p+1:n m=B(k,p)/B(p,p);B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else disp('请注意:因为RA=RB end end X Jacobi迭代法: 例1用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4)其中A=[8-11;2 10-1;11-5];b=[1;4;3]。 解:编写jacobi迭代法的函数文件,保存为jacobi.m function[x,k]=jacobi(A,b,x0,eps,N) %求解Ax=b;x0为初始列向量;eps为误差容限;N为最大迭代次数 %输出x为近似解;k为迭代次数 n=length(A); x=zeros(n,1); for k=1:N for i=1:n ――――――― end if norm(x-x0,inf) %if(max(abs(x-x0))) break; end x0=x; end 编写主程序如下 format long clear A=[8-11;210-1;11-5]; b=[1;4;3]; x0=[0.125;0.4;-0.6];%x0为初始列向量N为最大迭代次数 err=1e-4;%err为误差容限 N=25;%N为最大迭代次数 [x,k]=jacobi(A,b,x0,err,N) 得到结果如下x=0.224923156250000.30561995000000-0.49388680000000 k=6 024 681012 Hour D e g r e e s C e l s i u s Gauss-seidel 迭代法: 例2用Gauss-seidel 迭代法求解代数线性代数方程组,保留四位有效数字(err =1e-4)其中A=[8-11;210-1;11-5];b=[1;4;3]。 解:编写Gauss-seidel 迭代法的函数文件,保存为gaus.m function [x,k]=gaus(A,b,x0,eps,N)%求解Ax=b ;x0为初始列向量;eps 为误差容限;N 为最大迭代次数 %输出x 为近似解;k 为迭代次数n=length(A);x=zeros(n,1);for k=1:N for i=1:n ――――――end if norm(x-x0,inf) break;end x0=x;end 编写主程序如下format long clear A=[8-11;210-1;11-5];b=[1;4;3]; x0=[0.125;0.4;-0.6];%x0为初始列向量N 为最大迭代次数err=1e-4;%err 为误差容限N=25;%N 为最大迭代次数[x,k]=gaus(A,b,x0,err,N)输出结果为x =0.224939378906250.30562326171875-0.49388747187500k =5用matlab 做插值计算一维插值函数: Yi=interp1(x,y,xi,’method’) 其中yi ——xi 处的插值结果;x,y ——插值节点;xi ——被插值点;’method’——插值方法,分为’nearest’—最邻近插值;’linear’—线性插值;’spline’—三次样条插值;’cubic’—立方插值。 例如: >>hours=1:12; >>temps=[589152529313022252724];>>h=1:0.1:12; >>t=interp1(hours,temps,h,'linear');>>plot(hours,temps) >>xlabel('Hour'),ylabel('Degrees Celsius')二维插值: 1,网格节点数据的插值