matlab中使用lsqcurvefit函数拟合老是报错,求高手帮忙
我的自变量t和因变量H都是1*4748的数据,现在我想用函数H=abc(1)*t+abc(2)+abc(3)*sin(abc(4)*t+abc(5))利用最小二乘拟合出5...
我的自变量t和因变量H都是1*4748的数据,现在我想用函数H=abc(1)*t+abc(2)+abc(3)*sin(abc(4)*t+abc(5))利用最小二乘拟合出5个参数abc(i),我看了matlab里面的帮助写的程序老是报错,希望高手帮忙~
请尽量写得详细一些,我matlab水平太次 展开
请尽量写得详细一些,我matlab水平太次 展开
2个回答
展开全部
首先建立以个函数文件,代码如下面两行,保存到工作空间,文件名一定要是fun(因为下面的函数文件我命名为fun了)
function H=fun(abc,t)
H=abc(1)*t+abc(2)+abc(3)*sin(abc(4)*t+abc(5));
接着是主程序,包括下面全部,改一下数据,
%下面是数据,我这里是随便写的
t=linspace(0, 3 , 11);
H=[195 59 264 875 3117 8691 14888 21410 11380 817 9];
%matlab拟合的初值选择是一个麻烦的问题
abc0=[2.9 0.2 2 4 5];%这是abc的5个初值,得根据你的问题选取,我这里也是随便取的,
A=lsqcurvefit(@fun,abc0,t,H);
%下面你可以画一个图形做拟合对比
f=fun(A,t);
plot(t,f,'r',t,H,'*-b')
说明:写得很罗嗦,也挺乱的,将就着看吧
function H=fun(abc,t)
H=abc(1)*t+abc(2)+abc(3)*sin(abc(4)*t+abc(5));
接着是主程序,包括下面全部,改一下数据,
%下面是数据,我这里是随便写的
t=linspace(0, 3 , 11);
H=[195 59 264 875 3117 8691 14888 21410 11380 817 9];
%matlab拟合的初值选择是一个麻烦的问题
abc0=[2.9 0.2 2 4 5];%这是abc的5个初值,得根据你的问题选取,我这里也是随便取的,
A=lsqcurvefit(@fun,abc0,t,H);
%下面你可以画一个图形做拟合对比
f=fun(A,t);
plot(t,f,'r',t,H,'*-b')
说明:写得很罗嗦,也挺乱的,将就着看吧
展开全部
%t = [1 2 3 5 7 10 14 20 25 30 36 40 42 45]; % t,H 换成自己的数据
%H = [18 17 16 15 13 11 9 8 6 5 3 2 1 0];
fun = @(a,t) a(1)*t+a(2)+a(3)*sin(a(4))*t+a(5);
a0 = [1 1 1 1 1];
a = lsqcurvefit(fun,a0,t,H);
tt = min(t):.1:max(t);
HH = fun(a,tt);
hold on;
plot(t,H,'bo');
plot(tt,HH,'r-');
hold off;
legend('原始数据','拟合曲线');
%H = [18 17 16 15 13 11 9 8 6 5 3 2 1 0];
fun = @(a,t) a(1)*t+a(2)+a(3)*sin(a(4))*t+a(5);
a0 = [1 1 1 1 1];
a = lsqcurvefit(fun,a0,t,H);
tt = min(t):.1:max(t);
HH = fun(a,tt);
hold on;
plot(t,H,'bo');
plot(tt,HH,'r-');
hold off;
legend('原始数据','拟合曲线');
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询