作业帮 > 综合 > 作业

关于matlab曲线拟合函数 拟合的目标函数为y=Asin((1/2048)x+b)

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/09 07:54:34
关于matlab曲线拟合函数 拟合的目标函数为y=Asin((1/2048)x+b)
一共需要拟合六十组x和y,每组x和y都分别有20480个数据.x一直取1/2048,2/2048,3/2048,.20480/2048.y的取值见图片,每一列为一组y的取值,共有六十列.求大神帮忙写一个matlab程序,能将excel中得数据导入,然后计算得出六十组a和b的解.

用最小二乘拟合吧.把那个20480行60列的数就复制粘贴到matlab上就好了吧.复制那个20480行60列的数,在matlab上输入:
B=[粘贴];
B=B';
x0=1/2048:1/2048:10;
for i=1:60
f=inline('a(1)*sin((1/2048)*x+a(2))','a','x');
y0=B(1,:);
[xx,res]=lsqcurvefit(f,[1 1],x0,y0);
C(i,:)=xx;
end
C
编了一个给你,输出的C是60行2列的.每行的2个数从左到右就是对应的a、b,共有60组a、b. 你试试看.应该可以.
再问: 我想请问一下。我后来发现那个拟合的目标函数需要改成asin(bt+c)这种形式了,就是原来b是固定的,只有a,c两个参数,现在需要abc三个参数,程序要改哪些地方?我matlab还没开始学,比较菜,麻烦您了,谢谢
再答: 改掉inline里的函数原型,在lsqcurvefit初始值那里多加一个数。。然后我发现打错了一行y0=B(1,:);应该是y0=B(i,:); clear all B=[粘贴]; B=B'; x0=1/2048:1/2048:10; for i=1:60 f=inline('a(1)*sin(a(2)*x+a(3))','a','x'); y0=B(i,:); [xx,res]=lsqcurvefit(f,[1 1 1],x0,y0); C(i,:)=xx; end C C就是60行3列的,每行的3个数从左到右就是对应的a、b、c,共有60组。 你试试看看行不行吧。。