24小时热门版块排行榜    

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

vs570588

木虫 (正式写手)

[求助] 帮帮忙看看我的难题

[求助] 求高手,拟合求参数

function M=Monod(c,Y)
M= -c(1).*Y./(Y+c(2))


Y=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31 0];
x=[-0.78 -2.2268 -5.2033 -6.1377 -8.6137 -8.6428 -8.4792 -8.1692 -7.7128 -7.11 -6.3608 -1.9];
x=x/214.63;
c0=[0.03 0.3];beta=nlinfit(Y,x ,’Monod’,c0);
为了参数c(1),c(2),这个小程序快把我折磨死了。现在出来NLINFIT did NOT converge. Returning results from last iteration.
beta =

    0.0271
   -8.1892
按道理,-8.1892不合理。出来的参数应该和我预估的差不多。大家看看,这是怎样回事?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)

高手在哪里,大家看是数据本身的问题吗?
4楼2011-05-28 19:32:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)

引用回帖:
Originally posted by wmc_1979 at 2011-05-29 22:01:36:
我帮你算了一下
beta =

    0.0249  -14.4864

谢谢,第二个参数是负的就没有意义,能在0到1之间取到最佳解吗
6楼2011-05-30 16:36:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)


dubo(金币+1): 谢谢参与 2011-06-13 19:30:40
引用回帖:
Originally posted by dubo at 2011-05-30 19:01:50:
用matlab算的吧,
function M=Monod(c,Y)
M= -c(1).*Y./(Y+c(2))
函数定义不对
nlinfit函数在Matlab中是如何调用的,你可以参见
http://zhidao.baidu.com/question/25633638

%非线性拟合浓度变化过程
t=[0 2 7 9 19 22 24 26 28 30 32 40];%时间采样点
s=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31 0];%每时刻浓度观测值
x=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31];%找出浓度的初始值,方程右边的值就用它
i=1length(t)-1);
t1=t(i+1)-t(i);%求t间隔
s1=s(i+1)-s(i);%求s间隔
y=s1./t1;
w=213.63;%污泥浓度
y=y./213.63;
%--------------------------------------------------------------------------
Monod=inline('-beta(1).*x./(x+beta(2))','beta','x');
c0=[0.03 0.3];
beta=nlinfit(x,y,Monod,c0);
m=beta(1);
n=beta(2);
xx=min(x):max(x);
yy=-m.*xx./(xx+n);
plot(x,y,'o',xx,yy,'r')

这个是别人帮我写的,对着吧。但还是出现NLINFIT did NOT converge. Returning results from last iteration。有些人说是我拟合用的数学表达式,不应该用双曲线,但是我的模型确实是这样表达式。难道是我原始数据不好。
9楼2011-05-30 19:13:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)


dubo(金币+1): 谢谢参与 2011-06-13 19:30:59
引用回帖:
Originally posted by dubo at 2011-05-30 19:43:12:
数据2:
t=[0 2 7 9 19 22 24 26 28 30 32 40];%时间采样点
s=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31 0];%每时刻浓度观测值
x=[255.55 246.44 237.28 228.36 136.08 114 99.1 ...

真的很感谢你了,另外我就把我要拟合求参的问题给你说说。
ds/dt  =  -q*S*X/(k+S)这里未知参数是q和K, q是比最大降解速率,K是半饱和常数,X是污泥浓度214.63,这个值是定值。S是污染物的浓度, t肯定就是时间了。我具体试验是隔一段时间,取一个样品测出S,所以我最原始数据是
t=[0 2 7 9 19 22 24 26 28 30 32 40];
S=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31 0];
就那这一组数据来拟合出上面微分方程里中的未知参数。你看能用啥好办法?另外,我也看宋新山《matlab在环境科学中的应用》,上面也用个例子,但是有个例子直接给出了一系列ds/dt的值,并且这些值呈递增。但你也知道,实际试验不会出现这种理想情况。所以我求ds/dt值是用多项式拟合,求各个点的导数,肯定这样误差大。但我实在想不出好办法。也有人说用有限差分法,求出数值解,再代入,求最优化参数。这样子怎样用matlab实现,或者用其它软件也可以。还有你感觉把那些数据删除,就能很好拟合求参。
11楼2011-05-31 16:46:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)


dubo(金币+1): 谢谢参与 2011-06-13 19:31:05
引用回帖:
Originally posted by dubo at 2011-05-30 19:43:12:
数据2:
t=[0 2 7 9 19 22 24 26 28 30 32 40];%时间采样点
s=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31 0];%每时刻浓度观测值
x=[255.55 246.44 237.28 228.36 136.08 114 99.1 ...

你好,我用重新参考别人写的程序,用数值解求参数,程序写的很繁琐,你能帮我改改吗?另外,现在运行不下去,提示说divided by zero.你能给看看,怎样把数据处理就能好些?
S=dsolve(‘Dy=-k1*y*214.63/(y+k2)’,’y(0)= 255.55’)
simplify(S)                                        %微分方程积分,求出来式子相当繁琐


function monodfit2
clear all;
t= [0 2 7 9 19 22 24 26 28 30 32 40]’;
c=[255.55 246.44 237.28 228.36 136.08 114 99.16 82.33 69.4 56.94 42.31 0]’;
[y_row,y_col]=size(c);
beta0=[0.03,0.3];
c0=255.55;
lb=[0 0];ub=[inf inf];
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@seqfun,beta0,lb,ub,[],t,c,y_col,c0);
ci = nlparci(beta,residual,jacobian);
function y = seqfun(beta,t,c,y_col,c0)      % Objective function
tspan = [0  max(t)];
[tt yy] = ode45(@modeleqs,tspan,c0,[],beta);
for col = 1:y_col
    yc(:,col) = spline(tt,yy(:,col),t);
end
y=[c(:,1)-yc(:,1)];

function dydt = modeleqs(t,y,beta)       % Model equation
dydt=beta(2)*lambertw(1/beta(2)*exp(-1/100*(21463*t*beta(1)-25555-100*beta(2)*log(19)-100* beta(2)*log(269)+200* beta(2)*log(2)+100* beta(2)*log(5))/ beta(2)));
12楼2011-06-02 15:07:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)

13楼2011-06-09 20:32:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vs570588

木虫 (正式写手)

引用回帖:
Originally posted by wangww2011 at 2011-06-09 22:20:48:
楼主在最开始给的那些数据不应该用那个函数进行拟合,所以拟合出来有问题。

对于楼主给的这个微分方程,倒是可以直接拟合,但是很奇怪,怎么和楼主的数据不太符合呢,看下图,
[eimg]98/b8/772953_1307629 ...

你说的对,也有人说我的数据不适合用那个函数拟合,不过也有人把联合数据和微分方程,把这个问题直接转化为求方程解。其它人说必须得用一定数理统计的知识。要转化。所以我现在也就把别人给我写的程序当成黑箱,我看不懂。就用用。
15楼2011-06-10 16:10:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 学员BmWXvC 的主题更新
信息提示
请填处理意见