matlab省边界,matlab M文件 给规定参数设个边界 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

一下代码直接复制到m文件中即可。拟合结果以及相关性系数R^2见附图1。

%-------------------Start--------------------------------------------

function feixianxingnihe1

clear all;clc

format long

tspan=[0.0833 0.5 1 2 4 8];    %t的数据,在此输入

xexp=[2.2505 1.6489 0.2789 0.2412 0.1077 0.1035];    %c的数据,在此输入

k0=[2.6 1.45 0.022 0]; %这里设定A1~A4的初值

lb=-[1 0 1 0]*1e5;  %分别设定A1~A4的取值下限,A2和A4已经设为大于等于0了

ub=[1 1 1]*1e5;    %A1~A4的取值上限

%-------------------------------------------------------------------------

% 使用函数lsqnonlin()进行参数估计

OPTIONS=optimset('MaxFunEvals',1000);

[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...

lsqnonlin(@ObjFunc,k0,lb,ub,OPTIONS,tspan,xexp);

ci = nlparci(k,residual,jacobian);

%residual;

fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')

fprintf('\n\t参数 A1 = %.16f',k(1))

fprintf('\n\t参数 A2 = %.16f',k(2))

fprintf('\n\t参数 A3 = %.16f',k(3))

fprintf('\n\t参数 A4 = %.16f',k(4))

y=KineticsEqs(tspan,k);

R2=1-sum((xexp-y).^2)./sum((xexp-mean(y)).^2);

fprintf('\n\t相关系数之平方R^2 = %.16f',R2);

figure

plot(tspan,KineticsEqs(tspan,k),'b',tspan,xexp,'or'),legend('计算值','实验值','Location','Best')

%-------------------------------------------------------------------------

function f = ObjFunc(k,tspan,xexp)

f=KineticsEqs(tspan,k)-xexp;

%------------------------------------------------------------------------

function xt = KineticsEqs(t,k)

xt=k(1)*exp(-k(2)*t)+k(3)*exp(-k(4)*t);

%-----------------------------------The  end -----------------------------

在代码赋于初值的那一部分,可以根据各参数的物理意义输入具体数值,最后的拟合结果与初值关系很大。

另外用1stopt可以得到R^2=0.993409615207485的拟合结果:

A1                 -17577.3242768536

A2                 99.2632248231063

A3                 8.9625935335228

A4                 3.38938238943609

以及若干组R^2=0.993409615207485的拟合结果:

A1                 8.96259352762256

A2                 3.38938238846346

A3                 -25330.6623331322

A4                 103.649850688563

分析选定的方程形式可知,其实A1,A2,A3,A4具有对称性A(i)=8.96259352762256, 3.38938238846346是数值稳定的,剩余的两个A(i)只要一个数值较大,即会使得那一整项为0。

当然,R^2大的,不一定具有物理意义。

1122189_1365145374_726.jpg

附图1.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值