拉格朗日插值法使用MATLAB做的例题
拉格朗日插值龙格现象的matlab实现
拉格朗日插值法在实践中的应 用
在数值分析中的应用
单击此处添加标题
插值法:拉格朗日插值法是数值分析中常用的插值方法之一,具有简单易 行、计算量小等优点。
单击此处添加标题
数据拟合:拉格朗日插值法可以用于数据拟合,通过对已知数据进行插值, 得到未知数据的近似值。
单击此处添加标题
数值微积分:拉格朗日插值法在数值微积分中也有广泛应用,例如在求解 函数的导数、积分等运算时,可以利用拉格朗日插值法进行近似计算。
龙格现象
龙格现象的定义
定义:当插值多项式的阶数过高时, 插值结果可能变得不可预测或出现 剧烈振荡
解决方法:在实际应用中,应避免 使用过高的插值多项式阶数,而应 选择合适的阶数以保证插值结果的 稳定性和准确性
添加标题
添加标题
添加标题
添加标题
原因:由于高阶插值多项式对数据 点的敏感性增强,导致插值结果不 稳定
拉格朗日插值龙格现象的 Matlab实现
汇报人:XX
单击输入目录标题 拉格朗日插值法 龙格现象 拉格朗日插值法在Matlab中的实现 拉格朗日插值法的龙格现象分析 拉格朗日插值法在实践中的应用
添加章节标题
拉格朗日插值法
插值法的定义
插值法是一种数学方法,通过已知的离散数据点,构造一个多项式函数,使得该函数在 数据点处的取值等于已知的数据点值。
算法收敛性:在某些情况下,龙格现象可能导致算法收敛速度减慢,增加计算时间和计算成本。
实际应用限制:由于龙格现象的存在,某些数值方法在实际应用中可能受到限制,无法处理某些 复杂问题。
算法改进需求:为了克服龙格现象的影响,需要研究和发展新的数值方法和算法,提高数值计算 的稳定性和精度。
拉格朗日插值法在Matlab中的 实现
用MATLAB实现拉格朗日插值和分段线性插值
用MATLAB实现拉格朗日插值和分段线性插值之迟辟智美创作1、实验内容:用MATLAB实现拉格朗日插值和分段线性插值.2、实验目的:1)学会使用MATLAB软件;2)会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;3、实验原理:利用拉格朗日插值方法进行多项式插值,并将图形显式出来.4、实验步伐及运行结果(1)实现lagrange插值1)界说函数: f = 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;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=-5:0.001:5;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);figurepl ot(x,y,‘r',plot_x,f1)输入n=6,呈现下面的图形:通过上图可以看到当n=6是没有很好的模拟.于是重新运行text.M并选择n=11由此可见n=11时的图像是可以很好的实现模拟(2)分段线性插值:建立div_linear.m文件.具体编程如下/*分段线性插值函数:div_linear.m 文件*/function y = div_linear(x0,y0,x,n)%for j = 1:length(x)for i = 1:n-1if (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);elsecontinue;endend%end测试法式(text2.m):n = input(‘输入n =:’);x0 = linspace( -5,5,n);for x = -5:0.01:5y = div_linear(x0,f(x0),x,n);hold on;plot(x,y,'r');plot(x,f(x),'b');end2)运行测试法式,这是会呈现:输入n=:2)输入n=6,并按Enter键,呈现:4)关失落图形界面后,重新运行法式,输入n=11,并按enter键后呈现:5)再次关失落图形界面,输入n=100,并按enter键,呈现:此时.图形将于原函数图形基本吻合,说明分割区间越多,图像接近真实的图像.(3)用lagrange插值观察y = |sin(k*π*x)|的误差分析:1)编写函数文件,保管在f2.m 中x=0:0.01:1;k= input('输入k:')n= input('输入n:');y=abs(sin(k*pi*x));p=polyfit(x,y,n-1);py=vpa(poly2sym(p),8);plot_x=0:0.01:1;f1=polyval(p,plot_x);plot(x,y,plot_x,f1);2)运行该法式:输入k=:1输入n=:2呈现如下图形界面:关失落图形界面后重新运行f2.m,输入k=:1,n=:3呈现如下界面:再次关失落图形界面,输入k=:1,n=:6 后呈现:此时图形基本吻合.类推,输入k=2, n=3后呈现:k =2, n =11,呈现如下图形:k =2,n =15,这时呈现:k =2,n =19,呈现:当k=2,n=21时,图形如下:此时基本吻合.5、实验总结:通过本次课程设计,我初步掌握了MATLAB运用,加深了对各种线性插值的理解;培养了自力工作能力和缔造力;综合运用专业及基础知识,解决实际数学问题的能力;在本次课程设计中,在老师的精心指导下,收益匪浅.同时对数学的研究有了更深入的认识.。
用MATLAB实现拉格朗日插值和分段线性插值
用MATLAB真止推格朗日插值战分段线性插值之阳早格格创做1、真验真质:用MATLAB真止推格朗日插值战分段线性插值.2、真验手段:1)教会使用MATLAB硬件;2)会使用MATLAB硬件举止推格朗日插值算法战分段线性好值算法;3、真验本理:利用推格朗日插值要领举止多项式插值,并将图形隐式出去.4、真验步调及运止截止(1)真止lagrange插值1)定义函数:f = 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;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)修坐尝试步调,保存正在text.m文献中,真止绘图:x=-5:0.001:5;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)输进n=6,出现底下的图形:通过上图不妨瞅到当n=6是不很佳的模拟.于是沉新运止text.M并采用n=11由此可睹n=11时的图像是不妨很佳的真止模拟(2)分段线性插值:修坐div_linear.m文献.简直编程如下/*分段线性插值函数:div_linear.m 文献*/function y = div_linear(x0,y0,x,n)%for j = 1:length(x)for i = 1:n-1if (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);elsecontinue;endend%end尝试步调(text2.m):n = input(‘输进n =:’);x0 = linspace( -5,5,n);for x = -5:0.01:5y = div_linear(x0,f(x0),x,n);hold on;plot(x,y,'r');plot(x,f(x),'b');end2)运止尝试步调,那是会出现:输进n=:2)输进n=6,并按Enter键,出现:4)闭掉图形界里后,沉新运止步调,输进n=11,并按enter键后出现:5)再次闭掉图形界里,输进n=100,并按enter键,出现:此时.图形将于本函数图形基础符合,证明分隔区间越多,图像交近真正在的图像.(3)用lagrange插值瞅察y = |si n(k*π*x)|的缺点分解:1)编写函数文献,保存正在f2.m 中x=0:0.01:1;k= input('输进k:')n= input('输进n:');y=abs(sin(k*pi*x));p=polyfit(x,y,n-1);py=vpa(poly2sym(p),8);plot_x=0:0.01:1;f1=polyval(p,plot_x);plot(x,y,plot_x,f1);2)运止该步调:输进k=:1输进n=:2出现如下图形界里:闭掉图形界里后沉新运止f2.m,输进k=:1,n=:3出现如下界里:再次闭掉图形界里,输进k=:1,n=:6 后出现:此时图形基础符合.类推,输进k=2,n=3后出现:k =2, n =11,出现如下图形:k =2,n =15,那时出现:k =2,n =19,出现:当k=2,n=21时,图形如下:此时基础符合.5、真验归纳:通过本次课程安排,尔发端掌握了MATLAB使用,加深了对付于百般线性插值的明白;培植了独力处事本领战创制力;概括使用博业及前提知识,办理本质数教问题的本领;正在本次课程安排中,正在教授的粗心指挥下,支益匪浅.共时对付数教的钻研有了更深进的认识.。
拉格朗日插值多项式积分求圆周率近似Matlab实现
Lagrange 插值多项式积分求圆周率近似摘要:公式1:y1=4/(1+x^2) 公式2:y2=4*sqrt(1-x^2) 分别对公式1、公式2求其拉格朗日插值多项式,再对其求0-1上的定积分来求圆周率π的近似值,并在Matlab 中通过画图来比较两个所求得的值与真实值π的偏差。
Lagrange 插值多项式:)()(l )(L 0i n i ni x f x x ∑==其中 )())(())(()())(())(()(l 11101110i n i i i i i i i n i i x x x x x x x x x x x x x x x x x x x x x -⋯⋯--⋯⋯---⋯⋯--⋯⋯--=+-+-)(i x f 为函数在i x 处的函数值,)(x L n 为Lagrange 插值多项式。
Matlab 实现:clc;clear;a=0;b=1;n=input('Enter a number n:'); %将0-1分割成n 节点,即n-1段 X=zeros(1,n); %用来放置节点x 的值P=zeros(1,n); %用来放置节点x 对应的函数值y1 Q=zeros(1,n); %用来放置节点x 对应的函数值y2 x=0;h=(b-a)/(n-1); %h 为步长for i=1:ny1=4/(1+x^2);y2=4*sqrt(1-x^2);X(i)=x;P(i)=y1;Q(i)=y2;x=x+h;endX;P;Q; %通过循环对X、P、Q进行赋值syms s;l=1;z1=0;z2=0;for j=1:1for k=2:nl=l*(s-X(k))/(X(j)-X(k));endz1=z1+l*P(j);z2=z2+l*Q(j);endfor j=2:nl=1;for k=1:j-1l=l*(s-X(k))/(X(j)-X(k));endfor k=j+1:nl=l*(s-X(k))/(X(j)-X(k));endz1=z1+l*P(j); %通过循环求的函数y1的Lagrange插值多项式z1 z2=z2+l*Q(j); %通过循环求的函数y2的Lagrange插值多项式z2 endI1=int(z1,s,0,1); % z1对s在0-1上求定积分I1=eval(I1) %用小数形式表示I1I2=int(z2,s,0,1); % z2对s在0-1上求定积分I2=eval(I2) %用小数形式表示I2x=3.10:0.0001:3.20;y0=pi;y1=I1;y2=I2;plot(x,y0,'r') %红线为圆周率π的真实值hold onplot(x,y1,'g') %绿线为公式1所求值hold onplot(x,y2,'b') %蓝线为公式2所求值运行结果:从图中可以看出,当n=6时绿线很接近红线即圆周率π的真实值,而蓝线则偏离较远,当n=11时,绿线基本与红线重叠,而蓝线相对之前来说也减小偏差。
上交Newton,拉格朗日插值MATLAB大作业编程
作业报告使用MATLAB编程2.1Newton插值:clearclcx=[0.2 0.4 0.6 0.8 1];n=length(x);y=zeros(n);y(:,1)=[0.98 0.92 0.81 0.64 0.38]; a=x(1);b=x(end);for j=1:n-1for k=j:n-1temp=y(k+1,j)-y(k,j);y(k+1,j+1)=temp/(x(k+1)-x(k+1-j)); endc(j)=y(j,j);c(j+1)=y(j+1,j+1);endp=c(1);q=1;syms Xfor i=2:nq=q*(X-x(i-1));p=p+c(i)*q;endp=simple(p)for i=1:301t(i)=a+(b-a)/300*(i-1);Nn(i)=eval(subs(p,'X','t(i)')); endplot(t,Nn,'b')hold ongrid onlegend('Newton')title('Newton')xlabel('x')ylabel('f(x)')图像:三次样条插值:M文件spline33.mfunction [yy b c d]=spline3(x,y,xx,flag,vl,vr)if length(x)~=length(y)error('输入数据应成对');endn=length(x);a=zeros(n-1,1);b=a;d=a;dx=a;dy=a;A=zeros(n);B=zeros(n,1);fori=1:n-1a(i)=y(i);dx(i)=x(i+1)-x(i);dy(i)=y(i+1)-y(i);endfori=2:n-1A(i,i-1)=dx(i-1);A(i,i)=2*(dx(i-1)+dx(i));A(i,i+1)=dx(i);B(i,1)=3*(dy(i)/dx(i)-dy(i-1)/dx(i-1)); endif flag==0A(1,1)=1;A(n,n)=1;end% --------------------------------- %% 端点一阶导数条件%if flag==1A(1,1)=2*dx(1);A(1,2)=dx(1);A(n,n-1)=dx(n-1);A(n,n)=2*dx(n-1);B(1,1)=3*(dy(1)/dx(1)-vl);B(n,1)=3*(vr-dy(n-1)/dx(n-1));end% --------------- %% 端点二阶导数条件%if flag==2A(1,1)=2;A(n,n)=2;B(1,1)=vl;B(n,1)=vr;end% --------------- %c=A\B;fori=1:n-1d(i)=(c(i+1)-c(i))/(3*dx(i));b(i)=dy(i)/dx(i)-dx(i)*(2*c(i)+c(i+1))/3; end[mmnn]=size(xx);yy=zeros(mm,nn);fori=1:mm*nnfor ii=1:n-1if xx(i)>=x(ii)&xx(i)<x(ii+1)j=ii;break;elseif xx(i)==x(n)j=n-1;endendyy(i)=a(j)+b(j)*(xx(i)-x(j))+c(j)*(xx(i)-x(j))^2+d(j)*(xx(i)-x(j))^3; endend主程序:clear;clc;format short g;x1=[0.2 0.4 0.6 0.8 1.0]';y1=[0.98 0.92 0.81 0.64 0.38]';u1=0;un=0;xx1=[x1(1):0.001:x1(end)]';[yy1 b1 c1 d1]=spline33(x1,y1,xx1,0,u1,un);fprintf('\t\tb1\t\tc1\t\td1\n');disp([b1 c1(1:end-1,1) d1]);plot(x1,y1,'bo',xx1,yy1,'--k');legend('spline')title('spline')grid on;2.3(1)8次拉格朗日插值M文件language1.mfunction f=language(x,y,x0) syms t l;if (length(x)==length(y))n=length(x);elsedisp('x和y的维数不相等!') return;endh=sym(0);fori=1:nl=sym(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;h=h+l;endsimplify(h);if(nargin==3)f=subs(h,t,x0);elsef=collect(h);f=vpa(f,6);end主程序:x=[0 1 4 9 16 25 36 49 64];y=[0 1 2 3 4 5 6 7 8];f=language1(x,y)plot(x,y)legend('language')title('language')grid on;(2)三次样条差值:M文件spline33.mfunction [yy b c d]=spline3(x,y,xx,flag,vl,vr) if length(x)~=length(y)error('输入数据应成对');endn=length(x);a=zeros(n-1,1);b=a;d=a;dx=a;dy=a;A=zeros(n);B=zeros(n,1);fori=1:n-1a(i)=y(i);dx(i)=x(i+1)-x(i);dy(i)=y(i+1)-y(i);endfori=2:n-1A(i,i-1)=dx(i-1);A(i,i)=2*(dx(i-1)+dx(i));A(i,i+1)=dx(i);B(i,1)=3*(dy(i)/dx(i)-dy(i-1)/dx(i-1));endif flag==0A(1,1)=1;A(n,n)=1;end% --------------------------------- %% 端点一阶导数条件%if flag==1A(1,1)=2*dx(1);A(1,2)=dx(1);A(n,n-1)=dx(n-1);A(n,n)=2*dx(n-1);B(1,1)=3*(dy(1)/dx(1)-vl);B(n,1)=3*(vr-dy(n-1)/dx(n-1));end% --------------- %% 端点二阶导数条件%if flag==2A(1,1)=2;A(n,n)=2;B(1,1)=vl;B(n,1)=vr;end% --------------- %c=A\B;fori=1:n-1d(i)=(c(i+1)-c(i))/(3*dx(i));b(i)=dy(i)/dx(i)-dx(i)*(2*c(i)+c(i+1))/3;end[mmnn]=size(xx);yy=zeros(mm,nn);fori=1:mm*nnfor ii=1:n-1if xx(i)>=x(ii)&xx(i)<x(ii+1)j=ii;break;elseif xx(i)==x(n)j=n-1;endendyy(i)=a(j)+b(j)*(xx(i)-x(j))+c(j)*(xx(i)-x(j))^2+d(j)*(xx(i)-x(j))^3;endend主程序:clear;clc;format short g;x1=[0 1 4 9 16 25 36 49 64 ]';y1=[0 1 2 3 4 5 6 7 8]';u1=0;un=0;xx1=[x1(1):0.001:x1(end)]';[yy1 b1 c1 d1]=spline33(x1,y1,xx1,1,u1,un); fprintf('\t\tb1\t\tc1\t\td1\n');disp([b1 c1(1:end-1,1) d1]);plot(x1,y1,'bo',xx1,yy1,'--k');legend('spline')title('spline')grid on;4-1(1)M文件function.m:Function y=fun(x);y=sqrt(x)*log(x);主程序Clear;clc;h=0.001;n=1/h;t=0;s1=0;s2=0;fori=1:n-1t=t+function(i*h);endT=h/2*(0+2*t+f(1));T=vpa(T,7)For i=0:n-1s1=s1+function(h/2+i*h);endfori=1:n-1s2=s2+function(i*h);endS=h/6*(0+4*s1+2*s2+f(1));S=vpa(S,7) 综上,得解。
例题matlab拉格朗日插值
例题matlab拉格朗日插值拉格朗日插值是一种常用的数值插值方法,它可以通过已知的数据点来估计未知点的函数值。
在MATLAB中,我们可以使用拉格朗日插值函数polyfit和polyval来实现。
假设我们有一组已知的数据点(x1, y1), (x2, y2), ..., (xn, yn),我们想要通过这些数据点来估计一个未知点的函数值。
首先,我们需要使用polyfit函数来计算拉格朗日插值多项式的系数。
```matlabx = [x1, x2, ..., xn];y = [y1, y2, ..., yn];n = length(x) - 1; % 多项式的次数coefficients = polyfit(x, y, n);```polyfit函数返回的coefficients是一个包含多项式系数的向量,从高次到低次排列。
接下来,我们可以使用polyval函数来计算未知点的函数值。
```matlabunknown_x = ...; % 未知点的x坐标unknown_y = polyval(coefficients, unknown_x);```polyval函数接受一个多项式系数向量和一个x值作为输入,返回对应的函数值。
通过这种方式,我们可以使用拉格朗日插值来估计未知点的函数值。
下面我们来看一个具体的例子。
假设我们有一组已知的数据点(0, 1), (1, 2), (2, 3),我们想要通过这些数据点来估计未知点(1.5, ?)的函数值。
```matlabx = [0, 1, 2];y = [1, 2, 3];n = length(x) - 1;coefficients = polyfit(x, y, n);unknown_x = 1.5;unknown_y = polyval(coefficients, unknown_x);```在这个例子中,我们得到的未知点的函数值为2.5。
这意味着在x坐标为1.5的位置,我们估计的函数值为2.5。
MATLAB作业拉格朗日三阶样条插值函数牛顿插值
Lagrange插值M函数syms xx0=[0,1,2];y0=[1,2,3];n=length(x0);for i=1:na=1;for j=1:nif j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:nif k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:nL=L+y0(p)*A(p);endL>> LanguageL =x + 1三阶样条插值M函数function m=naspline(x,y,dy0,dyn,xx)n=length(x)-1;h=diff(x);lemda=h(2/n)./(h(1:n-1)+h(2:n));mu=1-lemda;g=3*(lemda.*diff(y(1:n))./h(1:n-1)+mu.*diff(y(2:n+1))./h(2:n)); g(1)=g(1)-lemda(1)*dy0;g(n-1)=g(n-1)-mu(n-1)*dyn;dy=nachase(lemda,2*ones(1:n-1),mu,g);m=[dy0;dy;dyn];if nargin>=5s=zeros(size(xx));for i=1:nif i==1,kk=find(xx<=x(2));elseif i==nkk=find(xx>x(n));elsekk=find(xx>x(i)&xx<=x(i+1));endxbar=(xx(kk)-x(i))/h(i);s(kk)=alpha0(xbar)*y(i)+alpha1(xbar)*y(i+1)+...h(i)*beta0(xbar)*m(i)+h(i)*beta1(xbar)*m(i+1);endm=s;endfunction x=nachase(a,b,c,d)n=length(a);for k=2:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(k)=(d(k)-c(k)*x(k+1))/b(k);endx=x(:);function y=alpha0(x)y=2*x.^3-3*x.^2+1;function y=alpha1(x)y=-2*x.^3+3*x.^2;function y=beta0(x)y=x.^3-2*x.^2+x;function y=beta1(x)y=x.^3-x.^2;naspline([-1 0 1],[-1 0 1],0,-1)ans =1.7500-1.0000>> naspline([-1 0 1],[-1 0 1],0,-1,-1:0.25:1)ans =-1.0000 -0.9258 -0.7188 -0.4023 0 0.4492 0.8438 1.06641.0000ans =Columns 1 through 5-1.0000 -0.9258 -0.7188 -0.4023 0 Columns 6 through 90.4492 0.8438 1.0664 1.0000牛顿插值多项式function yi=Newton(x,y,xi)n=length(x);m=length(y);if n~=merror;return;end%计算均差表YY=zeros(n);Y(:,1)=y';for k=1:n-1for i=1:n-kif abs(x(i+k)-x(i))<epserror;return;endY(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));endend%计算牛顿插值公式yi=0;for i=1:nz=1;for k=1:i-1z=z*(xi-x(k));endyi=yi+Y(1,i)*z;endEnd>>format compact>> x=pi*[1/6 1/4 1/3];y=[0.5 0.7071 0.866];xi=2*pi/9;0.550.60.650.70.750.450.50.550.60.650.70.75>> yi=Newton(x,y,xi)yi =0.6434>>fplot(‘sin ’,[pi/6 pi/4 pi/3]);hold on;>>plot(x,y,’o ’xi,0.6434,’rv ’);hold off;牛顿迭代M 函数function x=nanewton(fname,dfname,x0,e,N) if nargin<5,N=500;endif nargin<4,e=1e-4;endx=x0;x0=x+2*e;k=0;while abs(x0-x)>e&k<N,k=k+1;x0=x;x=x0-feval(fname,x0)/feval(dfname,x0); disp(x)endif k==N,warning('已达迭代次数上限');end >> fun=inline('x^3-x-1');dfun=inline('3*x^2-1'); >> nanewton(fun,dfun,1.5,0.5e-3)1.34781.32521.3247ans =1.32470.550.60.650.70.750.450.50.550.60.650.70.75。
第7次20151110-MATLAB-上机 数值分析之拉格朗日插值
实验七数值分析之拉格朗日插值一目的与要求1、掌握拉格朗日插值基函数的计算。
2、掌握拉格朗日插值多项式,会用MATLAB实现该插值过程。
3、掌握多项式的计算,会使用嵌套法。
二实验内容1、a.设F(x)=(x-x0)(x-x1)...(x-x6),其中x0=1, x1=1.8, x2=2.2, x3=2.9, x4=3.5, x5=4.3, x6=5.1,试编程求F(3), F(4.6)。
b.设F i(x)=(x-x0)... (x-x i-1) (x-x i+1) ...(x-x n),其中x0=1, x1=1.8, x2=2.2, x3=2.9, x4=3.5,x5=4.3, x6=5.1, 试编程求F2(3), F5(4.6)。
c.设P n=Σn i=0L i y i, 已知L=[1, 4, 5, 2, 3, 8, 2, 7], y=[1.2 3.2 2.5 5.7 6.2 4.8 3.6 4.3],试编程求P n。
d.已知插值点x=[0, 1, 2, 2.5, 3, 3.5, 4], y=[2.5, 0.5, 0.5, 1.5, 1.5, 1.124, 0], 编程求拉格朗日插值函数P6(2.5), P6(4.3),并画出拉格朗日插值函数P6(x)在x∈[0, 4]上的图像。
2、求解某微分方程时得到下表。
利用拉格朗日插值,给出这些数据在区间0≤x≤6上的一个连续光滑图像。
3、编写一个做线性插值并检验其精度的MATLAB程序。
输入x0和x1,然后利用y=e x产生数据点。
对于[x0, x1]内外的各种值,计算P1(x),e x和它们的差E(x)=e x-P1(x)。
绘制E(x)值的图像,观察误差如何随着x的变化而变化。
三实验结果1.四分析讨论请提供对本次实验结果的讨论分析,以及实验的心得和体会。
包括对知识点的掌握,算法的理解,以及对理论课程和实验课程改进的建议。
(另附页提供结果)1。
2、拉格朗日插值的matlab实现
syms t;
if(length(x)==length(y))
n=length(x);
else
disp('x和y的维数不相等!');
return;
end%检错
f=0.0;
for(i=1:n)
l=y(i);
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end;
[f,f0]=Language(x,y,1.6)%计算输出的拉格朗日插值多项式
%计算x=1.6时的插值输出值f0
运行结果
f =
-799/3125*t*(t-1)*(t-3/2)*(t-2)*(t-5/2)*(t-3)+561/500*t*(t-1/2)*(t-3/2)*(t-2)*(t-5/2)*(t-3)-133/75*t*(t-1/2)*(t-1)*(t-2)*(t-5/2)*(t-3)+3031/2500*t*(t-1/2)*(t-1)*(t-3/2)*(t-5/2)*(t-3)-399/1250*t*(t-1/2)*(t-1)*(t-3/2)*(t-2)*(t-3)+1411/112500*t*(t-1/2)*(t-1)*(t-3/2)*(t-2)*(t-5/2)
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));%计算拉格朗日基函数
end;
f=f+l;%计算拉格朗日插值函数
simplify(f);%化简
end
f0=subs(f,'t',x0);%计算插值点的函数值
运行程序;
x=0:0.5:3;
y=[0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411];
matlab实现拉格朗日函数,拉格朗日插值多项式
matlab实 现 拉 格 朗 日 函 数 , 拉 格 朗 日 插 值 多 项 式
%拉格朗日插值多项式 利用矩阵求解 x=1:0.2:3;%已知数据点x坐标向量:x y=sin(x);%已知数据点x坐标向量:y x1=1.1:0.2:3.1;%插值点的x坐标:x1 L=zeros(11,11);%另L矩阵为0
for i=1:11 A=ones(10,1);%另A矩阵为10行1列的矩阵 x2=x; x2(i)=[]; x2';%10行一列 B=ones(1,11);%另B矩阵为1行11列的矩阵 A*x1;%10行11列 (x2')*B;%10行11列 A*x1-(x2')*B;%11行11列 ones(10,11); x(i);%提取x的第i个元素 ones(10,11)*x(i);%10行11列的矩阵 prod(A*x1-(x2')*B);%基函数的分子 ones(10,11)*(x(i))-(x2')*B;%基函数的分母 C=prod(A*x1-(x2')*B)./prod(ones(10,11)*(x(i))-(x2')*B);%对x2进行转置%C矩阵是一个1行11列的矩阵 L(i,:)=C; %将A的第一行元素全部变为10 %将得到的矩阵赋值基函数的1,2,3。。。。11行
end L;%11行11列 y;%1行11列 y1=y*L
结.9636 0.9975 0.9917 0.9463 0.8632 0.7457
8 至 11 列
0.5985 0.4274 0.2392 0.0416
用拉格朗日插值法求解函数值 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程序例题来展示其实际运用。
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实现拉格朗日插值分段线性插值实验四用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)二分段线性插值:建立文件。
MATLAB程序设计插值实验题目
1、当2,1,1-=x 时,4,3,0)(-=x f ,求x =0时的值。
2、给出x x f ln )(=的数值表用线性插值及二次插值计算54.0ln 的近似值。
3、4()31f x x x =++,已知x =0,1,2处的值,计算x =0.11的近似值。
4.求i =3和5时的值。
5. 给定数据表,采用牛顿插值方法求i =3和5时的值。
6. 已知函数y =在4, 6.25,9x x x ===的近似值。
7. 已知函数y =在4,9,16x x x ===的近似值。
8. 已知函数y =在0,1,4,9x x x x ==== 9. 给定数据表:构造出函数()f x 的差商表,并计算x =0.5时的值.10. 已知函数y =在8,27,64x x x ===的近似值。
11. 已知函数sin()y x =在0,/4,/2x x x ππ===处的函数值,试通过一个二次插值函数求sin(/5)π的近似值。
12. 已知函数cos()y x =在0,/4,/2x x x ππ===处的函数值,试通过一个二次插值函数求cos(/5)π的近似值。
13. 已知函数tan()y x =在0,/4,/3x x x ππ===处的函数值,试通过一个二次插值函数求tan(/5)π的近似值。
14. 已知函数4y x =在1,2,3x x x ===处的函数值,试通过一个二次插值函数求 1.111x =的近似值。
15. 已知函数sin()y x =在0,/4,/2x x x ππ===处函数值,通过一个二次插值函数求1sin(2/5)π-的近似值。
16. 已知函数cos()y x =在0,/4,/2x x x ππ===处函数值,通过一个二次插值函数求1+cos(/5)π的近似值。
17. 已知函数5y x =在1,2,3x x x ===处的函数值,试通过一个二次插值函数求 1.121x =的近似值。
18. 已知函数41/y x =在1,2,3x x x ===处的函数值,试通过一个二次插值函数求 1.211x =的近似值。
拉格朗日插值龙格现象的matlab实现
拉格朗日插值龙格现象的MATLAB 实现姓名:袁宽 学号:2 专业:电气工程题目:对于函数211)(x x f +=,55≤≤-x 进行拉格朗日插值。
10=n ,按等距节点求分段线性插值,把)(x f 和插值多项式的曲线画在同一张图上进行比较。
观察Lagrange 插值及数值积分中的分段性插值。
f.m :function f= f( x )f=1./(1+x.^2);endLagrange.mfunction 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,'b')hold onplot(x0,y1,'r')使用龙格现象观察分段性插值的曲线:syms y x lx;y=1/(1+x^2);x0=-5:1:5;y0=zeros(1,length(x0));for i=1:11x=x0(i);y0(i)=eval(y);endM = -5:0.01:5;y1 = zeros(1,length(M));n = 1;for i=2:11for x=-5:0.01:5if x<x0(i) && x>=x0(i-1)lx(1)=y0(i-1)*(x-x0(i))/(x0(i-1)-x0(i));lx(2)=y0(i)*(x-x0(i-1))/(x0(i)-x0(i-1));y1(n) = lx(1)+lx(2);n = n+1;endendendezplot(y,[-5,5])hold onA =-5:0.01:5;plot(A,y1,'r');分别运行两个文件后的得到两个图形曲线:拉格朗日插值曲线分段插值曲线。
拉格朗日插值函数matlab例题
拉格朗日插值函数是一种常用的数学工具,它可以用于拟合数据、逼近函数和插值等多种数学问题。
在本文中,我将通过介绍拉格朗日插值函数的原理和应用,以及使用Matlab进行实例演示,帮助你更好地理解这一主题。
1. 拉格朗日插值函数的原理拉格朗日插值函数是通过拉格朗日插值多项式来实现插值的过程。
拉格朗日插值多项式是由一组互不相同的节点和函数值得到的,并且满足通过这些节点的所有函数值。
它的数学表达式如下所示:\[P(x) = \sum_{i=0}^{n} y_i l_i(x)\]其中 \(P(x)\) 是拉格朗日插值多项式,\(n\) 是节点数,\(y_i\) 是函数在节点 \(x_i\) 处的函数值,\(l_i(x)\) 是拉格朗日基函数。
2. 拉格朗日插值函数的应用拉格朗日插值函数广泛应用于各种领域,包括数值分析、数值计算和工程应用等。
它可以用于曲线拟合、图像处理、信号处理等多种领域,并且在实际问题中具有重要的作用。
3. 使用Matlab进行拉格朗日插值函数的实例演示接下来,我将使用Matlab进行一个简单的拉格朗日插值函数的实例演示,以便更直观地理解这一主题。
```matlab% 拉格朗日插值函数的实例演示x = [1, 2, 3, 4]; % 设定节点y = [1, 4, 9, 16]; % 对应的函数值xx = 1:0.1:4; % 生成插值点yy = zeros(size(xx)); % 初始化插值结果for i = 1:length(x)L = ones(size(xx));for j = 1:length(x)if j ~= iL = L.*(xx-x(j))/(x(i)-x(j));endendyy = yy + y(i)*L; % 计算插值结果endplot(x,y,'o',xx,yy,'-'); % 绘制插值结果xlabel('x'); ylabel('y');legend('节点','插值结果');```在这个实例中,我们首先定义了一组节点\(x\) 和对应的函数值\(y\),然后生成了插值点 \(xx\),利用拉格朗日插值多项式计算了插值结果\(yy\),最后使用Matlab进行了绘图展示。