Warning: Matrix is singular to working precision.

24 ビュー (過去 30 日間)
Kyle Greenwood
Kyle Greenwood 2020 年 9 月 16 日
コメント済み: Kyle Greenwood 2020 年 9 月 17 日
My full script :
x = -10:0.5:10;
y = x;
[X,Y] = meshgrid(x);
f1 = X.^2 - Y.^2;
f2 = X.*Y.*((X.^2 - Y.^2) / (X.^2 + Y.^2));
subplot(1,2,1), surf(X,Y,f1)
xlabel('x')
ylabel('y')
zlabel('z')
subplot(1,2,2), surf(X,Y,f2)
xlabel('x')
ylabel('y')
zlabel('z')
When I run the script the first plot works fine but the second plots nothing as all entries of f2 are NaN.
I understand that this error occurs when you attempt to take the inverse of a matrix that is singular, however I'm failing to see where the code is trying to take the inverse? Additionally these functions f1, f2 were given to me in an assignment, presumably functions that would not give this result when used correctly. With the requirements of "using a resolution of at least 0.5 between points, from -10 to 10." giving the meshgrid specifications. If someone can see why this doesn't work or a workaround it would be much appreciated!

採用された回答

Arthur Roué
Arthur Roué 2020 年 9 月 16 日
編集済み: Arthur Roué 2020 年 9 月 16 日
The operator to inverse a matrix is inv.
If you want to divide your matrices element wise, you have to add a "." in front of "/"
% Before
f2 = X.*Y.*((X.^2 - Y.^2) / (X.^2 + Y.^2));
% After
f2 = X.*Y.*((X.^2 - Y.^2) ./ (X.^2 + Y.^2));
EDIT : correction thanks to @Stephen Cobeldick's comment
  2 件のコメント
Stephen23
Stephen23 2020 年 9 月 16 日
" The operator to inverse a matrix is backslash..."
The operator to invert a square matrix is inv. Backslash (actually mldivide) solves systems of equations.
"...inv(A)*b is equivalent to A\b."
mldivide and mrdivide are more efficient and accurate at solving systems of equations:
Kyle Greenwood
Kyle Greenwood 2020 年 9 月 17 日
Seems so obvious now, thank you for solving my madness

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeDetection についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by