Warning: Matrix is singular to working precision.
20 ビュー (過去 30 日間)
古いコメントを表示
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!
0 件のコメント
採用された回答
Arthur Roué
2020 年 9 月 16 日
編集済み: Arthur Roué
2020 年 9 月 16 日
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
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:
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!