作业帮 > 综合 > 作业

如何用matlab进行已知函数的非线性拟合

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/21 19:44:03
如何用matlab进行已知函数的非线性拟合
y=a1*x1+a2*x2+(b1*x1+b2*x2)*(1+exp(c+dx3));
已知y,x1,x2,x3的80个值 求a1,a2,a3的拟合值
不好意思 b1 b2 c d 的拟合也要求 a3写错了。
首先将y和x1,x2,x3都变为列向量,就是80x1的矩阵
如果原来是行向量1x80的矩阵用y=y.'或x1=x1.‘转置一下就可以了
将x1 x2 x3合拼为80x3的矩阵
x=[x1 x2 x3];
然后创建函数句柄
fun=@(a,x) a(1)*x(:,1)+a(2)*x(:,2)+(a(3)*x(:,1)+a(4)*x(:,1)).*(1+exp(a(5)+a(6)*x(:,3)));
其中a1=a(1),a2=a(2),b1=a(3),b2=a(4),c=a(5),d=a(6);
a0=[* * * * * *]; %这里要为6个参数赋予一个初值
aa=nlinfit(x,y,fun,a0); %调用nlinfit进行拟合,得到的aa是6个值的向量,对应原来的6个参数
这里关键是初值的选择,如果初值和结果很接近,那么拟合很快收敛
如果初值选择不恰当,可能计算收敛慢,甚至不收敛,得不到结过