/ Forside / Karriere / Uddannelse / Højere uddannelser / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Højere uddannelser
#NavnPoint
Nordsted1 1588
erling_l 1224
ans 1150
dova 895
gert_h 800
molokyle 661
berpox 610
creamygirl 610
3773 570
10  jomfruane 570
gradienten af vektorfunktion
Fra : Jakob Nielsen


Dato : 25-02-05 16:47

Hvis man x som en vektor i R2 og en funktion R2->R som er
f(x)=2*x1^2+3*x2^3,
så er differentialet for fastholdt x1 9*x2^2 og for fastholdt x2 er det 4*x1
Skal det tolkes som at gradienten er [9*x2^2; 3*x1]' ?
Er det alt der er i beregning af gradienter? Det er reelt bare en
hældningskoficient i flere dimensioner?

Hvis man nu ønsker at bruge "steepest decent" til at beregne rødder i
vektorfunktionen, så starter man med et gæt på et x som en rod. Derefter
beregner man gradientvektoren for denne x og derefter beregnes x_(k+1) som
gradienten(x_k)*faktor, hvor faktoren er bestemmende for hvor voldsomt man
vil bevæge sig mod nulpunktet (eller lokale minimum)?

Mit sidste spørgsmål er hvilken matrix det er man sædvanligvis beregner for
gradienter. Det er et ret vagt spørgsmål, men jeg har tidligere flere gange
set en NxN matrix upbygget som "noget gradient noget" for vektorfunktioner
på N-dimensionelle vektorer.
Tilsyneladende er den for ovenstående funktion lig med [9*x2^2 0 ; 0 3*x1],
sådan at gradienten ligger på diagonelan i en O-matrix.
Måske er det _for_ vagt, men muligvis ringer der en klokke hos klogere
hoveder end mig.



 
 
Henning Makholm (25-02-2005)
Kommentar
Fra : Henning Makholm


Dato : 25-02-05 21:37

Scripsit "Jakob Nielsen" <a@b.c>

> Hvis man x som en vektor i R2 og en funktion R2->R som er
> f(x)=2*x1^2+3*x2^3,
> så er differentialet for fastholdt x1 9*x2^2 og for fastholdt x2 er det 4*x1

Ja, bortset fra at det ikke hedder "differentialet", men
"differentialkvotienten" eller "den partielle afledede".

Det relevante differentiale ville være df = 9x2²*dx2 + 2x1*dx1.

> Skal det tolkes som at gradienten er [9*x2^2; 3*x1]' ?

Ja, hvis altså mærket er en slåfejl. Det har ikke noget at gøre der.

> Er det alt der er i beregning af gradienter?

Ja.

(Så længe du holder dig til at bruge samme koordinatsystem i hele
udretningen. Hvis man giver sig til at skifte koordinatsystem
undervejs, skal gradienten flyttes over i det nye koordinatsystem på
en anden måde end almindelige stedvektorer, og så skal man til at
holde tungen lige i munden).

> Det er reelt bare en hældningskoficient i flere dimensioner?

Ja.

> Hvis man nu ønsker at bruge "steepest decent" til at beregne rødder i
> vektorfunktionen, så starter man med et gæt på et x som en rod. Derefter
> beregner man gradientvektoren for denne x og derefter beregnes x_(k+1) som
> gradienten(x_k)*faktor, hvor faktoren er bestemmende for hvor voldsomt man
> vil bevæge sig mod nulpunktet (eller lokale minimum)?

Ikke helt. Som minimum skal du ihvertfald have
x[k+1] = x[k] + grad(f)(x[k]) * ....

Derudover: når gradienten er stor, ændrer funktionsværdien sig
voldsomt over korte afstande, så i almindelighed ønsker man at store
gradienter fører til små skridt - men i gradientens retning.

Den "steepest descent"-metode jeg lige kan huske gør noget lidt
andet. Når man har x[k] opstiller man funktionen

g(t) = f(x[k] + t*grad(f)(x[k]))

hvor t er en skalar, og finder så minimum t0 for g på normal
endimensionel vis. Så sætter man x[k+1] til x[k]+t0*grad(f)(x[k]).

> Mit sidste spørgsmål er hvilken matrix det er man sædvanligvis beregner for
> gradienter. Det er et ret vagt spørgsmål, men jeg har tidligere flere gange
> set en NxN matrix upbygget som "noget gradient noget" for vektorfunktioner
> på N-dimensionelle vektorer.

Det er for vagt til at jeg kan genkende det.

--
Henning Makholm "What a hideous colour khaki is."

Jakob Nielsen (25-02-2005)
Kommentar
Fra : Jakob Nielsen


Dato : 25-02-05 22:05

>> Skal det tolkes som at gradienten er [9*x2^2; 3*x1]' ?
> Ja, hvis altså mærket er en slåfejl. Det har ikke noget at gøre der.

Skriver man ikke normalt vektorer som søjlevektorer? Det jeg skriver er så
[9*x2^2; 3*x1] transponeret... med matlab-agtig syntax.
Er det ikke korrekt?

