如何用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写错了。
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/26 04:59:33
![如何用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写错了。](/uploads/image/z/6075607-31-7.jpg?t=%E5%A6%82%E4%BD%95%E7%94%A8matlab%E8%BF%9B%E8%A1%8C%E5%B7%B2%E7%9F%A5%E5%87%BD%E6%95%B0%E7%9A%84%E9%9D%9E%E7%BA%BF%E6%80%A7%E6%8B%9F%E5%90%88y%3Da1%2Ax1%2Ba2%2Ax2%2B%28b1%2Ax1%2Bb2%2Ax2%29%2A%281%2Bexp%28c%2Bdx3%29%29%3B%E5%B7%B2%E7%9F%A5y%2Cx1%2Cx2%2Cx3%E7%9A%8480%E4%B8%AA%E5%80%BC+%E6%B1%82a1%2Ca2%2Ca3%E7%9A%84%E6%8B%9F%E5%90%88%E5%80%BC%E4%B8%8D%E5%A5%BD%E6%84%8F%E6%80%9D+b1+b2+c+d+%E7%9A%84%E6%8B%9F%E5%90%88%E4%B9%9F%E8%A6%81%E6%B1%82+a3%E5%86%99%E9%94%99%E4%BA%86%E3%80%82)
如何用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写错了。
如何用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写错了。
如何用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个参数
这里关键是初值的选择,如果初值和结果很接近,那么拟合很快收敛
如果初值选择不恰当,可能计算收敛慢,甚至不收敛,得不到结过