实验四用MATLAB实现拉格朗日插值、分段线性插值

合集下载

MATLAB实现:拉格朗日插值法示例代码及应用指南

MATLAB实现:拉格朗日插值法示例代码及应用指南

下面是使用 MATLAB 编写的拉格朗日插值法的示例代码:参数:x 是已知点的 x 坐标数组,y 是已知点的 y 坐标数组,point 是要进行插值的点的 x 坐标。

该函数会返回在给定 x 坐标 point 处的插值结果。

算法的实现思路是根据拉格朗日插值公式计算插值多项式,然后将 point 带入多项式计算得到插值结果。

你可以按照以下步骤使用上述函数:定义已知点的 x 坐标数组 x 和对应的 y 坐标数组 y。

调用lagrange_interpolation函数,并将x、y 和要插值的point 作为参数传递进去。

函数将返回在 point 处的插值结果。

以下是一个使用示例:1.定义已知点的 x 和 y 坐标x = [0, 1, 2, 4];y = [1, 4, 3, 2];2.要进行插值的点的 x 坐标point = 3.5;3.调用 lagrange_interpolation 函数进行插值result = lagrange_interpolation(x, y, point);4.输出插值结果disp(['在x = ', num2str(point), ' 处的插值结果为:', num2str(result)]);在上述示例中,已知点的 x 坐标为 [0, 1, 2, 4],对应的 y 坐标为 [1, 4, 3, 2]。

我们要在point = 3.5 处进行插值,然后通过调用lagrange_interpolation 函数计算插值结果,并输出结果。

请注意,拉格朗日插值法适用于小样本量和较低次数的插值问题。

对于大样本量和更高次数的插值,可能需要考虑使用其他插值方法或数值计算库中提供的更高级的插值函数。

matlab实现拉格朗日插值,多项式插值,邻近插值,线性插值 程序

matlab实现拉格朗日插值,多项式插值,邻近插值,线性插值 程序

题 7:一维函数插值算法课题内容:课题 7:一维函数插值算法课题内容:对函数||e-y x=,取[-5,5]之间步长为 1 的值*10作为粗值,以步长0.1 作为细值,编写程序实现插值算法:最邻近插值算法,线性插值算法和三次多项式函数插值算法,并对比插值效果。

课题要求:1、设计良好的人机交互 GUI 界面。

2、自己编写实现插值算法。

3、在同一个图形窗口显示对比最后的插值效果。

附录一、界面设计二、图像结果三、程序设计1、线性插值function pushbutton1_Callback(hObject, eventdata, handles) x=-5:5;y=10*exp(-abs(x));f1=[];for x1=-5:0.1:5a=(x1-floor(x1));%请读者认真逐一带入推导if x1==floor(x1)f1=[f1,y(floor(x1)+6)];elsef1=[f1,y(floor(x1)+6)+a*(y(floor(x1)+7)-y(floor(x1)+6))]; endendm=-5:0.1:5plot(m,f1,'-r',x,y,'+')axis([-5 5 0 10])legend('liner插值','原函数');xlabel('X');ylabel('Y');title('liner插值与原函数的对比');grid2、多项式插值x0=-5:1:-3;y0=10*exp(-abs(x0));x=-5:0.1:-3;n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=-3:1:-1;y0=10*exp(-abs(x0));x=-3:0.1:-1;n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=-1:1:1;y0=10*exp(-abs(x0));x=-1:0.1:1;n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=1:1:3;y0=10*exp(-abs(x0));x=1:0.1:3;n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=3:1:5;y0=10*exp(-abs(x0));x=3:0.1:5;n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');grid3、最邻近插值function pushbutton3_Callback(hObject, eventdata, handles) x=-5:5;y=10*exp(-abs(x));f2=[];for x1=-5:0.1:5if abs(x1-floor(x1))<0.5f2=[f2,y(floor(x1)+6)];elsef2=[f2,y(floor(x1)+7)];endendm=[-5:0.1:5];f4=10*exp(-abs(m));plot(m,f2,'-r',x,y,'+')axis([-5 5 0 10])legend('nearest插值','原函数');xlabel('X');ylabel('Y');title('nearest插值与原函数的对比');grid。

例题matlab拉格朗日插值

例题matlab拉格朗日插值

例题matlab拉格朗日插值
拉格朗日插值是一种常用的数值插值方法,可以用于近似给定数据点的函数。

在MATLAB中,可以使用interp1函数来实现拉格朗日插值。

以下是一个使用拉格朗日插值的例子:
假设有一组数据点,x为自变量,y为因变量,如下:
x = [1, 3, 4, 6];
y = [4, 2, 5, 1];
要在x=2和x=5之间进行插值,可以使用interp1函数来进行插值计算。

