prod, linspace och logspace
Hej,
jag har följande kod som ska lösas:
c8=prod(linspace(0.1,10,3)+1e-31-logspace(-1,1,3)-1e-31)
Var del i parantesen för sig tänker jag blir:
A=linspace(0.1,10,3)
A=[0.1 5.5 10]
B=logspace(-1,1,3)
B=[0.1 1 10]
Där +1e-31-1e-31 = 0
Men hur sätts detta ihop i funktionen prod? Vilka värden multipliceras med varandra?
Vi använder matlab i kursen och detta är en uppgift där kod ges som ska lösas utan programmet.
prod av en vektor ger produkten av elementen i vektorn, ex. prod(1:3) = 1 * 2 * 3 = 6
Så långt är jag med i funktionen. Men här har jag väl något i stil med:
c8 = prod( 0.1 5.05 10 - 0.1 1 10)
Där första delen innan subtrationstecknet är från linspace och det andra från logspace. Hur multiplicerar jag elementen här?
Jag skulle gissa att det först blir elementvis subtraktion, och sedan multipliceras resultat. Vilket då blir 0, eftersom både första och sista elementet första elementet ska bli 0.
Precis. Förutom eventuella konstigheter beroende på avrundningar.
Tack! Hittar dock bara hur funktionen prod används för matriser med flera rader. Där multiplicerar de elementen i kolonnerna med varandra. Nu får jag väl dock: c8 = prod(0 4.05 0) och multiplicerar jag detta blir c8=0? Svaret ska ju bli c8 = 4.0500e-62
Jag misstänker att det är som Matsmats säger, att det blir inte 0 pga numeriska problem
Lurigt. Jag gissar att MATLAB räknar från vänster till höger och då blir element 1 och 3 i vektorn 0 eftersom MATLAB har en precision på ungefär 15 decimaler. Då blir resultatet av element 1 och 3 först noll, sedan drar man bort 1e-31 igen.
Element 2 påverkas inte eftersom 4.05 + 1e-31 blir samma sak som 4.05 pga den begränsade precisionen.