【问题标题】:MATLAB user defined function file as fittypeMATLAB 用户定义函数文件为 fittype
【发布时间】: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 如何解释 concVksV。看起来concV 是一个“系数”,而ksV 是一个“问题”变量?
  • @Peter 我试过 ft = fittype('calculateResults( concV, ksV, x )','independent',{'x'},'coefficient',{'concV'},'problem' ,{'ksV'});但同样的错误仍然存​​在。
  • 阿德里安是对的。它实际上给了你错误,说索引超出了矩阵维度。将调试器设置为在出错时停止,并检查 calculateResults 中的值。

标签: matlab function file


【解决方案1】:

通过将系数作为单个变量而不是数组来解决:

  ft = fittype('calculateResultsForFit(x,concV1,concV2,concV3,concV4,concV5,concV6,concV7,concV8,concV9,concV10,concV11,concV12,concV13,concV14,concV15,concV16,concV17,concV18,concV19,concV20)');

    mdl = fit( x', yToFit', ft,'StartPoint',[concV1,concV2,concV3,concV4,concV5,concV6,concV7,concV8,concV9,concV10,concV11,concV12,concV13,concV14,concV15,concV16,concV17,concV18,concV19,concV20],'Lower',zeros(1,20));

现在在要拟合的函数内部定义了变量 ksV。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多