> (Så længe du holder dig til at bruge samme koordinatsystem i hele
> udretningen. Hvis man giver sig til at skifte koordinatsystem
> undervejs, skal gradienten flyttes over i det nye koordinatsystem på
> en anden måde end almindelige stedvektorer, og så skal man til at
> holde tungen lige i munden).

Er det meget komplekst eller nogenlunde til at forklare? Umiddelbart ville
jeg da tro at rotationen og eventuel skalering bare ganges på gradienten.
Translation gør ikke... det er velsagtens ikke korrekt?

> Ikke helt. Som minimum skal du ihvertfald have
> x[k+1] = x[k] + grad(f)(x[k]) * ....

Ja, naturligvis. Jeg glemte lige det oprindelige gæt.

> Derudover: når gradienten er stor, ændrer funktionsværdien sig
> voldsomt over korte afstande, så i almindelighed ønsker man at store
> gradienter fører til små skridt - men i gradientens retning.

igen må jeg udbryde "naturligvis". Man ville sansynligvis skyde forbi målet
ellers.

Takker for dine svar. Det er rart at få bekræftet at det ikke er så
komplekst endda... i den generelle udgave.



Henning Makholm (25-02-2005)
Kommentar
Fra : Henning Makholm


Dato : 25-02-05 23:48

Scripsit "Jakob Nielsen" <a@b.c>

>>> Skal det tolkes som at gradienten er [9*x2^2; 3*x1]' ?

>> Ja, hvis altså mærket er en slåfejl. Det har ikke noget at gøre der.

> Skriver man ikke normalt vektorer som søjlevektorer?

Tja, jeg skriver dem bare som talsæt, og bekymrer mig ikke meget om om
de går opad eller henad, så længe jeg ikke skal stille en maskine
tilfreds. Når man generaliserer vil tensorer, går forskellen aligevel
tabt.

Hvis det endelig skal være, kan det tværtimod være en fordel at skrive
kovariante vektorer (herunder gradienter, se nedenfor) som
rækkevektorer, idet en måde at opfatte dem på er som en måde at angive
en lineær funktion fra vektorrummet til skalarlegemet. Man anvender
funktionen ved at tage prikprodukt, hvilet hvis man har sin gradient
skrevet som række netop svarer til matrixmultiplikation af rækken med
en søjlevektor.

> Det jeg skriver er så [9*x2^2; 3*x1] transponeret... med
> matlab-agtig syntax. Er det ikke korrekt?

Sikkert. Jeg er ikke vant til den syntaks og troede at du mente et
afledningsmærke.

>> Hvis man giver sig til at skifte koordinatsystem undervejs, skal
>> gradienten flyttes over i det nye koordinatsystem på en anden måde
>> end almindelige stedvektorer, og så skal man til at holde tungen
>> lige i munden).

> Er det meget komplekst eller nogenlunde til at forklare? Umiddelbart ville
> jeg da tro at rotationen og eventuel skalering bare ganges på gradienten.
> Translation gør ikke... det er velsagtens ikke korrekt?

Ved rotation kan du rotere gradienten på samme måde som
stedvektorerne, men skalering virker modsat på gradienten. Hvis du
strækker din graf til dobbelt størrelse bliver x'erne dobbelt så
store, men alle gradiender krymper til halvdelen af hvad de var før.

Hvis man har en koordinatsystemtransformation som er sammensat af
rotationer og skaleringer (evt forskellig skalering ad forskellige
akser) og den er givet som en samlet matrix, er der en eller anden
magisk formel for at tage hensyn til det hele på en gang, som jeg
aldrig kan huske uden at slå op. Noget i retning af den inverse af den
transponerede matrix.

Gradienter er hovedeksemplet på "kovariante vektorer" som er
karakteriseret ved at opføre sig på den måde når man skifter
koordinatsystem.

I det specielle tilfælde at alle de transformationer man betragter,
bevarer prikprodukter (herunder normer), behøver man ikke skelne
mellem ko- og kontravariante vektorer, idet begge dele så
transformeres ens.

--
Henning Makholm "Monarki, er ikke noget materielt ... Borger!"

Jakob Nielsen (26-02-2005)
Kommentar
Fra : Jakob Nielsen


Dato : 26-02-05 09:40

Tak for de mange svar



J. Martin Petersen (25-02-2005)
Kommentar
Fra : J. Martin Petersen


Dato : 25-02-05 23:06

Jakob Nielsen wrote:

> Mit sidste spørgsmål er hvilken matrix det er man sædvanligvis beregner for
> gradienter. Det er et ret vagt spørgsmål, men jeg har tidligere flere gange
> set en NxN matrix upbygget som "noget gradient noget" for vektorfunktioner
> på N-dimensionelle vektorer.

Jeg kommer umiddelbart til at tænke på Jacobi-matricen. Hvis F er en
funktion fra (en åben delmængde af) R^n ind i R^m, som er differentiabel
i punktet x_0, er den den j'te række i Jacobi-matricen for F i x_0 givet
ved gradienten for F_j(x_0).

