数值分析算法在matlab中的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,网格节点数据的插值

相关文档
最新文档