I have a Matrix , and I want to multiply this Matrix with something so I can get zeros

조회 수: 17 (최근 30일)
% for an example *(pinv(P1))*P1=unity Matrix
I want the same thing : ?*P1=zeros
%This ? should be related to P1 like the above example when we took the peasudo inverse to get the unity matrix
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%This is the problem
clc;
clear;
H=[1 2 1;2 3 1;4 2 3;3 2 1];
P1=[3 2 4;2 1 1;5 2 3;2 3 7]
P2=[2 6 1;1 3 5;4 2 1;5 2 1];
HT=H+P1+P2
from this equation I want to get
HT=H+P2
I want to null P1

채택된 답변

Walter Roberson
Walter Roberson 2021년 9월 16일
null(P1)
Note: this may have different number of columns depending on the values in P1. Each column of the result will be independent
  댓글 수: 3
Matthew Worker
Matthew Worker 2021년 9월 16일
clc;
clear;
H=[1 2 1;2 3 1;4 2 3;3 2 1];
P1=[3 2 4;2 1 1;5 2 3;2 3 7]
P2=[2 6 1;1 3 5;4 2 1;5 2 1];
HT=H+P1+P2
from this equation I want to get
HT=H+P2
I want to null P1
Walter Roberson
Walter Roberson 2021년 9월 16일
format long g
H=[1 2 1;2 3 1;4 2 3;3 2 1];
P1=[3 2 4;2 1 1;5 2 3;2 3 7]
P1 = 4×3
3 2 4 2 1 1 5 2 3 2 3 7
P2=[2 6 1;1 3 5;4 2 1;5 2 1];
nP1 = null(P1.').'
nP1 = 1×4
-0.843274042711568 -0.105409255338946 0.421637021355784 0.316227766016838
nP1 * P1
ans = 1×3
-4.44089209850063e-16 0 4.44089209850063e-16
HT = H + nP1 * P1 + P2
HT = 4×3
3 8 2 3 6 6 8 4 4 8 4 2
HT2 = H + P2
HT2 = 4×3
3 8 2 3 6 6 8 4 4 8 4 2
HT - HT2
ans = 4×3
-4.44089209850063e-16 0 4.44089209850063e-16 -4.44089209850063e-16 0 0 0 0 0 0 0 4.44089209850063e-16

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

John D'Errico
John D'Errico 2021년 9월 16일
편집: John D'Errico 2021년 9월 16일
Please stop posting answers when you are making only comments.
In what you claim to have tried:
A=[-3 6 -1 1 7;1 -2 2 3 -1;2 -4 5 8 -4]
A = 3×5
-3 6 -1 1 7 1 -2 2 3 -1 2 -4 5 8 -4
the matrix A has rank 3.
rank(A)
ans = 3
So there is NO matrix you can multiply A with on the left except for the all zero matrix, and get a result of all zeros. That is, there does not exist a non-zero matrix X, such that the product X*A will be entirely zero. This is provable using basic linear algebra.
We can find a non-zero matrix Y such that A*Y will be all zeros. But that was not the question you seem to have posed. Thus...
Y = null(A);
norm(A*Y)
ans = 3.2420e-15
So effectively zero to with floating point precision. If you want an exact solution, since A is composed of integers, we can find one easily enough. Thus...
Ysym = null(sym(A))
Ysym = 
A*Ysym
ans = 
  댓글 수: 4
Souarv De
Souarv De 2022년 6월 9일
@John D'Errico Here the answer would come with class sym. How to convert it back in to double?
Walter Roberson
Walter Roberson 2022년 6월 9일
A = [-3 6 -1 1 7;1 -2 2 3 -1;2 -4 5 8 -4]
A = 3×5
-3 6 -1 1 7 1 -2 2 3 -1 2 -4 5 8 -4
Ysym = null(sym(A))
Ysym = 
A*Ysym
ans = 
double(ans)
ans = 3×2
0 0 0 0 0 0

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by