Mvh. Martin

Jakob Nielsen (26-02-2005)
Kommentar
Fra : Jakob Nielsen


Dato : 26-02-05 09:42

> Jeg kommer umiddelbart til at tænke på Jacobi-matricen. Hvis F er en
> funktion fra (en åben delmængde af) R^n ind i R^m, som er differentiabel i
> punktet x_0, er den den j'te række i Jacobi-matricen for F i x_0 givet ved
> gradienten for F_j(x_0).

Det lyder faktisk bekendt. Så er det indlysende spørgsmål naturligvis hvad
man generelt anvender den til?
Det kune jeg prøve at finde ud af ved opslag, hvad jeg straks vil gøre, men
hvis du har et hurtigt lille svar, så hører jeg det gerne.
Takker for inputtet



Henning Makholm (26-02-2005)
Kommentar
Fra : Henning Makholm


Dato : 26-02-05 23:44

Scripsit "Jakob Nielsen" <a@b.c>

>> Jeg kommer umiddelbart til at tænke på Jacobi-matricen. Hvis F er en
>> funktion fra (en åben delmængde af) R^n ind i R^m, som er differentiabel i
>> punktet x_0, er den den j'te række i Jacobi-matricen for F i x_0 givet ved
>> gradienten for F_j(x_0).

> Det lyder faktisk bekendt. Så er det indlysende spørgsmål naturligvis hvad
> man generelt anvender den til?

Jacobimatricen er den bedste generalisering af hældningskoefficienter
til funktioner der har flere dimensioner som både ind- og uddata.
Specielt er den bedste affine tilnærmelse til f i nærheden af x0 givet
som

g(x) = f(x0) + J×[x-x0]

hvor J er Jacobimatricen. Idet forskellen mellem f(x) og g(x) går mod
0 hurtigere end |x-x0| for x -> x0.

Hvis n=m, er f bijektiv fra en passende lille omegn af x0 til en omegn
af f(x0) netop når J har determinant forskellig fra 0.

--
Henning Makholm "Nej, hvor er vi altså heldige! Længe
leve vor Buxgører Sansibar Bastelvel!"

Jonas Møller Larsen (26-02-2005)
Kommentar
Fra : Jonas Møller Larsen


Dato : 26-02-05 13:55

Jakob Nielsen wrote:
> Hvis man x som en vektor i R2 og en funktion R2->R som er
> f(x)=2*x1^2+3*x2^3,

"Vektorfunktioner" betegner normalt funktioner, hvor funktionsværdien er
en vektor. Her er f bare en skalarfunktion (fordi funktionsværdien er et
tal, en skalar), men en funktion af flere variable. (Dvs strengt taget
er f så også en vektorfunktion, men en kedelig éndimensional en af slagsen.)

Et eksempel på en "rigtig" vektorfunktion er gradienten af f, som
afbilder R² ind i R². For hver inputvektor, (x1, x2), er resultatet en
ny vektor.

> Er det alt der er i beregning af gradienter? Det er reelt bare en
> hældningskoficient i flere dimensioner?

Ja. Men gradienten har både størrelse og retning, så den indeholder både
information om funktionens hældning, samt om i hvilken retning det går
stejlest opad.

> Hvis man nu ønsker at bruge "steepest decent" til at beregne rødder i
> vektorfunktionen, så starter man med et gæt på et x som en rod. Derefter
> beregner man gradientvektoren for denne x og derefter beregnes x_(k+1) som
> gradienten(x_k)*faktor, hvor faktoren er bestemmende for hvor voldsomt man
> vil bevæge sig mod nulpunktet (eller lokale minimum)?

Mod et lokalt minimum. Måske tænker du på, at man kan finde nulpunkterne
for f(x) ved at finde minimumspunkter for (f(x))².

> Mit sidste spørgsmål er hvilken matrix det er man sædvanligvis beregner for
> gradienter.

Jacobi-matricen, J, er allerede nævnt. Hvis du har prøvet at integrere
vha. substitutionsmetoden, så ved du, at dx skal udsiftes med (dx/du)du,
når man skifter variabel fra x til u. Her er omregningsfaktoren (dx/du)
et éndimensionalt specialtilfælde af |determinant(J)|. Med andre ord,
når man skifter variabel i et multidimensionalt integral (rumintegraler,
overfladeintegraler) har man brug for determinanten af J.

Et eksempel er transformationen fra retvinklede til polære koordinater i
to dimensioner, hvor der gælder dx dy = r dr d(theta). Her er faktoren r
fremkommet som |determinant(J)|.

Desuden kan man afgøre, om et stationært punkt for en skalar funktion er
minimum, maksimum eller et saddelpunkt, hvis bare man kender
determinanten og sporet (summen af diagonalelementerne) af gradientens
J, som er

[d²f/dx² d²f/dxdy
d²f/dydx d²f/dy² ],

men det virker vist kun i dimensioner.

--
Jonas Møller Larsen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste