- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我目前正在编写一个 C++ 程序,其中我有独立和依赖数据的 vector ,我希望这些 vector 适合三次函数。但是,我无法生成适合我的数据的多项式。
部分问题是我不能使用各种数值包,例如 GSL(长篇大论);对于我的情况,这甚至可能是矫枉过正。对于最小二乘拟合,我不需要一个非常通用的解决方案。我特别想将我的数据拟合为三次函数。我确实可以访问 Sony 的 vector 库,它支持 4x4 矩阵并可以计算它们的逆矩阵等。
在 Scilab 中进行原型(prototype)设计时,我使用了如下函数:
function p = polyfit(x, y, n)
m = length(x);
aa = zeros(m, n+1)
aa(:,1) = ones(m,1)
for k = 2:n+1
aa(:,k) = x.^(k-1)
end
p = aa\y
endfunction
不幸的是,这并不能很好地映射到我当前的环境。上面的例子需要支持一个 M x N+1 维的矩阵。就我而言,这是 M x 4,其中 M 取决于我拥有多少样本数据。还有左 split 的问题。我需要一个支持任意维度矩阵求逆的矩阵库。
是否有一种最小二乘算法可以避免计算 aa\y,或者至少将其限制为 4x4 矩阵?我想我正在尝试将上述算法重写为一个更简单的情况,该情况适用于拟合三次多项式。我不是在寻找代码解决方案,但如果有人能指出我正确的方向,我将不胜感激。
最佳答案
Here是我正在使用的页面,尽管该页面本身并没有直接解决您的问题。我的回答总结如下:
If you can't work with Nx4 matrices directly, then do those matrixcomputations "manually" until you have the problem down to something that has only 4x4 or smaller matrices. In this answer I'll outline how to do the specific matrix computations you need "manually."
--
假设您有一堆数据点 (x1,y1)...(xn,yn)
并且您正在寻找三次方程 y = ax^3 + bx ^2 + cx + d
最适合这些点。
然后按照上面的链接,你会写出这个等式:
我将为这些矩阵编写 A
、x
和 B
。然后按照我上面的链接,您想乘以 A
的转置,这将为您提供 4x4
矩阵 A
T*A
可以反转。在方程式中,以下是计划:
A * x = B .................... [what we started with]
(AT * A) * x = AT * B ..... [multiply by AT]
x = (AT * A)-1 * AT * B ... [multiply by the inverse of AT * A]
您说您对反转 4x4
矩阵感到满意,因此如果我们可以编写一种无需实际使用矩阵对象的方式来获取这些矩阵的方法,那么我们应该没问题。
所以,这里有一个方法,虽然它可能有点像根据自己的口味制作自己的矩阵库。 :)
为 4x4 矩阵的 16 个条目中的每一个写一个显式方程。第 (i,j)
项(我从 (0,0) 开始)由下式给出x1i * x1j + x2i * x2j + ... + xNi * xNj.
使用您的矩阵库反转该 4x4 矩阵。即 (A
T * A
)-1.
现在我们只需要 A
T * B
,这是一个 4x1 矩阵。它的第 i 个条目由 x1i * y1 + x2i * y2 + ... + xNi * yN.
将我们手工创建的 4x4 矩阵 (A
T * A
)-1 乘以我们手工创建的 4x1 矩阵 A
T * B
以获得立方最小二乘系数的 4x1 矩阵。
祝你好运!
关于c++ - 将数据拟合到 3 次多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902067/
gnuplot 中拟合函数的正确方法是什么 f(x)有下一个表格吗? f(x) = A*exp(x - B*f(x)) 我尝试使用以下方法将其拟合为任何其他函数: fit f(x) "data.txt
(1)首先要建立数据集 ? 1
测量显示一个信号,其形式类似于具有偏移量和因子的平方根函数。如何找到系数并在一个图中绘制原始数据和拟合曲线? require(ggplot2) require(nlmrt) # may be thi
我想将以下函数拟合到我的数据中: f(x) = Offset+Amplitudesin(FrequencyT+Phase), 或根据 Wikipedia : f(x) = C+alphasin(ome
我正在尝试使用与此工具相同的方法在 C# 中拟合 Akima 样条曲线:https://www.mycurvefit.com/share/4ab90a5f-af5e-435e-9ce4-652c95c
问题:开放层适合 map ,只有在添加特征之后(视觉),我该如何避免这种情况? 我在做这个 第 1 步 - 创建特征 var feature = new ol.Feature({...}); 第 2
我有一个数据变量,其中包含以下内容: [Object { score="2.8", word="Blue"}, Object { score="2.8", word="Red"}, Objec
我正在尝试用中等大小的 numpy float 组来填充森林 In [3]: data.shape Out[3]: (401125, 5) [...] forest = forest.fit(data
我想用洛伦兹函数拟合一些数据,但我发现当我使用不同数量级的参数时拟合会出现问题。 这是我的洛伦兹函数: function [ value ] = lorentz( x,x0,gamma,amp )
我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。 为此,我使用 polyfit 来拟合 6 阶多项式,由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。 但
我一直在寻找一种方法来使数据符合 beta 二项分布并估计 alpha 和 beta,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy
我将 scipy.optimize.minimize ( https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html ) 函数与
在过去的几天里,我一直在尝试使用 python 绘制圆形数据,方法是构建一个范围从 0 到 2pi 的圆形直方图并拟合 Von Mises 分布。我真正想要实现的是: 具有拟合 Von-Mises 分
我有一个简单的循环,它在每次迭代中都会创建一个 LSTM(具有相同的参数)并将其拟合到相同的数据。问题是迭代过程中需要越来越多的时间。 batch_size = 10 optimizer = opti
我有一个 Python 系列,我想为其直方图拟合密度。问题:是否有一种巧妙的方法可以使用 np.histogram() 中的值来实现此结果? (请参阅下面的更新) 我目前的问题是,我执行的 kde 拟
我有一个简单的 keras 模型(正常套索线性模型),其中输入被移动到单个“神经元”Dense(1, kernel_regularizer=l1(fdr))(input_layer) 但是权重从这个模
我正在尝试解决 Boston Dataset 上的回归问题在random forest regressor的帮助下.我用的是GridSearchCV用于选择最佳超参数。 问题一 我是否应该将 Grid
使用以下函数,可以在输入点 P 上拟合三次样条: def plotCurve(P): pts = np.vstack([P, P[0]]) x, y = pts.T i = np.aran
我有 python 代码可以生成数字 x、y 和 z 的三元组列表。我想使用 scipy curve_fit 来拟合 z= f(x,y)。这是一些无效的代码 A = [(19,20,24), (10,
我正在尝试从 this answer 中复制代码,但是我在这样做时遇到了问题。我正在使用包 VGAM 中的gumbel 发行版和 fitdistrplus . 做的时候出现问题: fit = fi
我是一名优秀的程序员,十分优秀!