5 svar
108 visningar
Moni1 721
Postad: 14 mar 2021 18:31

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
Ygolopot 215
Postad: 15 mar 2021 08:31

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
Moni1 721
Postad: 15 mar 2021 10:21

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.

Moni1 721
Postad: 15 mar 2021 10:27

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.

Ygolopot 215
Postad: 15 mar 2021 10:49

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.

Moni1 721
Postad: 15 mar 2021 11:11

hej, igen, och tack så mycket, det var till stor hjälp

Svara
Close