代码如下:
x_interp = [2, 5]; % 需要插值的x值
y_interp = interp1(x, y, x_interp, 'linear', 'extrap'); % 使用拉格朗日插值进行插值计算,'linear'表示线性插值方法,'extrap'表示在区间外进行外插值
运行上述代码后,可以得到插值的结果y_interp,即在x=2和x=5处的插值结果。

注意,interp1函数还有其他插值方法可选,如二次插值、三次插值等,可以根据具体的需求进行选择。

希望对你有帮助!。

拉格朗日插值和牛顿插值matlab

拉格朗日插值和牛顿插值matlab

拉格朗⽇插值和⽜顿插值matlab1. 已知函数在下列各点的值为0.20.40.60.8 1.00.980.920.810.640.38⽤插值法对数据进⾏拟合,要求给出Lagrange插值多项式和Newton插值多项式的表达式,并计算插值多项式在点的值。

程序:x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];x0=[0.2 0.28 0.44 0.76 1 1.08];[f,f0]=Lagrange(x,y,x0)function [f,f0] = Lagrange(x,y,x0)%求已知数据点的Lagrange插值多项式f,并计算插值多项式f在数据点x0的函数值f0syms t;n = length(x);f = 0.0;for i = 1:nl = y(i);for j = 1:i-1l = l*(t-x(j))/(x(i)-x(j));end;for j = i+1:nl = l*(t-x(j))/(x(i)-x(j));end;f = f + l;simplify(f);if(i==n)f0 = subs(f,'t',x0);f = collect(f);f = vpa(f,6);endend结果:>> Untitled3f =- 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98f0 =[ 49/50, 60137/62500, 56377/62500, 42497/62500, 19/50, 15017/62500]⽜顿:%y为对应x的值,A为差商表,C为多项式系数,L为多项式%X为给定节点,Y为节点值,x为待求节点function[y,A,C,L] = newton(X,Y,x,M)n = length(X);m = length(x);for t = 1 : mz = x(t);A = zeros(n,n);A(:,1) = Y';s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;for j = 2 : nfor i = j : nA(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));endq1 = abs(q1*(z-X(j-1)));c1 = c1 * j;endC = A(n, n); q1 = abs(q1*(z-X(n)));for k = (n-1):-1:1C = conv(C, poly(X(k)));d = length(C);C(d) = C(d) + A(k,k);endy(t) = polyval(C,z);endL = poly2sym(C);x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];x0=[0.2 0.28 0.44 0.76 1 1.08];m=1;[y,A,C,L]=newton(x,y,x0,m)结果:y =0.9800 0.9622 0.9020 0.6800 0.3800 0.2403A =0.9800 0 0 0 00.9200 -0.3000 0 0 00.8100 -0.5500 -0.6250 0 00.6400 -0.8500 -0.7500 -0.2083 00.3800 -1.3000 -1.1250 -0.6250 -0.5208C =-0.5208 0.8333 -1.1042 0.1917 0.9800L =- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/502. 在区间上分别取,⽤两组等距节点对Runge函数作多项式插值(Lagrange插值和Newton插值均可),要求对每个值,分别画出插值多项式和函数的曲线。

计算方法-插值方法实验

计算方法-插值方法实验

实验一插值方法一. 实验目的(1)熟悉数值插值方法的基本思想,解决某些实际插值问题,加深对数值插值方法的理解。

(2)熟悉Matlab 编程环境,利用Matlab 实现具体的插值算法,并进行可视化显示。

二. 实验要求用Matlab 软件实现Lagrange 插值、分段线性插值、三次Hermite 插值、Aitken 逐步插值算法,并用实例在计算机上计算和作图。

三. 实验内容1. 实验题目 (1)已知概率积分dxe y xx ⎰-=22π的数据表构造适合该数据表的一次、二次和三次Lagrange 插值公式,输出公式及其图形,并计算x =0.472时的积分值。

