7 svar
100 visningar
skrållan100 393
Postad: 13 aug 2022 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. 

Matsmats 567 – Livehjälpare
Postad: 13 aug 2022 17:57

prod av en vektor ger produkten av elementen i vektorn, ex. prod(1:3) = 1 * 2 * 3 = 6

skrållan100 393
Postad: 13 aug 2022 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 1289
Postad: 13 aug 2022 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.

Matsmats 567 – Livehjälpare
Postad: 14 aug 2022 00:14

Precis. Förutom eventuella konstigheter beroende på avrundningar.

skrållan100 393
Postad: 14 aug 2022 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 1289
Postad: 14 aug 2022 09:11

Jag misstänker att det är som Matsmats säger, att det blir inte 0 pga numeriska problem

Matsmats 567 – Livehjälpare
Postad: 15 aug 2022 07:57

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