我正在做一些非常基本的線性代數,我可能完全在這裏忽略了這一點。C++ - 矩陣減法
比方說,我有以下矩陣:
v1 = [5, 8]
v2 = [3, 4]
v3 = [4, 4]
v4 = [2, 1]
預期輸出:
M1 = [5 - 3, 8 - 4] = [2, 4]
M2 = [4 - 2, 4 - 1] = [2, 3]
實際輸出:
0 0
0 0
2 4
-1 0
2 3
下面是代碼:
std::vector<double> calculate(std::vector<double> values, std::vector<double> values2)
{
std::vector<double> vel(2, 0);
for(unsigned i=0; (i < values.size()); i++)
{
vel[i] = values[i] - values2[i];
}
return vel;
}
std::vector<std::vector<double> > values = { {5,8}, {3, 4}, {4, 4}, {2, 1}};
std::vector<std::vector<double> > v;
v.resize(2);
for(unsigned i=0; (i < values.size()-1); i++)
{
v[i].resize(2);
v.push_back(calculate(values[i], values[i + 1]));
//v[i] = calculate(values[i], values[i + 1]);
}
for(unsigned i=0; (i < v.size()); i++)
{
for(unsigned j=0; (j < v[i].size()); j++)
{
std::cout << v[i][j] << " ";
}
std::cout << std::endl;
}
問題在於,以下應該重複4次,計算4個矩陣,最終的結果2D矢量應該只包含2個值。
我可能錯過了一些愚蠢的東西。
附加後,我覺得邏輯就變得如果您爲每個矩陣分別考慮兩個矢量,則更容易。對這兩個矩陣採用單個向量使代碼有點不可讀。 – Mahesh
您應該真的使用像[armadillo](http://arma.sourceforge.net/)這樣的C++線性代數庫。儘管命名,「std :: vector」對於線性代數來說有一個糟糕的界面。你遇到的具體問題就是你正在弄亂元素的大小和位置。 –
或者只是標準的valarray,你試圖實現的任務很容易用valarray實現,比如:v1-v2。結束 – 4pie0