a=[3946 0;5193 50;5762 100;6311 150;6795 200;7257 250;7704 300;8170 350;
8603 400;9073 450;9511 500;10001 550;10435 600;10932 650;11400 700;
11938 750;12428 800;12995 850;13560 900;14246 950;15063 1000];
x=a(:,2);
y=a(:,1);
x2=1:60:1200;
y2=interp1(x,y,x2, 'pchip');
plot(x,y,'bo',x2,y2,'r');
legend('千分尺数据','分段插值数据','Location', 'Best')
grid on
xlabel('x 容量值(L)'),ylabel('y 电流值(mA)')
#include <stdioh>
float lagrange(float x[],float y[],float xx) // 不写 i,不要 int n
{
int i,j;
float a[3],yy=00; // 定态数组 a[3]
for(i=0;i<=2;i++) { a[i]=y[i];
for(j=0;j<=2;j++)
if(j!=i) a[i]=(xx-x[j])/(x[i]-x[j]);
yy+=a[i]; }
return yy; }
void main() {
int i;
// 去掉函数原型声明
float x[3],y[3],xx,yy; // 定态数组 x[3],y[3]
for(i=0;i<=2;i++) {
printf("x[%d]:",i); scanf("%f",&x[i]); }
printf("\n");
for(i=0;i<=2;i++)
{
printf("y[%d]:",i);scanf("%f",&y[i]);
}
printf("\n"); printf("Input xx:");
scanf("%f",&xx);
yy=lagrange(x,y,xx);
printf("x=%f,y=%f\n",xx,yy);
}
clc,clear
x=[01 02 015 0 -02 03];
y=[095 084 0876 106 150 072];
p=polyfit(x,y,2)
xi=-02:001:03;
yi=polyval(p,xi);
X=xi;Y=yi;
fun=inline('c(1)X^2+c(2)X+c(3)','c','X');
[c,resnorm,residual,exitflag]=lsqcurvefit(fun,[1,1,1],X,Y);
c,exitflag
1、 实验内容: 用MATLAB实现拉格朗日插值和分段线性插值。2、 实验目的:1) 学会使用MATLAB软件;2) 会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;3、实验原理:利用拉格朗日插值方法进行多项式插值,并将图形显式出来。4、实验步骤及运行结果(1)实现lagrange插值1)定义函数: f = 1/(x^2+1) 将其保存在fm 文件中,具体程序如下:function y = f1(x)y = 1/(x^2+1);2) 定义拉格朗日插值函数:将其保存在lagrangem 文件中,具体实现程序编程如下:function y = lagrange(x0,y0,x)m = length(x); /区间长度/n = length(x0);for i = 1:n l(i) = 1;endfor i = 1:mfor j = 1:nfor k = 1:n if j == k continue; endl(j) = ( x(i) -x0(k))/( x0(j) - x0(k) )l(j);end endend y = 0;for i = 1:n y = y0(i) l(i) + y; end3) 建立测试程序,保存在textm文件中,实现画图:x=-5:0001:5; y=(1+x^2)^-1; p=polyfit(x,y,n); py=vpa(poly2sym(p),10) plot_x=-5:0001:5; f1=polyval(p,plot_x); figureplot(x,y,‘r',plot_x,f1)输入n=6,出现下面的图形:通过上图可以看到当n=6是没有很好的模拟。于是重新运行textM并选择n=11由此可见n=11时的图像是可以很好的实现模拟(2)分段线性插值: 建立div_linearm文件。具体编程如下/分段线性插值函数:div_linearm 文件/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; endend%end 测试程序(text2m): n = input(‘输入n =:’);x0 = linspace( -5,5,n);for x = -5:001:5 y = 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)编写 函数文件,保存在f2m 中x=0:001:1;k= input('输入k:')n= input('输入n:');y=abs(sin(kpix));p=polyfit(x,y,n-1);py=vpa(poly2sym(p),8);plot_x=0:001:1;f1=polyval(p,plot_x);plot(x,y,plot_x,f1); 2)运行该程序:输入k=:1输入n=:2出现如下图形界面:关掉图形界面后重新运行f2m,输入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时,图形如下:此时基本吻合。
以上就是关于matlab插值程序全部的内容,包括:matlab插值程序、用拉格朗日插值法(二次插值)来计算某个f(x)的值,我用了C语言编,但是编译的时候很多错误,求修改啊!、求高手指点,matlab问题.大概是这个样子的,给一组数据,用二次多项式先插值,再拟合.求程序啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)