24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2538  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

lihongru

金虫 (小有名气)

[求助] matlab非线性参数拟合问题

现已知x和y的一系列实验值,且已知x和y具有如下关系:
y=kln(x-ky)+a,期中k和a是待拟合的参数,我一开始采用线性拟和的方法,先给括号中的k赋初值k0,对y和ln(x-k0)线性回归出新的k和a,然后对k进行迭代和线性拟合,直到k收敛,现在的问题是有的情况下能够收敛出k,有时不收敛,请问有没有更好的非线性回归方法,求得k和a参数呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lihongru

金虫 (小有名气)

最后用如下程序解决了
delt=1*10^-4;%设定迭代终止值
k=6:0.00001:15;%另一种求k值的方法
g=length(k);
f=1;
i=0;
while f>=delt
  i=i+1;
  d0=d-k(i)*s;
  lnd0=log(d0);
  X0=[lnd0,DT,cons];
  p=X0\lns;
  m=p(1)-k(i);
  f=abs(m);
end
p
i
就是整体感觉比较笨重,如果用非线性拟合的话,可能会更好,感谢楼上两位的帮助!
8楼2011-10-26 08:05:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

lihongru(金币+10): 谢谢,我对1stOpt不是特别熟悉,回头试一下。 2011-10-24 20:58:45
你的问题已变成隐函数拟合了,可以试下1stOpt,处理的很好。
2楼2011-10-24 09:36:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yqx1985

木虫 (著名写手)

云中仙

【答案】应助回帖

★ ★
微尘、梦想(金币+2): 谢谢参与应助 2011-10-24 17:46:23
lihongru(金币+10): 谢谢,我试着运行一下。 2011-10-24 21:00:32
你的表达式,经过转化不就是下面的形式吗?
x=e^[(y-a)/k]+ky;
你可以在matlab中建立一个函数
function y=fun(x,p)
a=p(1);k=p(2);
y=e^((x-a)./k)+k*x;
end
进而你可以用nlinfit函数进行非参数拟合
options = statset('Robust','on');
[beta,r,J,Sigma,mse] = nlinfit(x,y,@fun,rand(1,2),options);
即可得到参数的估计值,当然,你也可以重新定义函数,采用最小二乘的方法进行参数估计。
人面不知何时去,桃花依旧笑春风
3楼2011-10-24 11:24:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lihongru

金虫 (小有名气)

我试着用另一种方法解了一下,就是我知道k的大概范围,然后程序如下:
k=6:0.1:15%另一种求k值的方法
g=length(k);
for i=1:g
d0=d-k(i)*s;
lnd0=log(d0);
X0=[lnd0,DT,cons];
p=X0\lns;
m=p(1)-k(i);
f=abs(m);
if f>=delt
    return
else
end
end
p
可是运行不出结果,也不知程序错在什么地方。
4楼2011-10-24 21:04:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见