Funksjonen under regner ut verdien som tilsvarer et romersiffer. Er den vektorisert? Hvordan kan den eventuelt vektoriseres?

fra_romersiffer.m
function retur = fra_romersiffer(siffer)
    switch siffer
        case 'I', verdi = 1;
        case 'V', verdi = 5;
        case 'X', verdi = 10;
        case 'L', verdi = 50;
        case 'C', verdi = 100;
        case 'D', verdi = 500;
        case 'M', verdi = 1000;
    end
    retur = verdi;
end

Videoforklaring (10:48)

Svar

Den er ikke vektorisert, for den bruker ikke Matlabs innebygde operasjoner eller funksjoner og den kan heller ikke regne ut resultat for en hel vektor av verdier av gangen. Det er generelt vanskelig å vektorisere kode som trenger å bruke switch-setninger, siden de gjerne har mye sprikende oppførsel som det er vanskelig å uttrykke med én eller et lite knippe innebygde funksjoner og operasjoner. Det finnes en måte å gjøre det på her (se utdelt kode i oppgave 5.2.6), men generelt er det beste vi kan gjøre å lage en "liksom-vektorisert"-funksjon vha en for-løkke som behandler ett og ett element i parameteren. Ved å gjøre dette, kan kode som bruker funksjonen fortsatt skrives vektorisert.
  • No labels