7 svar
75 visningar
skrållan100 377
Postad: 13 aug 16:55

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

skrållan100 377
Postad: 13 aug 18:37

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?

Hondel 714
Postad: 13 aug 22:37

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.

skrållan100 377
Postad: 14 aug 08:47

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

Hondel 714
Postad: 14 aug 09:11

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.

Svara Avbryt
Close