matlab下载中运行出现问题怎么改动?运行完出现??? Attempted to access k1(2); index out of bounds because n

小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
求大家帮我看看下面中matlab中的程序问题出在哪里?
求动力学参数
方程为:r1 =(k(1)*k(2)*c^2-0.25*k(3)*k(4)*(9.404-c)^2)/(1+k(2)*c+0.5*k(4)*(9.404-c));
t& && && & c
0& & & & 8.
3& & & & 5.
6& & & & 5.
9& & & & 4.
12& & & & 4.
15& & & & 4.
18& & & & 4.
21& & & & 3.
31& & & & 3.
41& & & & 3.
51& & & & 3.
61& & & & 3.
求k1,k2,k3,,k4
下面是写的程序,大家帮忙看看,为什么结果是直线呢?
function parafit
% r1 =(k(1)*k(2)*c^2-0.25*k(3)*k(4)*(9.404-c)^2)/(1+k(2)*c+0.5*k(4)*(9.404-c));
% dCAdt = - r1;
%& && &&&t/min& &CA& &&&/ mol/L
&&Kinetics=;
c=Kinetics( :,1)';
k0 = ;& && && &% 参数初值
lb = ;& && && && && && & % 参数下限
ub = ;& & % 参数上限
yexp = K& && && && && && &
warning off
% 使用函数fmincon()进行参数估计
= fmincon(@ObjFunc7Fmincon,k0,,,,,lb,ub,,,x0,yexp);
fprintf('\n使用函数fmincon()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('&&The sum of the squares is: %.1e\n\n',fval)
warning off
% 使用函数lsqnonlin()进行参数估计
& & lsqnonlin(@ObjFunc7LNL,k0,lb,ub,,x0,yexp);& && &
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('&&The sum of the squares is: %.1e\n\n',resnorm)
warning off
% 以函数fmincon()估计得到的结果为初值,使用函数lsqnonlin()进行参数估计
& & lsqnonlin(@ObjFunc7LNL,k0,lb,ub,,x0,yexp);& && &
ci = nlparci(k,residual,jacobian);
fprintf('\n\n以fmincon()的结果为初值,使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('&&The sum of the squares is: %.1e\n\n',resnorm)
= ode45(@KineticEqs,tspan,x0,,k_fmls);
plot(t,x(:,1),t,yexp(:,2),'*');legend('ca-pr','ca-real')
plot(t,x);
% ------------------------------------------------------------------
function f = ObjFunc7Fmincon(k,x0,yexp)
&&= ode45(@KineticEqs,tspan,x0,,k);& &
y(:,2) = x(:,1);
f =&&sum((y(:,2)-yexp(:,2)).^2) ;
% ------------------------------------------------------------------
function f = ObjFunc7LNL(k,x0,yexp)
= ode45(@KineticEqs,tspan,x0,,k);& &
y(:,2) = x(:,1);
f1 = y(:,2) - yexp(:,2);
% ------------------------------------------------------------------
function dxdt = KineticEqs(t,x,k)
Kinetics=;
c=Kinetics(:,1)';
for i=1:14
& & c(i)=c(:,i);
r1 =(k(1)*k(2)*c(i)^2-0.25*k(3)*k(4)*(9.404-c(i))^2)/(1+k(2)*c(i)+0.5*k(4)*(9.404-c(i)));
dCAdt = - r1;
结果如下:
H8_DJFZ~6NZC}07J0EXL1]L.png
:hand:您好,您的计算结果我看到了,我想说的是我上面编的Matlab程序正确吗?为什么会出现那样的计算结果?还有就是您计算的方法是最小二乘吗?我现在需要用matlab计算,因为写论文需要。所以您能不能帮忙看一下程序是否正确?
拟合曲线和散点差异明显,可能是因为参数初值选取得不好。
程序有错,最后面函数写错了
function parafit
% r1 =(k(1)*k(2)*c^2-0.25*k(3)*k(4)*(9.404-c)^2)/(1+k(2)*c+0.5*k(4)*(9.404-c));
% dCAdt = - r1;
%& && &&&t/min& &CA& &&&/ mol/L
&&Kinetics=;
k0 = ;& && && &% 参数初值
lb = ;& && && && && && & % 参数下限
ub = ;& & % 参数上限
yexp = K& && && && && && &
warning off
% 使用函数fmincon()进行参数估计
= fmincon(@ObjFunc7Fmincon,k0,,,,,lb,ub,,,x0,yexp);
fprintf('\n使用函数fmincon()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('&&The sum of the squares is: %.1e\n\n',fval)
warning off
% 使用函数lsqnonlin()进行参数估计
& & lsqnonlin(@ObjFunc7LNL,k0,lb,ub,,x0,yexp);& && &
ci = nlparci(k,residual,jacobian);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('&&The sum of the squares is: %.1e\n\n',resnorm)
warning off
% 以函数fmincon()估计得到的结果为初值,使用函数lsqnonlin()进行参数估计
& & lsqnonlin(@ObjFunc7LNL,k0,lb,ub,,x0,yexp);& && &
ci = nlparci(k,residual,jacobian);
fprintf('\n\n以fmincon()的结果为初值,使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\tk1 = %.11f\n',k(1))
fprintf('\tk2 = %.11f\n',k(2))
fprintf('\tk3 = %.11f\n',k(3))
fprintf('\tk4 = %.11f\n',k(4))
fprintf('&&The sum of the squares is: %.1e\n\n',resnorm)
= ode45(@KineticEqs,tspan,x0,,k_fmls);
plot(t,x,'o-',t,yexp(:,2),'*');legend('ca-pr','ca-real')
% ------------------------------------------------------------------
function f = ObjFunc7Fmincon(k,x0,yexp)
= ode45(@KineticEqs,tspan,x0,,k);& &
f =&&sum((x-yexp(:,2)).^2) ;
% ------------------------------------------------------------------
function f = ObjFunc7LNL(k,x0,yexp)
= ode45(@KineticEqs,tspan,x0,,k);& &
f1 = x - yexp(:,2);
% ------------------------------------------------------------------
function dxdt = KineticEqs(t,x,k)
dxdt=-(k(1)*k(2)*x^2-0.25*k(3)*k(4)*(9.404-x)^2)/(1+k(2)*x+0.5*k(4)*(9.404-x));
改了初值了,我用别的软件计算出来的结果,用matlab计算出来的图不是一条斜线就是一条直线,感觉程序有问题。但是问题不知道出在哪里?
:hand:谢谢啊!请问这是改好的吗?我可以直接用吗?
改好,但是初值的选取不当,拟合结果不是很好。你可以试试
还有就是我按照你写的运行了,运行不了了。
出现下面的错误
Error: File: parafit.m Line: 72 Column: 1
Function definitions are not permitted in this context.
恩恩,但是我把你的程序直接复制过来,怎么运行不了呢?
出现下面的问题。
Error: File: parafit.m Line: 72 Column: 1
Function definitions are not permitted in this context.
:(&&不能再命令窗口运行,存为。m文件在运行
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研}

我要回帖

更多关于 matlab下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信