答:①一次插值公式:输入下面内容就可以得到一次插值结果 >> X=[0.47,0.48];Y=[0.4937452,0.5027498]; >> x=0.472;>> (x-X(2))/(X(1)-X(2))*Y(1)+(x-X(1))/(X(2)-X(1))*Y(2)ans =0.495546120000000>>②两次插值公式为:输入下面内容就可以得到两次插值结果>> X=[0.46,0.47,0.48];Y=[0.4846555,0.4937452,0.5027498]; >> x=0.472;>>(x-X(2))*(x-X(3))/((X(1)-X(2))*(X(1)-X(3)))*Y(1)+(x-X(1))*(x-X(3))/((X(2)-X(1))*(X(2)-X(3)))*Y(2)+(x-X(2))*(x-X(1))/((X(3)-X(2))*(X(3)-X(1)))*Y(3)i 0123x 0.46 047 0.48 0.49 y0.4846555 0.4937452 0.5027498 0.5116683ans =0.495552928000000>>③三次插值公式为:输入下面内容就可以得到三次插值结果>> X=[0.46,0.47,0.48,0.49];Y=[0.4846555,0.4937452,0.5027498,0.5116683];>> x=0.472;>>(x-X(2))*(x-X(3))*(x-X(4))/((X(1)-X(4))*(X(1)-X(2))*(X(1)-X(3)))*Y(1)+(x-X(4))*( x-X(1))*(x-X(3))/((X(2)-X(4))*(X(2)-X(1))*(X(2)-X(3)))*Y(2)+(x-X(4))*(x-X(2))*( x-X(1))/((X(3)-X(4))*(X(3)-X(2))*(X(3)-X(1)))*Y(3)+(x-X(3))*(x-X(2))*(x-X(1))/(( X(4)-X(1))*(X(4)-X(2))*(X(4)-X(3)))*Y(4)ans =0.495552960000000输入下面内容,绘出三点插值的图:>> X=[0.46,0.47,0.48,0.49];Y=[0.4846555,0.4937452,0.5027498,0.5116683];>> x=linspace(0.46,0.49);>>y=(x-X(2)).*(x-X(3)).*(x-X(4))/((X(1)-X(4))*(X(1)-X(2))*(X(1)-X(3)))*Y(1)+(x-X(4) ).*(x-X(1)).*(x-X(3))/((X(2)-X(4))*(X(2)-X(1))*(X(2)-X(3)))*Y(2)+(x-X(4)).*(x-X(2) ).*(x-X(1))/((X(3)-X(4))*(X(3)-X(2))*(X(3)-X(1)))*Y(3)+(x-X(3)).*(x-X(2)).*(x-X(1) )/((X(4)-X(1))*(X(4)-X(2))*(X(4)-X(3)))*Y(4);>>plot(x,y)(注意上面的“.*”不能用“*”替代);(2)将区间[-5,5]分为10等份,求作211)(x x f +=的分段线性插值函数,输出函数表达式及其图形,并计算x =3.3152时的函数值。

用matlab编写拉格朗日插值算法的程序

用matlab编写拉格朗日插值算法的程序

用matlab编写拉格朗日插值算法的程序10[ 标签:matlab,插值算法,程序 ]用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,在整个插值区间上采用拉格朗日插值法计算f(0.6),写出程序源代码,输出计算结果x -2.15 -1.00 0.01 1.02 2.03 3.25y 17.03 7.24 1.05 2.03 17.06 23.05匿名回答:1 人气:6 解决时间:2011-05-24 19:58满意答案好评率:83%做了一个测试,希望有所帮助。

代码:% 用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,% 在整个插值区间上采用拉格朗日插值法计算f(0.6),写出程序源代码,输出计算结果% x -2.15 -1.00 0.01 1.02 2.03 3.25% y 17.03 7.24 1.05 2.03 17.06 23.05function main()clc;x = [-2.15 -1.00 0.01 1.02 2.03 3.25]; y = [17.03 7.24 1.05 2.03 17.06 23.05 ]; x0 = 0.6;f = Language(x,y,x0)function f = Language(x,y,x0)%求已知数据点的拉格朗日插值多项式%已知数据点的x坐标向量: x%已知数据点的y坐标向量: y%插值点的x坐标: x0%求得的拉格朗日插值多项式或在x0处的插值: f syms t l;if(length(x) == length(y))n = length(x);elsedisp('x和y的维数不相等!');return; %检错endh=sym(0);for (i=1:n)l=sym(y(i));for(j=1:i-1)l=l*(t-x(j))/(x(i)-x(j));end;for(j=i+1:n)l=l*(t-x(j))/(x(i)-x(j));end;h=h+l;endsimplify(h);if(nargin == 3)f = subs (h,'t',x0); %计算插值点的函数值elsef=collect(h);f = vpa(f,6); %将插值多项式的系数化成6位精度的小数end结果:f =0.0201>>如何用MATLAB编写的拉格朗日插值算法的程序、二阶龙格-库塔方法的程序和SOR迭代法的程序,要能运行的∮初夏戀雨¢回答:2 人气:29 解决时间:2009-12-08 19:04满意答案好评率:100%拉格朗日function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endSOR迭代法的Matlab程序function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵x0=zeros(1,length(b)); % 赋初值tol=10^(-2); % 给定误差界N=1000; % 给定最大迭代次数[n,n]=size(A); % 确定矩阵A的阶w=1; % 给定松弛因子k=1;% 迭代过程while k<=Nx(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);for i=2:nx(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i); endif max(abs(x-x0))<=tolfid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n'); fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'x的值\n\n');fprintf(fid, '%12.8f \n', x);break;endk=k+1;x0=x;endif k==N+1fid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n'); fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);endMatlab中龙格-库塔(Runge-Kutta)方法原理及实现龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。

