logiskt funktion
hej, i denna uppgift ska vi skriva logiskt function som returnerar true om matrisen är kvadratiskt och undertriängular. , men jag vet inte hur exakt ska jag formulera villkoren som är kvadratiskt och undertriängular.
unction triu = tri(M)
triu = true;
[m,n]=size(M)
if size(M)= ~triu(M,0)
return;
elseif m=~n
return;
end
triu=false
end
Hej, jag fattar inte riktigt ditt test på fjärde raden. Som jag förstår det är triu en inbyggd funktion som extraherar diagonalen, den kommer ju aldrig vara samma som size som ger en vektor med två element, antal rader och antal kolumner. Vid ditt elseif statement så tänker jag att du borde sätta triu = false innan du kör return.
Jag är ny på programmering så kan inte svära på att min kod nedan är 100% funkis men den har klarat de manuella tester jag kört.
Löste det såhär:
function t = quaTri(matrix)
[m, n] = size(matrix);
if m ~= n
t = false;
return;
end
for i = 1:m
for j = 1:n
if j > i && matrix(i,j) ~= 0
t = false;
return;
end
end
end
t = true;
end
hej, och tack så mycket, så raden
if j>i && matrix(i,j) ~=0
säger att om matrisen inte är undertriängular så är t=false.
alltså som jag förstå så säger raden att om elementen ovanför diagonalen inte är lik noll, så är matrisen inte under triangulär.
men betyder inte undertriängular att elementen under diagonalen ska vara lik noll.
Np! Jo så kanske det är men då är det bara att ta j < i istället beroende på om du vill ha över eller undertriangulär. Poängen är att alla element på ena sidan diagonalen ska vara noll. Så fort vi läser av att ett element inte är noll på den sida av diagonalen där vi vill att alla ska vara noll så blir t = false och vi "avbryter" programmet med return. I och med att vi är i en for loop hade vi säkert kunna använda break istället.
Jag vill dock återigen betona att jag är relativt ny på programmering så jag tar inte gift på att allt jag sagt so far är 100% rätt men programmet funkade för mig i alla fall.
hej, igen, och tack så mycket, det var till stor hjälp