Lagrange插值MATLAB源程序
matlab拉格朗日插值函数代码

matlab拉格朗日插值函数代码拉格朗日插值法是一种常用的函数逼近方法,可以用来对给定的一组离散数据进行求值,使得所求函数通过这些离散数据点。
在MATLAB中,可以通过编写函数来实现拉格朗日插值。
先介绍拉格朗日插值的基本原理。
设已知离散点(x0,y0),(x1,y1),...,(xn,yn),要求通过这些点的插值项L(x)作为函数y = f(x)的近似。
插值项L(x)可以表示为:L(x) = y0 * L0(x) + y1 * L1(x) + ... + yn * Ln(x)其中,Lk(x)是基本多项式,表示为:Lk(x) = (x - x0) * (x - x1) * ... * (x - xk-1) * (x - xk+1) ... * (x - xn) / (xk - x0) * (xk - x1) * ... * (xk - xk-1) * (xk - xk+1) ... * (xk - xn)可以看到,Lk(x)的分子为关于x的n次多项式,在点x = xk处取到值1,在其余各点处取值为0。
每个Lk(x)都可以视为基于xk的插值函数,这些插值函数可以线性组合得到整个插值项L(x)。
在MATLAB中,可以编写一个基于拉格朗日插值法的函数,输入为已知的离散数据点,输出为插值函数在给定点处的值。
具体步骤如下。
1. 定义输入参数。
需要输入已知的离散数据点,以及给定的点的位置。
function result = lagrange_interpolation(data, x)其中,data为matrix型,第一列为x值,第二列为y值;x为scalar型,表示给定点的位置。
2. 计算插值项L(x)。
对于每个k,计算其相应的基本多项式Lk(x),并将所有基本多项式与相应的y值线性组合得到插值项L(x)。
n = size(data,1);L = ones(n, 1);for k=1:nfor j=1:nif j ~=kL(k) = L(k) * (x - data(j,1)) / (data(k,1) - data(j,1));endendendresult = sum(data(:,2) .* L);3. 输出结果。
用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)方法是一种在工程上应用广泛的高精度单步算法。
MATLAB编辑n次拉格朗日函数插值法的程序

n次拉格朗日函数插值程序:function LagrangesNs() %用于求过n点的拉格朗日n-1次插值多项式options={'Name of data file'};title='Lagranges_points';lineNo=2;def={'Lagranges.dat'};outval=inputdlg(options,title,lineNo,def);if isempty(outval)==1,return,endfilename=outval{1};data=load(filename);x=data(:,1);y=data(:,2);lagrangesN(x,y);endfunction lagrangesN(x,y)%画出已知n个点的位置plot(x,y,'*');hold on%n次拉格朗日多项式为 y=a0+a1*x+a2*x^2+…+a(n-1)*x^(n-1)%其中a0 a1 a2…a(n-1)为待求系数n=length(x);X=Vandermonde(x,1);A=X\y;%绘制插值函数图象x1=linspace(0,max(x));x2=Vandermonde(x1',n);y1=x2*A;plot(x1',y1);hold on%显示公式func=['y= ',num2str(A(1))];for i=2:n;b=['+ ',num2str(A(i)),'*x^',num2str(i-1)];func=[func,b];endtext(0.8,0.8,func);end%创建一个Vandermonde行列式function XX=Vandermonde(x,m)%创建x的列向量if m==1n=length(x);XX=zeros(n);for i=1:nXX(:,i)=x.^(i-1); endelsen=length(x);XX=zeros(n,m);for i=1:mXX(:,i)=x.^(i-1); endendend运行情况:按“run”运行时,弹出窗口注:在Lagranges 1.dat 文件中数据为:0 11 0.36792 0.1353点击图框中的“OK ”,在“command window ”中输出结果为:将图框中的相关数据更改为:。
Lagrange插值程序1

