数值分析实验报告

发布时间:2024-11-21

数值分析实验报告

数值分析 实验报告

系 别 专 业 班级学号 姓 名 指导教师

电子信息系 计算机科学与技术

2011年 6 月20

数值分析实验报告

实验一

实验题目:

编写一个拉格朗日插值函数,对不多于9个点的插值节点都可以求出插值函数,任意给定输入x值都可以求出y值。 例如:(0,1),(1,1) ,(4,2) ,(9,3) ,(16,4) ,(25,5) ,(36,6) ,(49,7) ,(64,8),这实际上是一个平方根函数随意输入x在[0,64]上的值都可以输出一个y值。 进一步可以在这区间上画出图像。

程序代码:

function yi = Lagrange(x,y,xx) %Lagrange 差值多项式,其中 %x为向量,全部差值节点, %y为向量,差值节点处的函数值, %xi为标量,为被估计函数的自变量, %yi为xi处的函数估计值,

n = length(x);m = length(y); %输入差值节点与它的函数值应有相同个数, if n ~=m

error('The lengths of X and Y must be equal!'); return; end

p = zeros(1, n); for k =1 : n t = ones(1, n); for j = 1 : n if j ~=k

%输入差值节点必须互异

if abs(x(k)-x(j)) < eps error('the DATA is error!'); return; end

t(j) = (xx - x(j)) / (x(k) - x(j)); end end

p(k) = prod(t); end

yi = sum(y .* p); end

测试数据:

数值分析实验报告

>> clear

>> x=[0 ; 1 ; 4 ; 9 ; 16 ; 25 ; 36 ; 49 ; 64]; >> y=0:8;

>> f=interp1(x,y,y); >> F=interp1(x,y,y,'spline'); >> f,F f =

0 1.0000 1.3333 1.6667 2.0000 2.2000 2.4000 2.6000 2.8000 F =

0 1.0000 1.5601 1.8402 2.0000 2.1706 2.3682 2.5806 2.7953 >> clear

>> x=[0 ; 1 ; 4 ; 9 ; 16 ; 25 ; 36 ; 49 ; 64]; >> y=0:8; >> t=0:0.1:70;

>> f=interp1(x,y,t,'spline'); >> plot(x,y,'k+',t,f,x,y,'r') >>xlabel('x') >>ylabel('y') >>titel('y=x^1/2') 实验结果:

数值分析实验报告

f =

0 1.0000 1.3333 1.6667 2.0000 2.2000 2.4000 2.6000 2.8000 F =

0 1.0000 1.5601 1.8402 2.0000 2.1706 2.3682 2.5806 2.7953

实验二

实验题目:用不同的方法计算积分 0xlnxdx

1

4 9

取不同的步长h,分别用复合梯形公式及复合辛普森公式计算积分,给出误差中关于h的函数,并与积分精确值比较两个公式的精度,是否存在一个最小的h,使得精度不能再被改善。

程序代码:

数值分析实验报告

1.编写一个函数实现被积函数 Shiyan2.m

function [ y ] = shiyan2( x )

%UNTITLED Summary of this function goes here % Detailed explanation goes here y=log(x).*sqrt(x); end

2.使用matlab画出函数曲线 在matlab中输入

>> x = 0.01:0.001:1 >> y = shiyan2(x) >> plot(x,y,'-b')

3.编写复合梯形公式计算积分的函数 function [ y ] = echelon( h )

%UNTITLED3 Summary of this function goes here % Detailed explanation goes here

数值分析实验报告

n = length(h); y=[0,0];

for i = 1:n; temp=0.001; result = 0;

while temp+h(i)<1

x=(shiyan2(temp)+shiyan2(temp+h(i)))*h(i)/2; result=result+x; temp = temp+h(i); end

result = result +(shiyan2(temp)+shiyan2(1))*h(i)/2; y(i) = result; end end

输入一组步长

h

调用符合梯形积分函数计算积分结果

计算积分结果的误差

数值分析实验报告

5.编写使用辛普森公式计算积分的函数 function [ y ] = fsimp(h)

%UNTITLED5 Summary of this function goes here % Detailed explanation goes here temp=0.001; result=0;

while temp+h<1

x=4*shiyan2(temp+h/2)+2*shiyan2(temp+h); result=result+x; temp=temp+h; end

result=[shiyan2(temp)+shiyan2(1)+result]*h/6; y=result; end

trapz(x,y),使用梯形公式计算积分,参数x为定义域内一系列值构成的向量,y=f(x) 例如:

>> x=0.1:0.1:1; >> y=shiyan2(x); >> trapz(x,y)

数值分析实验报告

ans =

-0.3807 >>

quad(fun,a,b)使用辛普森公式计算积分 fun代表函数句柄,a,b为积分上下限 >> s=@shiyan2 s =

@shiyan2

>> quad(s,0,1)

ans =

-0.4444

>>plot(y,’DisplayName’,’y’,’TDatasource’,’y’

);figure(gcf)

实验三

数值分析实验报告

实验题目:

用LU分解和列主元消去法解线性方程组

7 10

32.099999 5 1

1 2

1 x1 8

x 5.900001 62 2

5 1 x3 5

02 x4 1 0

