最近我遇到了新的挑战,即我在工作中遇到困难 周围。 我有许多曲线描述了塑性成形过程中的材料行为 并希望将数据放入优雅的幂律方程中。 该材料对应变率敏感,所以曲线很少 对于各种应变率。 曲线是应力-应变曲线的形式。 用数学语言:
f(B,C,x,y)=B^x*C^y
位置:
B = Strain,
C = Strain rate,
x = Strain coefficient,
y = Strain rate coefficient.
我有许多曲线描述了f(B)
的各种值的C
。
到目前为止,我所做的一切都是关于线性函数或单一函数 自变量。
我还考虑过简单的函数,取x
和y
的最小值和最大值,创建分别包含100个元素的值的矩阵,然后计算第一个组合和标准差的函数。之后,反复从组合转到组合并比较标准偏差。选择偏差最小的组合作为解决方案。
另一种可能性是使用fminunc
或fminsearch
,但我不知道如何将各种曲线作为起点。
您能协助我编写查找x
和y
的代码吗?
如果需要,我可以提供曲线。我所有的数字都是自然的。
谢谢
答案 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);
感谢大家的关注和帮助。