数值分析实验报告
时间:2025-07-06
时间:2025-07-06
数值分析实验报告
数值分析 实验报告
系 别 专 业 班级学号 姓 名 指导教师
电子信息系 计算机科学与技术
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计算 …… 此处隐藏:3541字,全部文档内容请下载后查看。喜欢就下载吧 ……