| 查看: 1943 | 回复: 15 | ||
[求助]
关于matlab的参数估计
|
|
实验数据太小了:10负6次方,直接代入没法得出结果。 要怎么做啊?把数据放大一下?还是怎么弄啊。 各位虫友,有没办法啊。 |
» 猜你喜欢
第一性原理计算方向2026级博士申请 PRB*1,四级484
已经有1人回复
求助VISSIM破解版软件
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有222人回复
求2026年在台湾举行的物理和材料领域国际学术会议信息
已经有0人回复
求国际会议网站
已经有1人回复
求取一些关于纳米材料和纳米技术相关的英文PPT。
已经有0人回复
【复旦大学】二维材料方向招收2026年博士研究生1名
已经有0人回复
北京纳米能源与系统研究所 王中林院士/曹南颖研究员课题组2026级硕/博/博后招生
已经有10人回复
荷兰Utrecht University超快太赫兹光谱王海教授课题招收2026 CSC博士生
已经有16人回复
反铁磁体中的磁性切换:两种不同的机制已成功可视化
已经有0人回复
» 本主题相关价值贴推荐,对您同样有帮助:
怎样用一组参数同时拟合两个曲线--matlab
已经有5人回复
用matlab解带参数的一元三次方程--求解
已经有3人回复
matlab回归三参数 求高手解救
已经有7人回复
matlab求解方程中的参数
已经有21人回复
Matlab 参数拟合
已经有5人回复
matlab 拟合反应动力学参数结果很差。大家帮忙看一下
已经有14人回复
请教matlab反应动力学参数估计遇到的问题,谢谢
已经有15人回复
matlab参数拟合
已经有6人回复
matlab拟合方程参数时初值的选择
已经有15人回复
matlab拟合模型参数
已经有5人回复
matlab反求未知输入参数
已经有4人回复
matlab-常微分方程参数估计
已经有12人回复
求回归方程参数估计的最优化算法matlab代码
已经有9人回复
非线性拟合估计方程参数(matlab,spss,origin都可以)
已经有4人回复
matlab非线性参数拟合问题
已经有7人回复
matlab求参数时多一个常数项
已经有4人回复
求助matlab拟合参数的问题
已经有2人回复
【求助】Matlab 参数定义 求助
已经有5人回复
【求助】用matlab求解参数
已经有6人回复
【求助】急!利用matlab求参数k值
已经有3人回复
MATLAB 参数 求助
已经有1人回复

