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

一共需要拟合六十组x和y,每组x和y都分别有20480个数据。x一直取1/2048,2/2048,3/2048,.......20480/2048.y的取值见图片,每一列... 一共需要拟合六十组x和y,每组x和y都分别有20480个数据。x一直取1/2048,2/2048,3/2048,.......20480/2048.y的取值见图片,每一列为一组y的取值,共有六十列。求大神帮忙写一个matlab程序,能将excel中得数据导入,然后计算得出六十组a和b的解。 展开
 我来答
todingdong
2012-01-12 · TA获得超过202个赞
知道答主
回答量:88
采纳率:0%
帮助的人:87.6万
展开全部
用最小二乘拟合吧。把那个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组。
你试试看看行不行吧。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式