计算方法实验课内容

计算方法实验课内容

通过改变步长比较同种算法的精度, 通过改变步长比较同种算法的精度,并对同样步长比较 不同算法的精度。作出其图像并于真解图像进行比较。 不同算法的精度。作出其图像并于真解图像进行比较。
实验十
常微分方程数值解法( ) 常微分方程数值解法(2)
实验目的: 实验目的: 1.熟悉求解常微分方程初值问题的有关方法和理论。主要 .熟悉求解常微分方程初值问题的有关方法和理论。 是各阶龙格—库塔法 库塔法; 是各阶龙格 库塔法; 2.会编制上述方法的计算程序,包括求解微分方程组的计 .会编制上述方法的计算程序, 算程序; 算程序; 3.针对实习题编制程序,并上机计算其所需要的结果; .针对实习题编制程序,并上机计算其所需要的结果; 4.通过对各种求解方法的计算实现,体会各种解法的功能、 .通过对各种求解方法的计算实现,体会各种解法的功能、 优缺点及适用场合.会选取适当的求解方法。 优缺点及适用场合.会选取适当的求解方法。 实验内容: 实验内容: 题目:用不同阶的龙格-库塔算法求解下面初值问题 库塔算法求解下面初值问题: 题目:用不同阶的龙格 库塔算法求解下面初值问题:
实验一: 实验一:拉格朗日插值
实验目的: 实验目的:
学会用matlab语言编写拉格朗日插值法的程序, matlab语言编写拉格朗日插值法的程序 1. 学会用matlab语言编写拉格朗日插值法的程序,实现拉格 朗日插值算法的自动化计算; 朗日插值算法的自动化计算; 体会内插法与外插法的优劣性。 2. 体会内插法与外插法的优劣性。
并通过计算误差比较内插法与外插法的优劣。 并通过计算误差比较内插法与外插法的优劣。 与外插法的优劣 同时和上次用拉格朗日插值多项式做出的结果进行比较。 同时和上次用拉格朗日插值多项式做出的结果进行比较。
输出:ans = -0.9163 2.2314 -2.0412 1.9272 -0.3096 -0.6931 1.8232 -1.4630 1.8033 0 -0.5108 1.5306 -0.9220 0 0 -0.3578 1.3462 0 0 0 -0.2231 0 0 0 0 yi=0; for i=1:n z=1; for k=1:i-1 z=z*(xi-x(k)); end yi=yi+Y(1,i)*z; end

Matlab插值方法学习Hermite,lagrange,Newton

Matlab插值方法学习Hermite,lagrange,Newton

大家都知道插值在数学建模中很重要,现在介绍几种常用插值下面介绍几种基本的、常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite插值和三次样条插值。

1.拉格朗日多项式插值拉格朗日插值就是给定n个数,让你用不超过n-1次的多项式你逼近它,当然这n个点要能满足多项式。

这是一种最基本的思想,计算很简单,先计算n个基函数,基函数可以自己上网搜一下,因为这里打出公式有点麻烦。

然后就是把每个点的y值乘以他的基函数,把这n个式子相加,最后化简就ok了。

下面我把代码写出来,我这些代码全是自己写的,注释比较详细,这里只以lagrange为例,其余都放在附件里了。

%定义myLagrange函数,参数为向量x,y,由用户调用该函数时输入function L=myLagrange (x,y)%n 插值结点的个数n=length(x);%L myLagrange函数计算的多项式系数行列式L=zeros(1,n);%%使用双重for循环,第一个for循环是fori=1:n%aa=1;%ww=1;%for循环for j=1:n%如果i不等于jif j~=i%累加法计算aa=a*(x(i)-x(j));%用向量乘法函数conv计算ww=conv(w,[1,-x(j)]);%if语句结束符end%第二个for循环结束符end%递归法计算L,其中y(i)/a*w表示第i个元素L=y(i)/a*w+L;%第一个for结束符end没错,就这么几句代码,所以很简单的。

2.牛顿插值牛顿插值其实是为了解决拉格朗日插值不能增加新的点来说的。

拉格朗日插值只能接受给定的那么多点,了然后插值。

如果你想再加一个点,它会重新开始计算,这个很费时间和内存。

因此牛顿插值就诞生了。

