|
| Vektor som ikke er paralel Fra : Jakob Nielsen |
Dato : 22-05-05 20:18 |
|
Hvis jeg har vektoren a og vil have vektoren b som ikke er paralel med a,
hvordan kan jeg da hurtigt manipulere med a, og få b?
Eneste krav er at de ikke er paralelle. b må være hvad den vil være
(undtaget nulvektoren).
Første tanke var at lægge en værdi til en af vektorværdierne:
(1,2,3)=>(2,2,3), men det fejler jo for (1,0,0)=>(2,0,0)
Anden tanke var at lægge en forskellig værdi til hvert element. Eksempelvis
1,2 og3, men det fejler (1,2,3)=>(2,4,6)
Tredie tanke var at skalere elementerne forskelligt. Eksempelvis 2,3 og 4,
men det fejler for (1,0,0)=>(1*2,0*3,0*4)
Fjerde tanke var at beregne en mulig b hvor prikproduktet over produktet af
længderne giver 0, så vinken er 90 grader, men det er mere omstændigt end
jeg gerne vil have.
Findes der ikke en meget hurtig og simpel måde at få en b på?
| |
Henning Makholm (22-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 22-05-05 20:51 |
|
Scripsit "Jakob Nielsen" <a@b.c>
> Hvis jeg har vektoren a og vil have vektoren b som ikke er paralel med a,
> hvordan kan jeg da hurtigt manipulere med a, og få b?
Tag krydsprodukterne med henholdvis (1,0,0) og (0,0,1) - det giver
dig (0,z,-y) og (y,-x,0). Vælg den af dem som har størst norm.
Dette giver dig en diskontinuert afbildning fra a til b, men det er
der ikke noget at gøre ved - en kontinuert løsning på dit problem er
topologisk umulig (på grund af "the hairy ball theorem") i et ulige
antal dimensioner.
--
Henning Makholm Feet: Store in a cool dry place
| |
Jens Axel Søgaard (22-05-2005)
| Kommentar Fra : Jens Axel Søgaard |
Dato : 22-05-05 21:44 |
|
Henning Makholm wrote:
> Dette giver dig en diskontinuert afbildning fra a til b, men det er
> der ikke noget at gøre ved - en kontinuert løsning på dit problem er
> topologisk umulig (på grund af "the hairy ball theorem") i et ulige
> antal dimensioner.
Også kaldet Poincares pindsvinesætning (Hedgehog Theorem of Poincare).
/Jens Axel Søgaard, som ikke kunne huske, sætningen havde to navne
| |
Jakob Nielsen (23-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 23-05-05 10:04 |
|
> Tag krydsprodukterne med henholdvis (1,0,0) og (0,0,1) - det giver
> dig (0,z,-y) og (y,-x,0). Vælg den af dem som har størst norm.
Det er så ikke nogen hurtig metode, men der findes ingen mere simpel metode,
siger du?
Jeg ser fidusen i at tage de to kryds. Hvis a er paralel med den ene af de
to aksevetorer, så er normen nul, og man bruger den anden.
Takker for svaret.
| |
Henning Makholm (23-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 23-05-05 16:44 |
|
Scripsit "Jakob Nielsen" <a@b.c>
>> Tag krydsprodukterne med henholdvis (1,0,0) og (0,0,1) - det giver
>> dig (0,z,-y) og (y,-x,0). Vælg den af dem som har størst norm.
> Det er så ikke nogen hurtig metode, men der findes ingen mere simpel metode,
> siger du?
Hvorfor mener du ikke det er hurtigt? Man behøver jo ikke regne normen
ud eksplicit - valget kommer blot an på om |z| eller |x| er størst.
Samlet koster beregningern to gange |.|, en sammenlingning, et
betinget hop og en negation. Resten er bare flytning af data.
Hvordan kan nogetsomhelst blive hurtigere? (Betingede hop er dyre på
moderne computere, men ikke *så* dyre).
--
Henning Makholm "... popping pussies into pies
Wouldn't do in my shop
just the thought of it's enough to make you sick
and I'm telling you them pussy cats is quick ..."
| |
Martin Larsen (23-05-2005)
| Kommentar Fra : Martin Larsen |
Dato : 23-05-05 17:16 |
|
"Henning Makholm" <henning@makholm.net> skrev i en meddelelse news:87mzqm3q24.fsf@kreon.lan.henning.makholm.net...
> (Betingede hop er dyre på
> moderne computere, men ikke *så* dyre).
>
SVJV er de gratis, (hvis vi kun ser hoppet) med mindre det er meget langt.
Mvh
Martin
| |
Jakob Nielsen (23-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 23-05-05 18:57 |
|
> Hvorfor mener du ikke det er hurtigt? Man behøver jo ikke regne normen
> ud eksplicit - valget kommer blot an på om |z| eller |x| er størst.
Det kommer så an på hvilken norm vi taler om. Den euklidske længde er
ekstremt dyr.
> Samlet koster beregningern to gange |.|, en sammenlingning, et
> betinget hop og en negation. Resten er bare flytning af data.
> Hvordan kan nogetsomhelst blive hurtigere? (Betingede hop er dyre på
> moderne computere, men ikke *så* dyre).
Noget kan være hurtigere hvis man blot skal lægge en værdi til eller evt
foretage to multiplikationer.
| |
Jens Axel Søgaard (23-05-2005)
| Kommentar Fra : Jens Axel Søgaard |
Dato : 23-05-05 19:17 |
|
Jakob Nielsen wrote:
>>Hvorfor mener du ikke det er hurtigt? Man behøver jo ikke regne normen
>>ud eksplicit - valget kommer blot an på om |z| eller |x| er størst.
>
>
> Det kommer så an på hvilken norm vi taler om. Den euklidske længde er
> ekstremt dyr.
For at sammenligne størrelsen behøver man heldigvis ikke at
tage kvadratroden.
--
Jens Axel Søgaard
| |
Jakob Nielsen (23-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 23-05-05 21:05 |
|
>For at sammenligne størrelsen behøver man heldigvis ikke at
>tage kvadratroden.
Nej, man kan sammenligne kvadratet på længden, eller man kan vælge en anden
norm med simplere udregning.
Jeg søgte som sagt bare en helt elementær operation der kunne sikre at b ike
var paralel med a.
| |
Niels L. Ellegaard (25-05-2005)
| Kommentar Fra : Niels L. Ellegaard |
Dato : 25-05-05 04:53 |
|
Henning Makholm <henning@makholm.net> writes:
> Samlet koster beregningern to gange |.|, en sammenlingning, et
> betinget hop og en negation. Resten er bare flytning af data.
> Hvordan kan nogetsomhelst blive hurtigere? (Betingede hop er dyre på
> moderne computere, men ikke *så* dyre).
Kan I anbefale en god bog om emnet?
Jeg har en løs ide om hvilke operationer der er problematiske og man
kan altid bruge gprof til at undersøge sin kode, men jeg kunne godt
tænke mig at læse en ordentlig gennemgang.
Bogen må gerne være rettet mod FORTRAN og numerisk analyse, men jeg er
ikke interesseret i en bog om matrix-operationer el lign. Bogen skal
handle om grundlæggende operationer såsom gange, flytning af data og
betingede hop.
På forhånd tak
Niels
| |
Henning Makholm (23-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 23-05-05 18:12 |
|
Scripsit "Martin Larsen" <mlarsen@post7.tele.dk>
> "Henning Makholm" <henning@makholm.net> skrev
>> (Betingede hop er dyre på
>> moderne computere, men ikke *så* dyre).
> SVJV er de gratis, (hvis vi kun ser hoppet) med mindre det er meget langt.
Et ubetinget hop er billigt. Betingelsen koster derimod (relativt i
forhold til sekventiel kode), hvis ikke den kan forudsiges pålideligt.
--
Henning Makholm "I have seen men with a *fraction* of
your trauma pray to their deity for death's
release. And when death doesn't arrive immediately,
they reject their deity and begin to beg to another."
| |
Henning Makholm (25-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 25-05-05 01:11 |
|
Scripsit "Jakob Nielsen" <a@b.c>
>> Hvorfor mener du ikke det er hurtigt? Man behøver jo ikke regne normen
>> ud eksplicit - valget kommer blot an på om |z| eller |x| er størst.
> Det kommer så an på hvilken norm vi taler om. Den euklidske længde er
> ekstremt dyr.
Den euklidiske længde er ekstremt billig, hvis det eneste du spørger
om er om (y,-x,0) er længere end (0,z,-y). Der gælder nemlig
norm(y,-x,0) > norm(0,z,-y)
<=> sqrt(y²+x²) > sqrt(z²+y²) [pr definition]
<=> y²+x² > z²+y² [da sqrt er strengt monoton]
<=> x² > z² [træk y² fra på begge sider]
<=> sqrt(x²) > sqrt(z²) [sqrt er stadig monoton]
<=> |x| > |z| [velkendt sqrt(a²) = |a|]
I sidste ende koster beregningen ikke mere end to _reelle_ numeriske
værdier og en sammenligning. Det er svært at forestille sig en
_billigere_ betingelse at udregne som giver en brugbar opdeling af R³.
>> Samlet koster beregningern to gange |.|, en sammenlingning, et
>> betinget hop og en negation. Resten er bare flytning af data.
>> Hvordan kan nogetsomhelst blive hurtigere?
> Noget kan være hurtigere hvis man blot skal lægge en værdi til eller evt
> foretage to multiplikationer.
Hvis du *ingen* betingelser har, vil den funktion du udregner altid
blive kontinuert. Og så kan den, som jeg startede med at forklare,
ikke opfylde de krav du stiller til den.
--
Henning Makholm "The spirits will have to knit like
banshees, but with enough spirits it *can* be done!"
| |
Jakob Nielsen (25-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 25-05-05 08:37 |
|
> Den euklidiske længde er ekstremt billig, hvis det eneste du spørger
> om er om (y,-x,0) er længere end (0,z,-y). Der gælder nemlig
Det er noget underligt ordpilleri. Længden er ikke billig at beregne. At man
kan omforme problemet til ikke at kræve beregningen af den egentlige længde,
ved blot at sammenligne to størelser, betyder ikke at længden er billig. Du
undlader bare at beregne den.
| |
Henning Makholm (25-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 25-05-05 01:12 |
|
Scripsit "Jakob Nielsen" <a@b.c>
> Jeg søgte som sagt bare en helt elementær operation der kunne sikre at b ike
> var paralel med a.
Og det fik du så.
--
Henning Makholm "Larry wants to replicate all the time ... ah, no,
all I meant was that he likes to have a bang everywhere."
| |
Jakob Nielsen (25-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 25-05-05 08:34 |
|
>> Jeg søgte som sagt bare en helt elementær operation der kunne sikre at b
>> ike
>> var paralel med a.
>
> Og det fik du så.
Nej, det gjorde jeg netop ikke. Den søgte metode var mere elementær. Den
givne er vel nok det mest elementære, så det må jeg stille mig tilfreds
med... og tak for det.
| |
Henning Makholm (25-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 25-05-05 16:41 |
|
Scripsit "Jakob Nielsen" <a@b.c>
>> Den euklidiske længde er ekstremt billig, hvis det eneste du spørger
>> om er om (y,-x,0) er længere end (0,z,-y). Der gælder nemlig
> Det er noget underligt ordpilleri. Længden er ikke billig at beregne.
Det har jeg heller ikke påstået. Men den er billig at *sammenligne*
(for de to vektorer i sammenhængen). Det står jeg ved at den er.
> At man kan omforme problemet til ikke at kræve beregningen af den
> egentlige længde, ved blot at sammenligne to størelser, betyder ikke
> at længden er billig.
Jo, det betyder *netop* at den er billig at sammenligne på i dette
tilfælde.
For den sags skyld kan du også bruge 1-norm, hvis du hellere vil det.
Det fører (tilfældigvis) til præcis samme sammenligning.
--
Henning Makholm "We will discuss your youth another time."
| |
Jakob Nielsen (25-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 25-05-05 17:35 |
|
"Henning Makholm" <henning@makholm.net> wrote in message
news:87mzqjgvos.fsf@kreon.lan.henning.makholm.net...
> Scripsit "Jakob Nielsen" <a@b.c>
>
>>> Den euklidiske længde er ekstremt billig, hvis det eneste du spørger
>>> om er om (y,-x,0) er længere end (0,z,-y). Der gælder nemlig
>
>> Det er noget underligt ordpilleri. Længden er ikke billig at beregne.
>
> Det har jeg heller ikke påstået. Men den er billig at *sammenligne*
> (for de to vektorer i sammenhængen). Det står jeg ved at den er.
Nej, det er måske mig der er for kløvende der. Det jeg mente var at den
euklidske længde aldrig er billig, og det er den heller ikke. Det du siger
er at den er billig hvis man sammenligner to for hvilken der er størst, men
min pointe var at du ikke beregner den euklidske længde og at eksemplet med
sqrt(a1^2+a2^2+a3^2) > sqrt(b1^2+b2^2+b3^2) =>
a1^2+a2^2+a3^2 > b1^2+b2^2+b3^2
ikke bruger den euklidske længde, da den ikke forekommer i slutligningen.
Jeg forstod hvad du mente. Der er ikke nogen grund til at slås om intet
længere.
> For den sags skyld kan du også bruge 1-norm, hvis du hellere vil det.
> Det fører (tilfældigvis) til præcis samme sammenligning.
Ja, det eneste man skal er jo at sikre sig at man ikke får O-vektoren eller
en meget meget kort vektor pga. numeriske unøjagtigheder.
Jeg vil anvende din metode.
| |
Henning Makholm (25-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 25-05-05 16:42 |
|
Scripsit "Jakob Nielsen" <a@b.c>
>>> Jeg søgte som sagt bare en helt elementær operation der kunne sikre at b
>>> ike var paralel med a.
>> Og det fik du så.
> Nej, det gjorde jeg netop ikke.
Hvorledes definerer du "elementær"? Hvis ikke de fire regningsarter og
ordningen af de reelle tal er elementære, hvad er så?
--
Henning Makholm "It will be useful even at this
early stage to review briefly the main
features of the universe as they are known today."
| |
Jakob Nielsen (25-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 25-05-05 17:28 |
|
> Hvorledes definerer du "elementær"? Hvis ikke de fire regningsarter og
> ordningen af de reelle tal er elementære, hvad er så?
Da mere komplekse regningsarter kan beskrives ved de fire simple, så giver
det vel ikke meget mening at definere det sådan.
Med elementær mente jeg såmænd bare noget _mere_ elementært. Du kan finde
min definition af elementær (som er relativ i forhold til opgaven) et sted
på den _mere_ elementære side end at beregne krydsprodukt af tre vektore
parvis og derefter beregne normen og til slut finde den længste.
Jeg accepterer at der ikke findes noget mere elementært, men det var som
sagt det jeg oprindeligt søgte.
Var det ordkløvning nok?
| |
Henning Makholm (28-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 28-05-05 12:47 |
|
Scripsit gnalle@ruc.dk (Niels L. Ellegaard)
> Henning Makholm <henning@makholm.net> writes:
>> Samlet koster beregningern to gange |.|, en sammenlingning, et
>> betinget hop og en negation. Resten er bare flytning af data.
>> Hvordan kan nogetsomhelst blive hurtigere? (Betingede hop er dyre på
>> moderne computere, men ikke *så* dyre).
> Kan I anbefale en god bog om emnet?
Jeg kan ikke. Jeg udtaler mig på grundlag af 10 år gammelt
forelæsningsmateriale, foruden meget lejlighedsvis bladren i
tekniske artikler.
--
Henning Makholm "Den nyttige hjemmedatamat er og forbliver en myte.
Generelt kan der ikke peges på databehandlingsopgaver af
en sådan størrelsesorden og af en karaktér, som berettiger
forestillingerne om den nye hjemme- og husholdningsteknologi."
| |
Martin Larsen (23-05-2005)
| Kommentar Fra : Martin Larsen |
Dato : 23-05-05 10:33 |
|
"Jakob Nielsen" <a@b.c> skrev i en meddelelse news:4290db07$0$67255$157c6196@dreader2.cybercity.dk...
> Hvis jeg har vektoren a og vil have vektoren b som ikke er paralel med a,
> hvordan kan jeg da hurtigt manipulere med a, og få b?
> Eneste krav er at de ikke er paralelle. b må være hvad den vil være
> (undtaget nulvektoren).
>
Hvis din a ikke er (a1,0,0) så brug (1,0,0) og ellers fx (0,1,0)
Mvh
Martin
| |
Jakob Nielsen (23-05-2005)
| Kommentar Fra : Jakob Nielsen |
Dato : 23-05-05 14:57 |
|
> Hvis din a ikke er (a1,0,0) så brug (1,0,0) og ellers fx (0,1,0)
Men a kunne jo være (2,0,0)
Jeg forstår godt din pointe, men der bliver en del if ditten then datten,
eller evt. normliseren, først.
Strengt taget er det stadig billigere end Hennings metode, men jeg søgte
noget helt banalt og generelt, som så tilsyneladende ikke findes.
| |
Henning Makholm (23-05-2005)
| Kommentar Fra : Henning Makholm |
Dato : 23-05-05 16:49 |
|
Scripsit "Martin Larsen" <mlarsen@post7.tele.dk>
> Hvis din a ikke er (a1,0,0) så brug (1,0,0) og ellers fx (0,1,0)
Hvis a er (100,0,0.00000001) vil du få (1,0,0), og det er så tæt på
parallelt at det sikkert vil give risiko for numeriske problemer
senere i beregningen.
Man kan undgå den slags ved at bruge (1,0,0) når |y|>|x| og (0,1,0)
ellers. Det er en lille smule hurtigere end mit første forslag idet
man sparer en negation. Valget vil nok afhænge mere af om der er en af
de ekstra egenskaber "altid norm 1" og "altid ortogonal på a" der
giver mulighed for at skyde genveje i resten af beregningen.
--
Henning Makholm "*Her* sidder jaj & har *ild* bå cigarren
*imens* Pelle Jönsson i Nordnorge har mavepine."
| |
|
|