我正在尝试使用多维数组([2][2])进行简单的矩阵乘法.我对此有点新意见,而我却无法找到它我做错了什么.我非常感谢能告诉我它是什么的任何帮助.我宁愿不使用库或类似的东西,我主要是这样做以了解它是如何工作的.非常感谢你提前.
我在主方法中声明我的arays如下:
Double[][] A={{4.00,3.00},{2.00,1.00}};
Double[][] B={{-0.500,1.500},{1.000,-2.0000}};
Run Code Online (Sandbox Code Playgroud)
A*B应该返回单位矩阵.它没有.
public static Double[][] multiplicar(Double[][] A, Double[][] B){
//the method runs and returns a matrix of the correct dimensions
//(I actually changed the .length function to a specific value to eliminate
//it as a possible issue), but not the correct values
Double[][] C= new Double[2][2];
int i,j;
////I fill the matrix with zeroes, if I don't do this it gives me an error
for(i=0;i<2;i++) {
for(j=0;j<2;j++){
C[i][j]=0.00000;
}
}
///this is where …Run Code Online (Sandbox Code Playgroud) java arrays matrix multidimensional-array matrix-multiplication
存在MATLAB代码以找到所谓的"最小体积包围椭圆体"(例如,这里,也在这里).为方便起见,我会粘贴相关部分:
function [A , c] = MinVolEllipse(P, tolerance)
[d N] = size(P);
Q = zeros(d+1,N);
Q(1:d,:) = P(1:d,1:N);
Q(d+1,:) = ones(1,N);
count = 1;
err = 1;
u = (1/N) * ones(N,1);
while err > tolerance,
X = Q * diag(u) * Q';
M = diag(Q' * inv(X) * Q);
[maximum j] = max(M);
step_size = (maximum - d -1)/((d+1)*(maximum-1));
new_u = (1 - step_size)*u ;
new_u(j) = new_u(j) + step_size;
count = count + 1; …Run Code Online (Sandbox Code Playgroud) 我有一大堆3D数据点,我想要适合椭圆体.
我的数学很差,所以我在没有任何数学库的情况下无法实现最小二乘法.
有没有人知道或者有一段代码可以将椭球放到数据中,我可以直接插入到我的项目中?在C中最好,但是从C++,Java,C#,python等转换对我来说应该没问题.
编辑:能够找到该中心也将是一个巨大的帮助.请注意,这些点的间距不均匀,因此取平均值不会产生中心.
背景:我正在尝试将地形图剪辑为围绕多个风力涡轮机的最小尺寸椭圆,以最小化地图的大小.执行此贴图剪裁的程序可以剪切为椭圆,但只有椭圆,其轴沿x轴和y轴对齐.
但是,我如何约束这个算法(或制作一个不同的算法),使得得到的椭圆需要使其长轴水平或垂直定向,无论哪个给出最小的椭圆 - 从不以一个角度?

当然,这种约束使得得到的椭圆大于"需要"包围所有点,但这仍然是约束.
给定一组2d点(笛卡尔形式),我需要找到最小面积椭圆,使得集合中的每个点都位于椭圆上或内部.
我在这个网站上找到了伪代码形式的解决方案,但是我在C++中实现解决方案的尝试却没有成功.
下图以图形方式说明了我的问题的解决方案是什么样的:
在我的尝试中,我使用了特征库来进行矩阵上的各种操作.
//The tolerance for error in fitting the ellipse
double tolerance = 0.2;
int n = 10; // number of points
int d = 2; // dimension
MatrixXd p = MatrixXd::Random(d,n); //Fill matrix with random points
MatrixXd q = p;
q.conservativeResize(p.rows() + 1, p.cols());
for(size_t i = 0; i < q.cols(); i++)
{
q(q.rows() - 1, i) = 1;
}
int count = 1;
double err = 1;
const double init_u …Run Code Online (Sandbox Code Playgroud)