在 Matlab 中通过曲线拟合找到收敛速度

计算科学 matlab 有限元 收敛 回归
2021-12-09 18:04:50

我有一些数据:节点数和与之对应的能量范数误差。N

我在一些参考资料中看到收敛速度由

uuhE=CNα

我如何通过 MATLAB 找到Cα,我尝试过:

polyfit (N,uuhE,1)

但答案并不正确。

我怎样才能找到他们。

2个回答

首先,收敛速度通常以 而不是相等。此外,利率是渐近的,即,只需要保持这意味着您不太可能找到使您的方程式成立

uuhCNα,
NCα

您的方法不起作用的另一个原因是您要拟合的不是多项式,因为是 a) 未知的并且 b) 不是整数(一方面,它必须是负数,因为错误下降了随着的上升)。αN

人们通常做的是看一个双对数图:如果你对你的方程(或我的不等式)取对数,你会得到 中 的线性多项式系数(从中可以找到)。

log(uuh)log(CNα)=log(C)+αlog(N).
ax+blog(N)a=αb=log(C)C=exp(b)

所以如果你申请polyfit\,你应该得到一个数组log(N)log(uuh)[a,b]α=aC=exp(b)

我认为您应该寻找 形式的收敛速度, 其中是特征网格大小。在您的情况下,粗略估计将是 在二维。

uuhEChα
h
h=1N

您需要在递减的情况下评估几个网格上的离散化误差,然后使用多项式拟合作为 其中是特征长度的对数向量并且是相应误差范数的对数向量。h[alpha, C] = polyfit(lc, error, 1)lclc = [log(h1), log(h2), log(h3), ..., log(hn)]error