了解牛顿插值前要学习下差商和差分两个简单的概念。

Newton 插值的优点是:每增加一个节点,插值多项式只增加一项,即因而便于递推运算。

而且Newton 插值的计算量小于Lagrange 插值。

matlab插值实验报告

matlab插值实验报告

matlab插值实验报告Matlab插值实验报告引言:在数学和工程领域中,插值是一种常见的数据处理方法。

它通过已知数据点之间的推断来填补数据的空缺部分,从而获得连续的函数或曲线。

Matlab是一种功能强大的数值计算软件,具备丰富的插值函数和工具包。

本实验旨在通过使用Matlab进行插值实验,探索插值方法的原理和应用。

实验步骤:1. 数据准备首先,我们需要准备一组实验数据。

以一个简单的二维函数为例,我们选择f(x) = sin(x),并在区间[0, 2π]上取若干个等间隔的点作为已知数据点。

2. 线性插值线性插值是插值方法中最简单的一种。

它假设函数在两个已知数据点之间是线性变化的。

在Matlab中,可以使用interp1函数进行线性插值。

我们将已知数据点和插值结果绘制在同一张图上,以比较它们之间的差异。

3. 多项式插值多项式插值是一种常用的插值方法,它通过已知数据点构造一个多项式函数来逼近原始函数。

在Matlab中,polyfit函数可以用来拟合多项式。

我们可以选择不同的多项式次数进行插值,并观察插值结果与原始函数之间的差异。

4. 样条插值样条插值是一种更为精确的插值方法,它通过在每个小区间内构造局部多项式函数来逼近原始函数。

在Matlab中,可以使用spline函数进行样条插值。

我们可以选择不同的插值节点数目,并比较插值结果的平滑程度和逼近效果。

5. 拉格朗日插值拉格朗日插值是一种基于多项式的插值方法,它通过构造插值多项式来逼近原始函数。

在Matlab中,可以使用polyval函数进行拉格朗日插值。

我们可以选择不同的插值节点数目,并观察插值结果与原始函数之间的差异。

实验结果:通过实验,我们得到了不同插值方法的结果,并将其与原始函数进行了比较。

在线性插值中,我们观察到插值结果与原始函数之间存在一定的误差,特别是在函数变化较快的区域。

而多项式插值和样条插值在逼近原始函数方面表现更好,特别是在插值节点数目较多的情况下。

拉格朗日分段线性三次样条正弦函数

拉格朗日分段线性三次样条正弦函数
y=sin(x);
plot(x,y)
hold on
xi=0:pi/2:2*pi;
yi=[0 1 0 -1 0];
y1=spline(xi,yi,x);
y2=y-y1;
plot(x,y1,'r',x,y2,'k')
%n=9
>> x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
hold on
xi=0:pi/4:2*pi;
yi=[0 0.7071 1 0.7071 0 -0.7071 -1 -0.7071 0];
y1=spline(xi,yi,x);
y2=y-y1;
plot(x,y1,'r',x,y2,'k')
三种实验插值比较:n=9时
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
=
数学应用软件大型实验实验报告
实验序号:B57日期:2011年8月19日
班级
信计0901
姓名
学号
实验
名称
选择一些函数,在n个节点上用拉格朗日,分段线性,三次样条三种插值方法,计算m个插值点的函数值。通过数值和图形,将三种插值结果与精确值进行比较,适当增加n,再做比较,下列函数可选择参考;(1) y=sinx ;
plot(x,y)
hold onx1=0:pi/:2*pi;y1=[0 0.7071 1 0.7071 0 -0.7071 -1 -0.7071 0];
y2=interp1(x1,y1,x);
y3=y-y2;
plot(x,y2,'r',x,y3,'k')

matlab实现lagrange插值和分段线性插值

matlab实现lagrange插值和分段线性插值

数值分析作业姓名:虞驰程题目函数:在[-5,5]上,取n=10,对其进行分段线性插值和拉格朗日插值,在Matlab中实现且绘图。