2楼2013-03-01 12:24:53
|
function KineticsEst5copy2 % 动力学ODE方程模型的参数估计 clear all clc k0 = [0.5 0.5 0.5]; % 参数初值 lb = [0 0 0]; % 参数下限 ub = [+inf +inf +inf]; % 参数上限 x0 = [1 0 0]; %原料的起始浓度 KineticsData1ss; %源数据来源文件KineticsData1ss yexp = ExpData(:,2); % yexp: 实验数据 tspan = [0 3 6 9 12 15 18 21 27 33 39 45 51 60]; %-------------------------------------------------------------------- % 使用函数fmincon()进行参数估计 [k,fval,flag] = fmincon(@ObjFunc4Fmincon,k0,[],[],[],[],lb,ub,[],[],x0,yexp); fprintf('\n使用函数fmincon()估计得到的参数值为:\n') fprintf('\tk1 = %.4f\n',k(1)) fprintf('\tk2 = %.4f\n',k(2)) fprintf('\tk3 = %.4f\n',k(3)) fprintf(' The sum of the squares is: %.1e\n\n',fval) k_fmincon = k; %-------------------------------------------------------------------- % 使用函数lsqnonlin()进行参数估计 [k,resnorm,residual,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],x0,yexp); ci = nlparci(k,residual,jacobian); fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n') fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1)) fprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2)) fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3)) fprintf(' The sum of the squares is: %.1e\n\n',resnorm) %-------------------------------------------------------------------- % 以函数fmincon()估计得到的结果为初值,使用函数lsqnonlin()进行参数估计 k0 = k_fmincon; [k,resnorm,residual,exitflag,output,lambda,jacobian] = ... lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],x0,yexp); ci = nlparci(k,residual,jacobian); fprintf('\n\n以fmincon()的结果为初值,使用函数lsqnonlin()估计得到的参数值为:\n') fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1)) fprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2)) fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3)) fprintf(' The sum of the squares is: %.1e\n\n',resnorm) %-------------------------------------------------------------------- % 模型适定性判别 Ne = length(tspan); Np = length(k); [rho2,F] = rho2_F(k,yexp,resnorm,Ne,Np); fprintf(' 实验点数和自由度分别为Ne = %d和Np = %d\n',Ne,Np) fprintf(' 决定性指标ρ^2: %.3f\n',rho2) fprintf(' F比: %.3f\n\n',F) %-------------------------------------------------------------------- % 拟合效果图(实验与拟合的比较) a = linspace(tspan(1),tspan(end),200); [a b] = ode45(@KineticEqs,a,x0,[],k); b1(:,1)=b(:,1); plot(tspan,yexp,'o',a,b1,'b-'); hold on %-------------------------------------------------------------------- % 残差关于拟合值的残差图 a = linspace(tspan(1),tspan(end),14); [a c] = ode45(@KineticEqs,a,x0,[],k); c1(:,1)=c(:,1); figure; plot(residual,'*') xlabel('拟合(单位未知)') ylabel('残差R (单位未知)') refline(0,0) %-------------------------------------------------------------------- function f = ObjFunc4Fmincon(k,x0,yexp) tspan = [0 3 6 9 12 15 18 21 27 33 39 45 51 60]; [t xa] = ode45(@KineticEqs,tspan,x0,[],k); y(:,1) = xa(:,1); f = sum((y(:,1)-yexp(:,1)).^2); %-------------------------------------------------------------------- function f = ObjFunc4LNL(k,x0,yexp) tspan = [0 3 6 9 12 15 18 21 27 33 39 45 51 60]; [t xa] = ode45(@KineticEqs,tspan,x0,[],k); y(:,1) = xa(:,1); f1 = y(:,1) - yexp(:,1); f = [f1]; % ------------------------------s------------------------------------ function dxdt = KineticEqs(t,x,k) dxdt = ... [( k(1)*x(2)-k(2)*x(1)) (k(2)*x(1)-k(2)*x(2)-2*k(3)*x(2)^2) (k(3)*x(2)^2) ]; 实验数据如下: % t x(1) ExpData = ... [ 0 1 3 0.767 6 0.593 9 0.498 12 0.444 15 0.430 18 0.420 21 0.411 27 0.394 33 0.383 39 0.369 45 0.341 51 0.336 60 0.323 ] 这是matlab里的代码 实验数据应该是yexp再乘以0.000013,但是那样的话就没法拟合了。所以一直不知道要怎么处理。 也不知道这个模型适不适合,参数的置信区间居然比参数还大,都不知道是哪里出了问题,还请帅哥帮忙看一下啊。 |
3楼2013-03-01 16:34:37
dingd
铁杆木虫 (职业作家)
- 计算强帖: 4
- 应助: 1641 (讲师)
- 金币: 15037.3
- 散金: 101
- 红花: 234
- 帖子: 3410
- 在线: 1223.5小时
- 虫号: 291104
- 注册: 2006-10-28
【答案】应助回帖
★ ★
感谢参与,应助指数 +1
csgt0: 金币+2, 谢谢 2013-03-04 13:32:41
感谢参与,应助指数 +1
csgt0: 金币+2, 谢谢 2013-03-04 13:32:41
4楼2013-03-01 17:02:07
5楼2013-03-01 19:02:53
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
csgt0: 金币+2, 谢谢 2013-03-04 13:32:49
zijikai: 金币+55, ★有帮助 2013-03-04 15:28:29
csgt0: 金币+2, 谢谢 2013-03-04 13:32:49
zijikai: 金币+55, ★有帮助 2013-03-04 15:28:29
|
首先浓度这么低肯定是有问题的,如果采用单位为SI制,很难想象在这么低的浓度下仪器还能保证很高的精度。 如果数据确实没问题,那你可以考虑采用适当的单位来放大你的数据。 另外你也可以通过修正优化函数,或者对lsqnonlin等内部命令进行详细设置来完成。 Matlab最小辨识的数为2e-16,你的数据离2e-16还早类。 |
» 本帖已获得的红花(最新10朵)

6楼2013-03-01 19:27:41
7楼2013-03-01 20:43:08
southpark007
禁虫 (著名写手)
|
本帖内容被屏蔽 |
8楼2013-03-01 20:55:06
9楼2013-03-01 20:56:16

10楼2013-03-01 21:43:33













回复此楼
zijikai