多元曲线拟合实验数据

时间:2019-06-27 15:42:08

标签: octave data-analysis

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

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

位置:

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

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

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

我还考虑过简单的函数,取xy的最小值和最大值,创建分别包含100个元素的值的矩阵,然后计算第一个组合和标准差的函数。之后,反复从组合转到组合并比较标准偏差。选择偏差最小的组合作为解决方案。

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

您能协助我编写查找xy的代码吗?

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

谢谢

2 个答案:

答案 0 :(得分:0)

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

Entity _user = context.CreateQuery("systemuser").Where(e => e.GetAttributeValue<string>("fullname").Equals(fullname)).FirstOrDefault();

if (_user != null)
{
    _target["modifiedby"] = _user.ToEntityReference();
}

//assign new target to plugin executioncontext
pluginExecutionContext.InputParameters["Target"] = _target;

原因是,如果采用期望函数的对数,则会得到:

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

减少为:

log(f)= x log(B)+ y log(C)

这与log(B)呈线性关系,因此,如果找到斜率,则将得到x,并且y截距将为y * log(C)。

答案 1 :(得分:0)

最适合我的解决方案是使用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);

感谢大家的关注和帮助。