Matlab 实现:首先定义函数f,在Matlab中用fun ctio n.m 文件编写,具体代码如图1所示:图1 f(x) 函数定义分段线性插值的基本函数,用function.m 文件编写,具体代码如图2所示:图2分段线性插值基本函数定义拉格朗日插值的基本函数,用function.m 文件编写,具体代码如图3所示:图3拉格朗日插值的基本函数进行分段线性插值并绘图和原函数进行对比的Matlab实现代码如图4所示:图4分段线性插值函数绘制其结果如图5所示,其中红色代表分段线性插值结果,蓝色代表原函数:图5分段线性插值和原函数对比同理可以进行拉格朗日插值并绘图,其Matlab实现代码如图6所示,其结果如图Ffe Edit Tesrt Go C«ll TooU D«bug Oesktop Wind Help *1 D 已■ | $ ■•勺◊Qi 勺-it • * F;iL ・昌电T・• ■ ■ ■ | MadgJBmr ■血*S肓匸1必」•* _U■「鬲迢[0 _L 1- IWEU I1『inpirt ftji')2 - ■Elinus:""卜氐£11*1〕3 - \-\t^£ 15* —yslftErflnfeiwQpiftrtl,!!) ■5 —told An:ft - plfft <45- r* * E X).7 - jlflrt(i p fCx)/lb J kE — d.isp(-x):9 - -end2 u"含m al=n' taufwi图6拉格朗日插值函数绘制图7拉格朗日插值和原函数对比7所示:最后我们可以将分段线性插值、拉格朗日插值和原函数进行对比,其实现代码如图8所示,最终结果如图9所示(黑色代表原函数,蓝色是分段线性插值,红色是拉格朗日插值)图8两种插值方法和原函数对比实现图9两种插值方法和原函数对比。

用拉格朗日插值法求解函数值 matlab

用拉格朗日插值法求解函数值 matlab

**使用拉格朗日插值法求解函数值的MATLAB实现**拉格朗日插值法是一种常用的插值方法,通过已知的若干点构造一个多项式来近似一个未知的函数。

下面我们将详细介绍如何在MATLAB中使用拉格朗日插值法来求解函数值。

**1. 拉格朗日插值法的基本原理**给定n+1个点(x0, y0), (x1, y1), ..., (xn, yn),拉格朗日插值多项式L(x)可以表示为:L(x) = Σ[yi * li(x)] (i从0到n)其中,li(x) 是拉格朗日基函数,定义为:li(x) = Π[(x - xj) / (xi - xj)] (j从0到n,且j≠i)**2. MATLAB实现**以下是一个简单的MATLAB脚本,用于计算给定点的拉格朗日插值多项式及其值。

```matlab% 假设我们有一些点的数据:xi, yi(其中i = 0,1,2,...,n)xi = [1, 2, 3, 4]; % 自变量数据点yi = [1, 4, 9, 16]; % 因变量数据点% 要计算插值的点x = 2.5;n = length(xi); % 点的数量L = 0; % 初始化插值多项式% 计算拉格朗日插值多项式在点x处的值for i = 1:nli = 1; % 初始化基函数for j = 1:nif i ~= jli = li * (x - xi(j)) / (xi(i) - xi(j)); % 计算基函数endendL = L + yi(i) * li; % 更新插值多项式enddisp(['拉格朗日插值结果:', num2str(L)]); % 显示结果```在此脚本中,我们首先定义了已知的数据点`xi`和`yi`,并选择一个特定的`x`来计算对应的函数近似值。

然后,我们使用两个嵌套的循环来计算拉格朗日插值多项式在所选点`x`处的值。

外部循环遍历每个数据点,而内部循环计算相应的基函数。

最后,我们显示计算得到的插值结果。

拉格朗日插值matlab程序例题

拉格朗日插值matlab程序例题

拉格朗日插值是一种常用的数据拟合方法,它可以通过已知数据点来估计出未知数据点的值。

在数学和工程领域中,拉格朗日插值经常被用来进行数据的近似和预测。

在本文中,我们将深入探讨拉格朗日插值的原理和应用,并以Matlab程序例题来展示其实际运用。

1. 拉格朗日插值的原理拉格朗日插值是利用已知数据点来构造一个多项式,通过这个多项式来拟合数据并进行预测。

它的原理基于拉格朗日多项式的概念,即通过已知的n个点来构造一个n-1次的拉格朗日多项式,利用这个多项式来估计其他点的数值。

2. 拉格朗日插值的公式假设有n个已知的数据点(x1, y1), (x2, y2), …, (xn, yn),则拉格朗日插值多项式可以表示为:L(x) = Σ(yi * li(x)), i=1 to n其中li(x)是拉格朗日基函数,定义为:li(x) = Π((x - xj) / (xi - xj)), j=1 to n, j≠i利用这个公式,我们可以得到拉格朗日插值多项式,进而进行数据的拟合和预测。

3. 拉格朗日插值的Matlab程序实现下面我们将以一个具体的例题来展示如何使用Matlab来实现拉格朗日插值。

假设有如下数据点:y = [10, 5, 8, 3, 6];我们希望利用这些数据点来构造拉格朗日插值多项式,并使用这个多项式来估计x=3.5处的数值。

我们可以编写Matlab程序来实现拉格朗日插值。

代码如下:```matlabfunction result = lagrange_interpolation(x, y, xx)n = length(x);result = 0;for i = 1:ntemp = y(i);for j = 1:nif i ~= jtemp = temp * (xx - x(j)) / (x(i) - x(j));endendresult = result + temp;endend```我们可以调用这个函数来进行插值计算:```matlaby = [10, 5, 8, 3, 6];xx = 3.5;result = lagrange_interpolation(x, y, xx)disp(result);```通过这段程序,我们可以得到x=3.5处的插值结果为6.75。

实验四用MATLAB实现拉格朗日插值分段线性插值

实验四用MATLAB实现拉格朗日插值分段线性插值

实验四用MATLAB实现拉格朗日插值分段线性插值实验四用M A T L A B实现拉格朗日插值分段线性插值The final edition was revised on December 14th, 2020.实验四用MATLAB实现拉格朗日插值、分段线性插值一、实验目的:1)学会使用MATLAB软件;2)会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;二、实验内容:1用MATLAB实现y = 1./(x.^2+1);(-1<=x<=1)的拉格朗日插值、分段线性2.选择以下函数,在n个节点上分别用分段线性和三次样条插值的方法,计算m个插值点的函数值,通过数值和图形的输出,将插值结果与精确值进行比较,适当增加n,再作比较,由此作初步分析:(1).y=sinx;( 0≤x≤2π)(2).y=(1-x^2)(-1≤x≤1)三、实验方法与步骤:问题一用拉格朗日插值法1)定义函数:y = 1./(x.^2+1);将其保存在文件中,程序如下:function y = f1(x)y = 1./(x.^2+1);2)定义拉格朗日插值函数:将其保存在文件中,具体实现程序编程如下:function y = lagrange(x0,y0,x)m = length(x); /区间长度/n = length(x0);for i = 1:nl(i) = 1;endfor i = 1:mfor j = 1:nfor k = 1:nif j == kcontinue;endl(j) = ( x(i) -x0(k))/( x0(j) - x0(k) )*l(j); endendendy = 0;for i = 1:ny = y0(i) * l(i) + y;end3)建立测试程序,保存在文件中,实现画图:x=-1::1; y = 1./(x.^2+1);p=polyfit(x,y,n);py=vpa(poly2sym(p),10)plot_x=-5::5;f1=polyval(p,plot_x);figureplot(x,y,‘r',plot_x,f1)二分段线性插值:建立文件。

实验报告-插值法

实验报告-插值法

验 目 的 和 要 求2、掌握用MATAB 作线性最小二乘的方法。

实 验 内 容 和 步 骤计算机上机实验报告1掌握用MATLA 计算拉格朗日、分段线性、三次样条三种插值的方法,改变节点的数目,对三种插值结果进行初步分析。

3、通过实例学习如何用插值方法与拟合方法解决实际问题,注意二者的联系和区别。

实验的主要内容1编制拉格朗日、牛顿插值程序,并运行一个简单的实例。

(1)拉格朗日插值程序:fun cti on v=pol yin terp(x,y,u) n=len gth(x); v=zeros(size(u)); for k=1: n w=on es(size(u));for j=[1:k-1 k+1:n] w=(u-x(j))./(x(k)-x(j)).*w; end v=v+w*y(k); end实例:当x=144,169,225时,y=12,13,15,用拉格朗日差值法 求根号175。

如下:''Fl ^.kiEO- 1(2)牛顿插值程序:fun ctio n y=n ewi nterp(X,Y,x)% 牛顿插值函数m=le ngth(X);for k=2:mfor j=1:k-1Y(k)= (Y(k)- Y(j))/(X(k)-X(j));endendy=Y(m);for j=m-1:-1:1y=y.*(x-X(j))+Y(j);2、给定函数f(x)x,已知:f(2.0) .1.414214 f(2.1) .1.449138f (2.2) .1.483240 f (2.3) .1.516575 f (2.4) .1.549193 用牛顿插值法求4次Newton插值多项式在2.15处的值,以此作为函3.选择函数y=exp(-x 2) (-2 <x<2),在n个节点上(n不要太大,如5~11)用拉格朗日、分段线性、三次样条三种插值方法,计算m 个插值点的函数值(m要适中,如50~100)。

matlab计算拉格朗日牛顿及分段线性插值的程序

matlab计算拉格朗日牛顿及分段线性插值的程序

end %检错 for k=1:n-1 if (x(k)<=x0&x0<=x(k+1)) temp=x(k)-x(k+1); f=(x0-x(k+1))/temp*y(k)+(x0x(k))/(-temp)*y(k+1); end; end
return;
四.程序运行结果 1.拉格朗日插值法 >> x=[0 3 5 7 9 11 12 13 14 15]; >> y=[0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6]; >> xi=0.5:0.5:14.5; >> yi=lang(x,y,xi) yi = Columns 1 through 8 -15.4117 -15.9238 -10.9898 -5.4272 -1.2253 1.2000 2.1765 2.2666 Columns 9 through 16 1.9894 1.7000 1.5703 1.6249 1.7995 2.0000 2.1477 2.2040 Columns 17 through 24 2.1752 2.1000 2.0269 1.9904 1.9928 2.0000 1.9537 1.8000 Columns 25 through 29 1.5272 1.2000 0.9656 1.0000 1.3480 >> plot(x,y,'b:',xi,yi) 2.牛顿插值法 >> yi=newdun(x,y,xi) yi = Columns 1 through 8 -15.4117 -15.9238 -10.9898 -1.2253 1.2000 2.1765 Columns 9 through 16 1.9894 1.7000 1.5703 1.7995 2.0000 2.1477 Columns 17 through 24 2.1752 2.1000 2.0269 1.9928 2.0000 1.9537 Columns 25 through 29 1.5272 1.2000 0.9656 1.3480 >> plot(x,y,xi,yi,'g+')
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四用MATLAB实现拉格朗日插值、分段线性插值一、实验目的:
1)学会使用MATLAB软件;
2)会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;
二、实验内容:
1用MATLAB实现y = 1./(x.^2+1);(-1<=x<=1)的拉格朗日插值、分段线性
2.选择以下函数,在n个节点上分别用分段线性和三次样条插值的方法,计算m个插值点的函数值,通过数值和图形的输出,将插值结果与精确值进行比较,适当增加n,再作比较,由此作初步分析:
(1).y=sinx;( 0≤x≤2π)
(2).y=(1-x^2)(-1≤x≤1)
三、实验方法与步骤:
问题一用拉格朗日插值法
1)定义函数:y = 1./(x.^2+1);将其保存在f.m 文件中,程序如下:
function y = f1(x)
y = 1./(x.^2+1);
2)定义拉格朗日插值函数:将其保存在lagrange.m 文件中,具体实现程序编程如下:function y = lagrange(x0,y0,x)
m = length(x); /区间长度/
n = length(x0);
for i = 1:n
l(i) = 1;
end
for i = 1:m
for j = 1:n
for k = 1:n
if j == k
continue;
end
l(j) = ( x(i) -x0(k))/( x0(j) - x0(k) )*l(j); end
end
end
y = 0;
for i = 1:n
y = y0(i) * l(i) + y;
end
3)建立测试程序,保存在text.m文件中,实现画图:x=-1:0.001:1;
y = 1./(x.^2+1);
p=polyfit(x,y,n);
py=vpa(poly2sym(p),10)
plot_x=-5:0.001:5;
f1=polyval(p,plot_x);
figure
plot(x,y,‘r',plot_x,f1)
二分段线性插值:
建立div_linear.m文件。

具体编程如下
/*分段线性插值函数:div_linear.m 文件*/
function y = div_linear(x0,y0,x,n)
%for j = 1:length(x)
for i = 1:n-1
if (x >= x0(i)) && (x <= x0(i+1))
y = (x - x0(i+1))/(x0(i) - x0(i+1))*y0(i) + ( x - x0(i))/(x0(i+1) - x0(i))*y0(i+1);
else
continue;
end
end
%end
测试程序(text2.m):
x0 = linspace( -5,5,50);
y0= 1./(x0.^2+1);
y=interp1(x0,y0,x0,'linear')
plot(x0,y0,x0,y,'p');
2)运行测试程序
问题二:(1).分段线性插值Matlab命令如下:
x=linspace(0,2*pi,100);
y=sin(x);
x1=linspace(0,2*pi,5);
y1=sin(x1);
plot(x,y,x1,y1,x1,y1,'o','LineWidth',1.5), gtext('n=4')
图形如下:
(2).三次样条插值选取7个基点计算插值Matlab命令如下
x0=linspace(-1,1,7);
y0=(1-x0.^2);
x=linspace(-1,1,100);
y=interp1(x0,y0,x,'spline');
x1=linspace(-1,1,100);
y1=(1-x1.^2);
plot(x1,y1,'k',x0,y0,'+',x,y,'r'); 图形如下:
5、实验总结:
通过本次课程设计,我初步掌握了MATLAB运用,加深了对于各种线性插值的理解;培养了独立工作能力和创造力;综合运用专业及基础知识,解决实际数学问题的能力;在本次课程设计中,在老师的精心指导下,收益匪浅。

同时对数学的研究有了更深入的认识。

相关文档
最新文档