以下是X和Y值:
X Y
20 10
100 25
140 50
如果我可以将这些数据大致表示为公式并插入从20到140的任意X值,那将是很好的。数据似乎有点像曲棍球棒曲线。还是更具指数性?我可以编码这个只是在这三个点之间创建线性段,但如果一个公式可以给我更多的平滑结果会更好。上面的数字不是固定的。它们可以变化一点。只要公式让我进入了球场。
答案 0 :(得分:1)
三个点唯一地定义形式为
的二阶多项式曲线y = Ax 2 + Bx + C
众所周知的公式可以从点坐标推导出A,B,C。
答案 1 :(得分:1)
你可以使用多项式或指数的方程近似那种形状,你选择的那种取决于你究竟想要做什么。
如果你只需要一条接近某种形状的平滑曲线,那么选择一个公式并调整系数,直到它看起来如你所愿。
Excel中数据的多项式拟合得出:
Y = 0.0036*(X^2) - 0.25*X + 13.542
答案 2 :(得分:0)
实现此目的的一种方法是实现一些类似于Excel提供的GROWTH功能。假设指数增长,它将从您给出的new_y
值中插入new_x
值。这是JavaScript中的一段代码。将它翻译成Java应该非常简单。
请注意,我从其他人那里借了大部分资金(代码中的信用额)。
function GROWTH(known_y, known_x, new_x, use_const) {
// Credits: Ilmari Karonen
// Default values for optional parameters:
if (typeof(known_x) == 'undefined') {
known_x = [];
for (var i = 1; i <= known_y.length; i++) known_x.push(i);
}
if (typeof(new_x) == 'undefined') {
new_x = [];
for (var i = 1; i <= known_y.length; i++) new_x.push(i);
}
if (typeof(use_const) == 'undefined') use_const = true;
// Calculate sums over the data:
var n = known_y.length;
var avg_x = 0;
var avg_y = 0;
var avg_xy = 0;
var avg_xx = 0;
for (var i = 0; i < n; i++) {
var x = known_x[i];
var y = Math.log(known_y[i]);
avg_x += x;
avg_y += y;
avg_xy += x*y;
avg_xx += x*x;
}
avg_x /= n;
avg_y /= n;
avg_xy /= n;
avg_xx /= n;
// Compute linear regression coefficients:
if (use_const) {
var beta = (avg_xy - avg_x*avg_y) / (avg_xx - avg_x*avg_x);
var alpha = avg_y - beta*avg_x;
} else {
var beta = avg_xy / avg_xx;
var alpha = 0;
}
// Compute and return result array:
var new_y = [];
for (var i = 0; i < new_x.length; i++) {
new_y.push(Math.exp(alpha + beta * new_x[i]));
}
return new_y;
}
答案 3 :(得分:0)
您可以使用某种形式的regression analyzis统计地将曲线拟合到一组点。但是,曲线的有效性取决于您拥有的点数;三点不能让你对你的公式是正确的充满信心。
答案 4 :(得分:-1)
你可以从这样的关系开始:
y = A*exp(B*x)
采取双方的自然记录:
ln(y) = ln(A) + B*x
根据需要替换多个点并求解两个系数。这是一个简单的线性回归问题。
以下是我的数据:
y = exp(2.006369+0.013132*x)
以下是生成值的表格:
X Y
0 7.436267437
20 9.669855877
40 12.5743343
60 16.35121402
80 21.26253316
100 27.6490367
120 35.95381719
140 46.75305634
160 60.7960002
180 79.0569415
200 102.8028156
220 133.6811
240 173.8341152
260 226.0476583
即使您有大量数据,也可以使用。
如果你对指数函数进行泰勒级数展开,你会发现它是一系列无数多项式项。二次和三次提议是截断到指数的近似值。