在Matlab中,可以编写如下程序来利用Lagrange插值公式进行计算:function f=Lagrange(x,fx,inx)n=length(x);m=length(inx);for i=1:m;z=inx(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x(j))/(x(k)-x(j));endends=p*fx(k)+s;endf(i)=s;endplot(x,fx,'O',inx,f)x=[1:12]fx=[12 234 34 -1 34 2 5 23 34 9 45 23]xi=[1:0.2:12]Lagrange(x,fx,xi)得出结果:12.0000 -60.5937 18.2765 124.9778 202.5952 234.0000 223.3757 184.1249 131.4738 78.4253 34.0000 2.9467 -13.6885 -17.5810 -12.0379 -1.0000 11.7556 23.1624 31.1611 34.7730 34.0000 29.6054 22.8332 15.1153 7.8099 2.0000 -1.6307 -2.8397 -1.7907 1.0404 5.0000 9.4024 13.6643 17.4033 20.4834 23.0000 25.2037 27.3769 29.6858 32.0400 34.0000 34.7742 33.3426 28.7320 20.4439 9.0000 -3.4848 -12.8605 -12.88734.0592 45.0000 112.3788 197.1817 267.9699 254.3439 23.0000拉格朗日插值法理论介绍对于给定的若n+1个点,对应于它们的次数不超过n的拉格朗日多项式只有一个。
matlab 拉格朗日插值法和牛顿插值法

matlab 拉格朗日插值法和牛顿插值法题目:MATLAB中的拉格朗日插值法和牛顿插值法引言在实际问题中,我们常常需要通过一系列已知数据点来估计未知数据点的值。
这种问题很常见,例如用温度测量数据来预测未来某一天的温度。
为了解决这种插值问题,拉格朗日插值法和牛顿插值法是常用的方法之一。
在本文中,我们将介绍这两种插值方法并详细解释如何在MATLAB中使用它们。
一、拉格朗日插值法拉格朗日插值法是基于拉格朗日多项式的一种插值方法。
该方法使用已知数据点的值和位置来构造一个多项式,进而估计未知数据点的值。
其基本思想是通过多项式与每个数据点相等,并利用拉格朗日插值公式来得到插值多项式。
1. 拉格朗日插值公式拉格朗日插值公式可以表示为:P(x) = Σ(yi * li(x))其中P(x)是插值多项式,yi是第i个数据点的值,li(x)是拉格朗日基函数。
拉格朗日基函数li(x)定义为:li(x) = Π((x-xj)/(xi-xj)) (j ≠i)2. MATLAB实现要在MATLAB中实现拉格朗日插值法,我们可以按照以下步骤进行:(1)首先定义数据点的横坐标x和纵坐标y;(2)使用for循环遍历每个数据点,并计算插值多项式的每一项;(3)将每个数据点的插值多项式项相加,得到最终的插值多项式;(4)通过给定的x值,计算插值多项式的值。
该过程可以通过以下MATLAB代码实现:matlab定义已知数据点的横坐标和纵坐标x = [1, 2, 3, 4];y = [2, 4, 1, 6];计算插值多项式的每一项n = length(x); 数据点数量P = 0; 初始化插值多项式for i = 1:n计算每一项的拉格朗日基函数li = ones(size(x));for j = 1:nif j ~= ili = li .* (xs - x(j)) / (x(i) - x(j));endend计算每一项的插值多项式项Pi = yi * li;将每一项相加得到最终的插值多项式P = P + Pi;end给定x值,计算插值多项式的值x_val = 2.5;y_val = polyval(P, x_val);二、牛顿插值法牛顿插值法是一种使用差商的插值方法。
MATLAB实现拉格朗日插值

