24小时热门版块排行榜    

查看: 4229  |  回复: 12
本帖产生 1 个 计算强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

258190169

铜虫 (小有名气)

[求助] matlab-常微分方程参数估计

初始数据浓度和时间
t=[0,10,30,50,70,90,110,130,150,160];
c=[0,0.23211,0.45906,0.68601,0.92328,1.21213,1.32561,1.34624,1.39782,1.398];
微分方程,dc/dt=[4.41/96485-(4.41*k+L*4.41/96485)c]/(1+4.41*k*t)

要求: 1.得到拟合参数:k 和L 以及相对偏差
       2.得到拟合曲线和数据点的图
       3.最好附上院程序
回复此楼

» 猜你喜欢

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

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

dbb627

荣誉版主 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
258190169(金币+20): 多谢大侠 你的QQ是多少可以和你联系一下嘛 2011-12-16 22:12:03
cenwanglai(金币+5, 计算强帖+1): 谢谢给予帮助~ 2011-12-20 09:07:46
引用回帖:
2楼: Originally posted by 258190169 at 2011-12-16 16:49:37:
本人编写的程序如下但是无法运行,由于是新手,希望高手帮忙调试一下:
function PenicilliumEst
clear all;
t=[0,10,30,50,70,90,110,130,150,160];
y=[0,0.23211,0.45906,0.68601,0.92328,1.21213,1.32561, ...

CODE:
function PenicilliumEst
clear all;
t=[0,10,30,50,70,90,110,130,150,160];
y=[0,0.23211,0.45906,0.68601,0.92328,1.21213,1.32561,1.34624,1.39782,1.398];
y0=0;

% Nonlinear least square estimate using lsqnonlin()
beta0=[0.001 0.001];
lb=[0 0];ub=[inf inf];
[beta,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@Func,beta0,lb,ub,[],t,y,y0);         
ci = nlparci(beta,residual,jacobian);
beta
% result
fprintf('\n Estimated Parameters by Lsqnonlin():\n')
fprintf('\t k1 = %.4f ± %.4f\n',beta(1),ci(1,2)-beta(1))
fprintf('\t k2 = %.4f ± %.4f\n',beta(2),ci(2,2)-beta(2))
fprintf('  The sum of the residual squares is: %.1e\n\n',sum(residual.^2))

% plot of fit results
tspan = [0  max(t)];
[tt yc] = ode45(@ModelEqs,tspan,y0,[],beta);
tc=linspace(0,max(t),200);
yca = spline(tt,yc,tc);
plot(t,y,'ro',tc,yca,'r-');
hold on
xlabel('Time');
ylabel('Concentration');
hold off
% =======================================
function f1 = Func(beta,t,y,y0)        % Define objective function
tspan =t;
[tt yy] = ode45(@ModelEqs,tspan,y0,[],beta);
yc= spline(tt,yy,t);
f1=y-yc;
% ==================================
function dydt = ModelEqs(t,y,beta)          % Model equations
dydt = (4.41/96485-(4.41*beta(1)+beta(2)*4.41/96485)*y)/(1+4.41*beta(1)*t);

改的可以运行了,但是初值不合适
The more you learn, the more you know, the more you know, and the more you forget. The more you forget, the less you know. So why bother to learn.
3楼2011-12-16 17:31:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 258190169 的主题更新
信息提示
请填处理意见