输出Ax=b中系数A=LU分解的矩阵L和U,解向量x及detA;列主元法的行交换

次序,解向量x及detA;比较两种方法所得的结果。

程序代码:

1.新建函数lux.m

function [L,U,x]=lux(A,b) [n,n]=size(A);

p=eye(n);//eye函数,生成一个单位矩阵 for k=1:n-1

[r,m]=max(abs(A(k:n,k))); m=m+k-1; if(A(m,k)~=0) if(m~=k)

A([k m],:)=A([m k],:); p([k m])=p([m k]); end

for i=k+1:n

A(i,k)=A(i,k)/A(k,k); j=k+1:n;

A(i,j)=A(i,j)-A(i,k)*A(k,j); end end end

L=tril(A,-1)+eye(n,n);提取下三角矩阵 U=triu(A);提取上三角矩阵 newb=p*b; y=zeros(n,1);全0 for k=1:n j=1:k-1;

y(k)=(newb(k)-L(k,j)*y(j))/L(k,k); end

x=zeros(n,1); for k=n:-1:1 j=k+1:n;

x(k)=(y(k)-U(k,j)*x(j))/U(k,k); end

数值分析实验报告

输入矩阵A

>> A=[10,-7,0,1;-3,2.099999,6,2;5,-1,5,-1;2,1,0,2] 输入b

B=[8;5.900001;5;1] 调用函数lux计算结果 >> [l,u,x]=lux(A,B) 调用函数det求行列式

>> det(A)

数值分析实验报告

二 高斯列主元消去法

function x=gauss_lie(A,b) %采用高斯列主元法求解方程组Ax=b n=length(b); p=1:n;lu=A; y=[]; for k=1:n

[c,i]=max(abs(lu(k:n,k))); ik=i+k-1; if ik~=k

m=p(k);p(k)=p(ik);p(ik)=m;

ck=lu(k,:);lu(k,:)=lu(ik,:);lu(ik,:)=ck; end if k==n break; end

lu(k+1:n,k)=lu(k+1:n,k)/lu(k,k);

lu(k+1:n,k+1:n)=lu(k+1:n,k+1:n)-lu(k+1:n,k)*lu(k,k+1:n); end

l=diag(ones(n,1))+tril(lu,-1); u=triu(lu);

y(1)=b(p(1)); for i=2:n

y(i)=b(p(i))-l(i,1:i-1)*y(1:i-1)'; end

x(n)=y(n)/u(n,n); for i=n-1:-1:1

x(i)=(y(i)-u(i,i+1:n)*x(i+1:n)')/u(i,i); end x=x'; end

测试数据:A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2]

数值分析实验报告

b=[8 5.900001 5 1]

实验结果:

> A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2] A =

10.0000 -7.0000 0 1.0000 -3.0000 2.1000 6.0000 2.0000 5.0000 -1.0000 5.0000 -1.0000 2.0000 1.0000 0 2.0000

>> b=[8 5.900001 5 1] b =

8.0000 5.9000 5.0000 1.0000 >>

> A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];[L,U,index]=LU_Decoml(A) L =

1.0e+006 *

0.0000 0 0 0 -0.0000 0.0000 0 0 0.0000 -2.5000 0.0000 0 0.0000 -2.4000 0.0000 0.0000 U =

1.0e+007 *

0.0000 -0.0000 0 0.0000 0 -0.0000 0.0000 0.0000 0 0 1.5000 0.5750 0 0 0 0.0000

数值分析实验报告

index =

1

实验四

实验题目:

下列方程的实根: (1)x(2)x

2

3x 2 ex 0 2x2 10x 20 0

3

要求:(1)设计一种不动点迭代法,要使迭代序列收敛,然后再用Atiken加速迭代,计算到

xk xk 1 10 8

为止;(2)用牛顿迭代法,同样计算到

xk xk 1 10 8

,输出迭代初值和迭代次

数k,比较方法的优劣。

数值分析实验报告

程序代码:

1. 构造迭代公式:y=(x2+2-ex)/3

function [ y ] = shiyan4_1( x )

%UNTITLED3 Summary of this function goes here % Detailed explanation goes here y=(x*x+2-exp(x))/3; end

2. 参考以下不动迭代法计算非线性方程的代码 function [ result ] = Iteration( x )

%UNTITLED Summary of this function goes here % Detailed explanation goes here x1=shiyan4_1(x); x0 = x;

while(abs(x1-x0)>1e-8) temp = shiyan4_1(x1); x0=x1; x1=temp; end

result = x1; end

3. 参考以下使用艾特金加速迭代计算线性方程的代码

function [ result ] = steffensen( x )

%UNTITLED2 Summary of this function goes here % Detailed explanation goes here x1=shiyan4_1(x); x0 = x;

while(abs(x1-x0)>1e-8) temp = sub(x1); x0=x1; x1=temp; end

result = x1;

function b=sub(a)

b=a-sqrt(shiyan4_1(x)-x)./(shiyan4_1(shiyan4_1(x))-2*shiyan4_1(x)+x); end

数值分析实验报告

end

测试数据:

>>X=0.5;

>>Y=Iteration( x ); 结果: y= 0.2575 测试数据:

>> l=Newton(0.5) 结果:l =

0.2575

数值分析实验报告.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219