【问题标题】:Multivariate curve fit to experimental data多元曲线拟合实验数据
【发布时间】:2019-06-28 18:39:17
【问题描述】:

最近我遇到了工作困难的新挑战 大约。 我有许多描述塑料成型过程中材料行为的曲线 并希望将数据放入优雅的幂律方程中。 该材料对应变率敏感,所以我的曲线很少 对于各种应变率。 这些曲线是应力-应变曲线的形式。 用数学语言:

f(B,C,x,y)=B^x*C^y

地点:

B = Strain,
C = Strain rate,
x = Strain coefficient,
y = Strain rate coefficient.

对于C 的各种值,我有许多曲线描述f(B)

到目前为止我所尝试的一切都是关于线性函数或单 自变量。

我还考虑过简单的函数,取可能的最小值和最大值xy,创建每个包含 100 个元素的值矩阵,然后计算第一个组合和标准差的函数。之后,迭代地从组合到组合并比较标准差。选择偏差最小的组合作为解。

另一种可能是使用fminuncfminsearch,但我不知道如何将各种曲线作为起点。

你能帮我写代码找到xy吗?

如果需要,我可以提供曲线。我所有的数字都是自然的。

谢谢

【问题讨论】:

    标签: octave data-analysis


    【解决方案1】:

    对于给定的 C,从技术上讲,您可以从单个 f(B) 导出 x 和 y。

    [x ylogC]=polyfit(log(B),log(f),1);
    y=ylogC/log(C);
    

    原因是,如果你对你得到的预期函数取对数:

    log(f)=log(B^x * C^y)

    归结为:

    log(f)=xlog(B) + ylog(C)

    这对于 log(B) 是线性的,所以如果你找到斜率,你会得到 x,y 截距将为 y*log(C)。

    【讨论】:

    • 感谢这个。不幸的是,这个解决方案只适用于这个特定的模型。如果我想修改模型,我需要更通用的拟合解决方案。下面我列出了向我指示的确切内容。
    【解决方案2】:

    最适合我的解决方案是使用nlinfit。算法示例:

    betaWithoutNoise = [80;0.3;0.1]; # True values of our parameters
    x=[0:0.1:1];
    x21(1:11)=0.01;
    x22(1:11)=0.1;
    xmatrix=[[x;x21],[x;x22]];
    realValues=betaWithoutNoise(1)*(xmatrix(1,:).^betaWithoutNoise(2)).*(xmatrix(2,:).^betaWithoutNoise(3))
    
    #adding noise to the function values
    noise=rand(size(realValues))-0.5;
    noisyValues=realValues+noise;
    
    #application of function model
    modelfun=@(b,xmatrix) (b(1)*(xmatrix(1,:).^(b(2))).*(xmatrix(2,:).^b(3)));
    beta0=[70,0.1,0.3];
    [beta,R,J,covb,mse]=nlinfit(xmatrix,noisyValues,modelfun,beta0);
    

    感谢大家的关注和帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2016-03-09
      • 2010-10-09
      • 1970-01-01
      相关资源
      最近更新 更多