【发布时间】:2016-08-16 22:00:49
【问题描述】:
我有一个保存为 'calculateResults.m' 的函数,其中嵌套了函数 'ode45':
function y = calculateResults (concV, ksV, xTrace)
options = odeset('NonNegative', [1:size(concV,2)], 'RelTol', 1e-6, 'AbsTol', 1e-12);
[x,y] = ode45(@(t, cY)odeSet(t, cY, ksV), xTrace, concV, options);
我想将此函数用作 fittype:
ft = fittype('calculateResults( concV, ksV, x )','independent',{'x'});
但是这样做会导致错误:
使用 fittype/testCustomModelEvaluation 时出错(第 12 行) 表达式 calculateResults( concV, ksV, x ) 不是有效的 MATLAB 表达式,具有非标量系数,或者不能 被评估: fittype 表达式中的错误 ==> calculateResults( concV, ksV, x ) ???索引超出矩阵维度。
我的目标是改变 'concV' 的值,以使函数 'calculateResults.m' 适合某些数据(x 和 y):
mdl = fit( x, y, ft);
最后返回最适合数据的 concV 值:
concVCalc = mdl.Coefficients.Estimate;
请帮忙!谢谢!
【问题讨论】:
-
嗯,错误很明显。某处索引超出矩阵维度。您是否已经追踪到发生这种情况的位置?
-
@Adriaan 评估 y = calculateResults(concV, ksV, x);独立工作正常 - 表明我在做一些根本错误的事情。也许我的语法是错误的,但我已经对照 MathWorks 示例进行了检查。
-
我会尝试在表达式中指定所有变量的类型。你需要告诉 fit 如何解释
concV和ksV。看起来concV是一个“系数”,而ksV是一个“问题”变量? -
@Peter 我试过 ft = fittype('calculateResults( concV, ksV, x )','independent',{'x'},'coefficient',{'concV'},'problem' ,{'ksV'});但同样的错误仍然存在。
-
阿德里安是对的。它实际上给了你错误,说索引超出了矩阵维度。将调试器设置为在出错时停止,并检查 calculateResults 中的值。