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

y=a1*x1+a2*x2+(b1*x1+b2*x2)*(1+exp(c+dx3));已知y,x1,x2,x3的80个值求a1,a2,a3的拟合值不好意思b1b2cd的拟... 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写错了。。。
展开
dukinkin
推荐于2018-04-13 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:872万
展开全部
首先将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个参数

这里关键是初值的选择,如果初值和结果很接近,那么拟合很快收敛
如果初值选择不恰当,可能计算收敛慢,甚至不收敛,得不到结过
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式