【问题标题】:I want to extract values from an array and use them in a string expression我想从数组中提取值并在字符串表达式中使用它们
【发布时间】:2014-01-21 22:10:10
【问题描述】:

我正在尝试做一个非线性拟合的 for 循环,其中一个系数会随着每次迭代而改变值。这些值位于一个名为 YoungMod 的数组中。我有:

for k=1:size(DataAll,3)
    ft = fittype('E1*(YoungMod(k))-b*t','coefficients',{'E1','b'},'independent', 't','dependent','depth','options',fo);
    [FittedData{k},gof{k}] = fit(DataAll(:,3,k),DataAll(:,1,k),ft1); %{k});
    coeffs{k}=coeffvalues(FittedData{k});
end

我收到的错误信息是:

    Error using fittype>iTestCustomModelEvaluation (line 726)
    Expression
    E1*(YoungMod(k))-b*t
    is not a valid MATLAB expression, has non-scalar coefficients, or cannot be evaluated:
    Error in fittype expression ==>
   (E1*YoungMod(k))-b*t
    ??? Undefined function 'YoungMod' for input arguments of type 'double'.

对我来说,问题似乎在于字符串正在读取 YoungMod*(k) 而不是获取 YoungMod 数组的 k 值。非常感谢您的帮助!

【问题讨论】:

    标签: arrays matlab for-loop


    【解决方案1】:

    我设法使用虚拟变量和 fittype 的“问题”选项解决了这个问题:

    for k=1:size(DataAll,3)
        ym = YoungMod(k)
        ft = fittype('E1*(ym)-b*t','coefficients',{'E1','b'},'independent', 't','dependent','depth','options',fo,'problem','ym');
        [FittedData{k},gof{k}] = fit(DataAll(:,3,k),DataAll(:,1,k),ft,'problem',ym);
        coeffs{k}=coeffvalues(FittedData{k});
    end
    

    【讨论】:

      【解决方案2】:

      试试这个,以确保 k 被评估为变量而不是字符串:

      ft = fittype(['E1*(YoungMod(' num2str(k) '))-b*t'],'coefficients',{'E1','b'},'independent', 't','dependent','depth','options',fo);
      

      【讨论】:

      • 感谢您的输入,但仍然没有这样做。
      猜你喜欢
      • 2020-11-14
      • 2020-06-15
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多