数值分析上机报告题目:插值法学号:201014924姓名:靳会有一、调用MATLAB内带函数插值2、取其中的一维数据内插函数(interp1)为例,程序如下:其调用格式为:yi=interp1(x, y, xi)yi=interp1(x, y, xi, method)举例如下:x=0:10:100y=[40 44 46 52 65 76 80 82 88 92 110];xi=0:1:100yi=interp1(x,y,xi,'spline')3、其他内带函数调用格式为:Interpft函数:y=interpft(x,n)y=interpft(x,n,dim)interp2函数:ZI=interp2(X, Y, Z, XI, YI), ZI=imerp2(Z, ntimes)ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数:VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V, ntimes)VI=interp3(V,XI,YI,ZI) VI=interp3(…, method)Interpn函数:VI=interpn(X1, X2, X3, …, V, Y1, Y2, Y3, …)VI=interpn(V, ntimes)VI=interpn(V, Yl, Y2, Y3, …) VI=interpn(…, method)Spline函数:yi=spline(x,y,xi)pp=spline(x,y)meshgrid函数:[X,Y]=meshgrid(x,y)[X,Y]=meshgrid(x)[X,Y,Z]=meshgrid(x,y,z)Ndgrid函数:[X1, X2, X3, …]=ndgrid(x1, x2, x3, …)[X1, X2, X3, …]=ndgrid(x)Griddata函数:ZI=griddata(x, y, z, XI, YI)[XI, YI, ZI]=griddata(x, y, z, xi, yi)[…]=griddata(… method)二、自编函数插值1、拉格朗日插值法:建立M 文件:function f = Language(x,y,x0)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在MATLAB中输入:x=[18 31 66 68 70 72 70;]y=[23 33 52 51 43 40 46];f=Language(x,y)plot(x,y)结果为:f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 -0.000512106*t^6图形如下:MATLAB实现拉格朗日插值建立如下拉格朗日插值函数: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;end画图程序如下:x=[-5:1:5];y=1./(1+x.^2);x0=[-5:0.001:5];y0=lagrange(x,y,x0);y1=1./(1+x0.^2);plot(x0,y0,'r')hold onplot(x0,y1,'g')注:画出的图形为n =10的图形得到图形如下:牛顿K 次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。
实验四用MATLAB实现拉格朗日插值、分段线性插值

实验四用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:nl(i) = 1;endfori= 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)建立测试程序,保存在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);figureplot(x,y,‘r',plot_x,f1)二分段线性插值:建立div_linear、m文件。
MATLAB编辑n次拉格朗日函数插值法的程序

n次拉格朗日函数插值程序:function LagrangesNs() %用于求过n点的拉格朗日n-1次插值多项式options={'Name of data file'};title='Lagranges_points';lineNo=2;def={'Lagranges.dat'};outval=inputdlg(options,title,lineNo,def);if isempty(outval)==1,return,endfilename=outval{1};data=load(filename);x=data(:,1);y=data(:,2);lagrangesN(x,y);endfunction lagrangesN(x,y)%画出已知n个点的位置plot(x,y,'*');hold on%n次拉格朗日多项式为 y=a0+a1*x+a2*x^2+…+a(n-1)*x^(n-1)%其中a0 a1 a2…a(n-1)为待求系数n=length(x);X=Vandermonde(x,1);A=X\y;%绘制插值函数图象x1=linspace(0,max(x));x2=Vandermonde(x1',n);y1=x2*A;plot(x1',y1);hold on%显示公式func=['y= ',num2str(A(1))];for i=2:n;b=['+ ',num2str(A(i)),'*x^',num2str(i-1)];func=[func,b];endtext(0.8,0.8,func);end%创建一个Vandermonde行列式function XX=Vandermonde(x,m)%创建x的列向量if m==1n=length(x);XX=zeros(n);for i=1:nXX(:,i)=x.^(i-1); endelsen=length(x);XX=zeros(n,m);for i=1:mXX(:,i)=x.^(i-1); endendend运行情况:按“run ”运行时,弹出窗口注:在Lagranges 1.dat 文件中数据为: 0 11 0.36792 0.1353点击图框中的“OK ”,在“command window ”中输出结果为:将图框中的相关数据更改为:。