[英]MATLAB ERROR IN PINV COMMAND
我正在使用一個代碼來進行三角測量的表面近似,這里將其復制
[totalTris,three] = size(tri);
[totalPoints,two] = size(registeredPts);
% 1. Find the 3 equations for each vertex, and
% place them in c_equations matrix;
% c_equations = [A for vertex 1;
% A for vertex 2; ...
% A for vertex totalPoints]
% c(point,row,:) gives one row from an A matrix
Btotal = zeros(3,totalPoints);
c_equations = zeros(3*totalPoints,3,9);
for pointNum = 1:totalPoints
% B = [pixVal; x gradient; y gradient] at this vertex
z = pixelVals(pointNum);
B = [z; vGradientVecs(pointNum,1); vGradientVecs(pointNum,2)];
% Compile all B matrices into a vector
Btotal(:,pointNum) = B;
% B = Ac
x = registeredPts(pointNum,1);
y = registeredPts(pointNum,2);
A = [1 x y x^2 y^2 x^3 (x^2)*y x*(y^2) y^3; ...
0 1 0 2*x 0 3*(x^2) 2*x*y y^2 0; ...
0 0 1 0 2*y 0 x^2 2*x*y 3*(y^2)];
% Compile all A matrices into a vector
c_equations(pointNum,1,:) = A(1,:);
c_equations(pointNum,2,:) = A(2,:);
c_equations(pointNum,3,:) = A(3,:);
end
% 2. Find the c values for each triangle patch
c = zeros(totalTris,9);
c9 = zeros(9,9);
for triNum = 1:totalTris
p1 = tri(triNum,1);
p2 = tri(triNum,2);
p3 = tri(triNum,3);
B9 = [Btotal(:,p1); Btotal(:,p2); Btotal(:,p3)];
c9 = [c_equations(p1,1,:); c_equations(p1,2,:); c_equations(p1,3,:); ...
c_equations(p2,1,:); c_equations(p2,2,:); c_equations(p2,3,:); ...
c_equations(p3,1,:); c_equations(p3,2,:); c_equations(p3,3,:)];
c(triNum,:) = pinv(c9)*B9; %linsolve(c9,B9);
end
end
這是更大代碼的一部分,當我運行代碼時,它在MATLAB中給出了以下錯誤
Error using svd
Input must be 2-D.
Error in pinv (line 29)
[U,S,V] = svd(A,0);
Error in findBPolyCoefficients (line 50)
c(triNum,:) = pinv(c9)*B9;
根據我的搜索,我有正確的pinv語法,“輸入必須是2D”錯誤超出我的理解,如果任何人可以給我一個方法來解決這個問題
根據您提供的信息,它看起來c9
是一個普通的3-D矩陣,即它的第二維是1。 這些尺寸稱為單體尺寸。 Squeeze
是用於折疊此類尺寸的命令。 你應該這樣做,
c9=squeeze(c9); %before doing pinv
這將使c9
成為2-D矩陣,然后可以計算其SVD。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.