2015-10-16 32 views
-1

我的目標是讓代碼標記爲真,如果我給它一個不是方形的矩陣,並且如果它是一個正方形,則標記爲false。如果det(A)不是正方形,如何標記true? MATLAB

當我給它一個非方形矩陣時,我的代碼正常工作。然而,當我給它一個方形矩陣時,它會給我一個錯誤?

我該如何修復我的代碼?

function [flag] = checkSing(A) 

if det(A) == 0%if matrix is a square 
    flag = 1; 
elseif det(A) ~=0 
    flag = 0; 
end 

end 

這是我收到的錯誤消息。

EDU>> A = [1 2; 3 4; 5 6]; 
EDU>> B = checkSing(A) 
Error using det 
Matrix must be square. 

Error in checkSing (line 12) 
if det(A) == 0%if matrix is a square 

回答

1

你應該檢查A的尺寸以確保它是方形的。只要檢查輸出det(A)給你什麼不檢查矩陣是否是方形的。你正在檢查行列式的輸出是什麼......而不是矩陣是正方形的。事實上,功能要求矩陣是平方的,這就是爲什麼你得到這個錯誤....你的錯誤檢查不起作用。

因此,如果你想檢查矩陣不是方形,只需檢查,看看是否行數不等於列數:

function [flag] = checkSing(A) 
    flag = size(A,1) ~= size(A,2); 
end 

這將返回一個標誌,在如果行數不等於列數,則爲true。


小注

我不認爲你是正確的描述您的問題....你的函數的名字叫做checkSing ...這我假設你的意思是要檢查如果矩陣是單數的。如果是這種情況,那麼檢查行列式是否爲零就是矩陣的單數定義。那是你真正想要的嗎?如果是這樣,那麼你需要修改這個代碼,以便它檢查矩陣是否也是方形的。

像這樣將工作:

function [flag] = checkSing(A) 
    if size(A,1) == size(A,2) %// If matrix is square... 
     flag = det(A) == 0; %// Flag is returned that checks if matrix is singular 
    else 
     flag = 1; %// Matrix isn't square, so return true anyway 
    end 
end 
相關問題