24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1534  |  回复: 15

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的回帖

wangww2011

木虫 (著名写手)

【答案】应助回帖

★ ★
vs570588(金币+1): 谢谢 2011-06-10 16:08:17
jjdg(金币+2): 辛苦了 2011-06-11 00:31:56
vs570588(金币+1): 谢谢你了,你看能拟合出来是个直线吗 2011-06-13 14:14:21
引用回帖:
Originally posted by vs570588 at 2011-05-31 16:46:03:
真的很感谢你了,另外我就把我要拟合求参的问题给你说说。
ds/dt  =  -q*S*X/(k+S)这里未知参数是q和K, q是比最大降解速率,K是半饱和常数,X是污泥浓度214.63,这个值是定值。S是污染物的浓度, t肯定就是时间 ...

楼主在最开始给的那些数据不应该用那个函数进行拟合,所以拟合出来有问题。

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

楼主给的数据像是凸函数,而直接求解微分方程得到的典型曲线确实凹函数,所以我拟合的结果就不敢放上来了。
14楼2011-06-09 22:20:48
已阅   回复此楼   关注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的回帖

wangww2011

木虫 (著名写手)


jjdg(金币+1): 感谢参与 2011-06-14 12:44:30
引用回帖:
Originally posted by vs570588 at 2011-06-10 16:10:54:
你说的对,也有人说我的数据不适合用那个函数拟合,不过也有人把联合数据和微分方程,把这个问题直接转化为求方程解。其它人说必须得用一定数理统计的知识。要转化。所以我现在也就把别人给我写的程序当成黑箱 ...

如果对你这个数据拟合,可以这样先把你这个微分方程该写成dt/ds的形式,直接求解为
t(s)=-((s + k ln(s))/q ) + c,其中在原微分方程中出现的常数X现在已经包含在现在的q中了,因为有ln(s),所以把你原始数据中的s=0的情况改一点点(譬如改为0.01或者不要这个点了),再拟合得到:
{c = 38.5602, k = 1.5009, q = 7.31481}
图为:(虽然看上去为直线,但是确实在你给出的微分方程上拟合出来的)
16楼2011-06-13 18:52:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 学员BmWXvC 的主题更新
信息提示
请填处理意见