多元曲线拟合实验数据

Multivariate curve fit to experimental data

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

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 个元素的矩阵,然后计算第一个组合的函数和标准偏差。之后,从组合迭代到组合并比较标准差。 Select偏差最小的组合作为解。

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

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

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

谢谢

从技术上讲,对于给定的 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)。

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

感谢大家的关心和帮助。