对于线性代数中的家庭作业,我使用MATLAB的\运算符(这是推荐的方法)解决了以下等式:
A = [0.2 0.25; 0.4 0.5; 0.4 0.25]; y = [0.9 1.7 1.2]'; x = A \ y
产生以下答案:
x = 1.7000 2.0800
对于赋值的下一部分,我应该使用最小二乘近似来求解相同的等式(然后将其与先前值进行比较以查看近似的精确度).
如何在MATLAB中找到这样做的方法?
以前的工作:我找到了函数lsqlin,它似乎能够解决上述类型的方程,但我不明白哪个参数提供它,也不知道它的顺序.
有没有人在使用非常大或非常小的数字时遇到过fmin_slsqp(或scipy.optimize中的任何其他内容)的问题?
我正在研究一些python代码来拍摄灰度图像和蒙版,生成直方图,然后将多个高斯拟合到直方图.为了开发代码,我使用了一个小样本图像,经过一些工作后,代码运行得非常出色.但是,当我首先对直方图进行标准化,生成bin值<< 1时,或者当我对巨大的图像进行直方图编码时,生成数十万的bin值,fmin_slsqp()会偶尔失败.它仅在约5次迭代后退出,通常只返回我给它的初始猜测的略微修改版本,并返回退出模式8,这意味着"linesearch的正方向导数".如果我在开始时检查bin计数的大小并将它们缩放到~100-1000附近,fmin_slsqp()将照常工作.我只是在返回结果之前取消缩放.我想我可以这样离开,但感觉就像一个黑客.
我环顾四周,发现人们在谈论epsilon值,这基本上是用于近似衍生物的dx,但调整没有帮助.除此之外我还没有找到任何有用的东西.任何想法将不胜感激.提前致谢.
詹姆士
为了组合同一变量的3个不同的估计器,我需要在Java中实现多元回归方法(因此3个独立变量和1个因变量).我正在寻找一种简单的方法(就像多元回归方法一样简单).从我所做的搜索来看,我认为最小二乘法应该是一种适当的方法,但我想知道你是否建议任何其他方法.我也没能找到关于在多变量上下文最小二乘法的执行任何好的文档,所以我将不胜感激,如果你可以指向我,我可以使用任何良好的信息/来源.
我正在寻找用于非线性最小二乘拟合的Levenberg-Marquardt算法的C#实现.
我使用最小二乘法将平面拟合到3D点集.我已经有了算法来做到这一点,但我想修改它以使用加权最小二乘法.意思是每个点都有一个重量(重量越大,平面越接近该点).
当前算法(无重量)如下所示:
计算总和:
for(Point3D p3d : pointCloud) {
pos = p3d.getPosition();
fSumX += pos[0];
fSumY += pos[1];
fSumZ += pos[2];
fSumXX += pos[0]*pos[0];
fSumXY += pos[0]*pos[1];
fSumXZ += pos[0]*pos[2];
fSumYY += pos[1]*pos[1];
fSumYZ += pos[1]*pos[2];
}
Run Code Online (Sandbox Code Playgroud)
而不是制作矩阵:
double[][] A = {
{fSumXX, fSumXY, fSumX},
{fSumXY, fSumYY, fSumY},
{fSumX, fSumY, pointCloud.size()}
};
double[][] B = {
{fSumXZ},
{fSumYZ},
{fSumZ}
};
Run Code Online (Sandbox Code Playgroud)
比解Ax = B,解的3个分量是拟合平面的系数...
那么,你能帮助我如何修改它来使用权重吗?谢谢!
我正在尝试创建一个函数,它将根据传入的lambda函数进行最小二乘拟合.我想创建一个长度为零的数组,该数组的长度等于lambda函数对lambda函数的初始猜测所采用的参数数量.所以如果它的线性我想要[0,0]而对于二次我想要[0,0,0].
#polynomial functions
linear = lambda p, x: p[0] * x + p[1]
quadratic = lambda p, x: p[0] * x**2 + p[1] * x + p[2]
cubic = lambda p, x: p[0] * x**3 + p[1] * x**2 + p[2] * x + p[3]
#polynomial functions forced through 0
linear_zero = lambda p, x: p[0] * x
quadratic_zero = lambda p, x: p[0] * x**2 + p[1] * x
cubic_zero = lambda p, x: p[0] * x**3 + p[1] …Run Code Online (Sandbox Code Playgroud) 我试图找到一个java代码来计算Ax = b方程中的最小二乘解(x).假设
A = [1 0 0;1 0 0];
b = [1; 2];
x = A\b
Run Code Online (Sandbox Code Playgroud)
返回
x =
1.5000
0
0
Run Code Online (Sandbox Code Playgroud)
我找到了Class LeastSquares,
public LeastSquares(double[] a, double[] b, int degree)
Run Code Online (Sandbox Code Playgroud)
但是在输入中,A和B都是一维数组,但是,在上面的例子中,A是矩阵,B是数组.
在Class NonNegativeLeastSquares中
public NonNegativeLeastSquares(int M, int N, double a[][],double b[])
Run Code Online (Sandbox Code Playgroud)
A是一个矩阵,B是一个数组,但是该类的描述表明它找到了线性方程组Ax = b的近似解,使得|| Ax - b || 2被最小化,并且x > = 0.这意味着x必须始终为正.
我需要一个类似于NonNegativeLeastSquares的类,但是没有x> = 0约束.有人可以帮帮我吗?
非常感谢.
我试图理解由Fitzgibbon,Pilu和Fisher(由Halir和Flusser改进)开发的直接最小二乘椭圆拟合算法中的归一化和"非标准化"步骤.
编辑:关于理论的更多细节补充.特征值问题是否源于混淆?
简短理论:
椭圆由隐式二阶多项式(一般圆锥方程)表示:
哪里:
要将此一般圆锥约束为椭圆,系数必须满足二次约束:
这相当于:
其中C是零的矩阵,除了:
设计矩阵D由所有数据点x sub i组成.
圆锥和数据点之间距离的最小化可以用广义特征值问题表示(某些理论已被省略):
表示:
我们现在有了这个系统:
如果我们求解该系统,则对应于单个正特征值的特征向量是正确答案.
代码:
这里的代码片段直接来自作者提供的MATLAB代码:http: //research.microsoft.com/en-us/um/people/awf/ellipse/fitellipse.html
数据输入是一系列(x,y)点.通过减去平均值并除以标准偏差来归一化这些点(在这种情况下,计算为范围的一半).我假设这种规范化允许更好地拟合数据.
% normalize data
% X and Y are the vectors of data points, not normalized
mx = mean(X);
my = mean(Y);
sx = (max(X)-min(X))/2;
sy = (max(Y)-min(Y))/2;
x = (X-mx)/sx;
y = (Y-my)/sy;
% Build design matrix
D = [ x.*x x.*y y.*y x y ones(size(x)) ];
% Build scatter matrix
S = D'*D; %'
% Build …Run Code Online (Sandbox Code Playgroud) L1范数正则化问题定义如下:
minimize || A*x - b ||_2^2 + || x ||_1
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,而不是通常的L1 -norm正则化最小二乘问题,我想解决这种形式的问题:
minimize || A*x - b ||_2^2 + || W*G*x ||_1
Run Code Online (Sandbox Code Playgroud)
由于我的表格W和G不具有相同的尺寸,因为AI不能改变我的变量并解决这样的问题
minimize || A*x/(W*B) - b ||_2^2 + || x ||_1
Run Code Online (Sandbox Code Playgroud)
这样我就可以使用互联网上提供的一个解算器.所以我找到了一个解决上述L1平方问题的方程式,如:
minimize || A*x - b ||_2^2 + || x ||_1
minimize || A*x - b ||_2^2 + e'*u
subject to -u <= x <= u
Run Code Online (Sandbox Code Playgroud)
所以,据我所知,如果我使用-u <= W G x <= ui可以解决问题.但我无法得到我将完全适应代码的东西.有人可以帮忙吗?代码如下(取自CVXOPT)
from cvxopt import matrix, spdiag, mul, div, sqrt, normal, setseed
from cvxopt import …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习QR分解,但无法在不借助传统矩阵计算的情况下弄清楚如何获得beta_hat的方差.我正在练习iris数据集,这是我到目前为止所拥有的:
y<-(iris$Sepal.Length)
x<-(iris$Sepal.Width)
X<-cbind(1,x)
n<-nrow(X)
p<-ncol(X)
qr.X<-qr(X)
b<-(t(qr.Q(qr.X)) %*% y)[1:p]
R<-qr.R(qr.X)
beta<-as.vector(backsolve(R,b))
res<-as.vector(y-X %*% beta)
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
regression r linear-regression least-squares qr-decomposition