9 svar
259 visningar
dajamanté behöver inte mer hjälp
dajamanté 5139 – Fd. Medlem
Postad: 26 maj 2018 07:51

Plan ekvation beräkning i mathematica

Morgon,

Jag har den här problem som jag löste förut, men jag råkade kasta bort min fil.

Nu är det snart prov och jag kan verkligen inte komma ihåg hur man tar ut planet.

Jag började med detta:

Clear[a, b, V, n]
a = {3.08, 1, 4.76};
b = {4.08, 3.08, 5.76};
V = {3, 6, -3};
n = Cross[b - a, V]

Output var:

{-12.24, 6., -0.24}

Jag antar att eftersom ekvationen ges av en funktion i form Ax+By+Cz+D=0, jag måste göra något sånt:

Solve[Dot[n, a] + d == 0] eller Solve[Dot[n, V] + d == 0]

Men jag kom inte vidare.

Jag har försökt att skärpa mig trots min inre hat mot mathematica, men det gick inte längre än så :( (lösningen, inte skärpningen)!

Guggle 1364
Postad: 27 maj 2018 11:20 Redigerad: 27 maj 2018 11:26
dajamanté skrev:

Clear[a, b, V, n]
a = {3.08, 1, 4.76};
b = {4.08, 3.08, 5.76};
V = {3, 6, -3};
n = Cross[b - a, V]

Output var:

{-12.24, 6., -0.24}

Bra. Det är korrekt. Men jag tycker att du ska skala om normalen INNAN du löser fram ett d. Annars måste du skala om även d.

Jag antar att eftersom ekvationen ges av en funktion i form Ax+By+Cz+D=0, jag måste göra något sånt:

Solve[Dot[n, a] + d == 0] eller Solve[Dot[n, V] + d == 0]

Solve[Dot[n, a] + d == 0] ger ett korrekt värde på d för den normal du har eftersom a är en punkt i planet och d är en normal till planet. Dot[n,V] ska ge noll (dvs d=0) eftersom V är en vektor parallell med planet och n är en vektor vinkelrät (normal till) planet.

I uppgiften ingår även att svara på formen (1)·x+By+Cz+D=0(1)\cdot x+By+Cz+D=0. Alltså måste du slutligen dela ned hela din ekvation (inklusive d) så att den första komponenten blir 1.

Mathematica tolkar input med decimaltecken som approximativa värden, t.ex. är 3.08 ungefär 77/25. För att räkna exakt är det därför smart att omvandla till bråkform direkt. Det kan man göra med Rationalize.

dajamanté 5139 – Fd. Medlem
Postad: 28 maj 2018 09:37 Redigerad: 28 maj 2018 09:41

God morgon Guggle, jag måste erkänna att jag väntar att du stiger upp och svarar på mina post som gräset väntar solen!

 

Två sista!

Vad händer här (i gul) och varför mathematica vägrar acceptera min variabel d (i blått hos mig, i petrolblått hos dig)

 

Dessutom såg jag att du använder dig av en annan beteckning för cross?

Vad ÄR den här esc- option? 

Guggle 1364
Postad: 28 maj 2018 11:05 Redigerad: 28 maj 2018 11:12

Hej Daja,

Mathematica talar om vilka variabler som inte fått några bestämda innehåll / värden (ännu) genom att ge dem en vacker blå färg (exakt vilken blå färg kan du själv ställa in. Jag rekommenderar t.ex. Manganese Blue, Cerulean Blue eller Cobalt Blue Deep).

Om du t.ex. skriver y=17 kommer y vara blå, men när du klickar shift+enter kommer y ändra färg till svart eftersom Mathematica nu vet att y=17 (testa!).

Om du någonsin undrar varför en variabel har en konstig färg kan du markera variabeln och klicka "Help-->Why the coloring".

I vårt exempel används d  bara som tillfällig variabel av Solve. Mathematica känner alltså inte till vad d är generellt. Så här kan du använda svaret från Solve för att kontrollera att även punkten p1 uppfyller planets ekvation:

lösning = Solve[p0.n + d == 0, d];
p1.n + d /. lösning

Nu bör du få 0{0} som svar. Variabeln lösning innehåller substitutionen d --> -3421/1275. Däremot finns det ingen egen variabel d, därav blå färg.

Angående n[[1]]:

 I Mathematica kommer vi åt det som står på på första plats i en vektor n med n[[1]]. Vi delar alltså hela ekvationen med det som står framför x-termen för att få en ekvation på formen x+By+Cz+D=0.

Angående cross:

Jag tycker det går snabbare och blir mer lättläst att använda ×\times och ·\cdot istället för Cross[] och Dot[]. För att snabbt och enkelt komma åt cross trycker du på Esc-tangenten (vanligtvis längst upp till vänster på tangentbordet) börjar skriva "cro" och klickar på TAB.

Esc låter dig också skriva in andra bokstäver. t.ex. π\pi, klicka Esc p TAB eller Esc a TAB för α\alpha osv.

dajamanté 5139 – Fd. Medlem
Postad: 28 maj 2018 14:52 Redigerad: 28 maj 2018 14:52
Guggle skrev:

Hej Daja,

Mathematica talar om vilka variabler som inte fått några bestämda innehåll / värden (ännu) genom att ge dem en vacker blå färg (exakt vilken blå färg kan du själv ställa in. Jag rekommenderar t.ex. Manganese Blue, Cerulean Blue eller Cobalt Blue Deep).

Tack för att du lyfte upp detta. Det var en mycket viktigt matematisk fråga och just nu är den under undersökning!

(hmmm....

....svårt, vad ska man välja!)

Om du t.ex. skriver y=17 kommer y vara blå, men när du klickar shift+enter kommer y ändra färg till svart eftersom Mathematica nu vet att y=17 (testa!).

Yep.

Om du någonsin undrar varför en variabel har en konstig färg kan du markera variabeln och klicka "Help-->Why the coloring".

Uppfattat. Samt why the beep!

Men i våra fall har vi fortfarande en coloring, trots att dd har en bestämt värde! (jo, jag gjorde mig av Rationalize)

I vårt exempel används d  bara som tillfällig variabel av Solve. Mathematica känner alltså inte till vad d är generellt. Så här kan du använda svaret från Solve för att kontrollera att även punkten p1 uppfyller planets ekvation:

lösning = Solve[p0.n + d == 0, d];
p1.n + d /. lösning

Vad är /. ? Läraren sa att det var en transformations variabel, men jag fattade aldrig. Vad ersätter du med vad?

Nu bör du få 0{0} som svar. Variabeln lösning innehåller substitutionen d --> -3421/1275. Däremot finns det ingen egen variabel d, därav blå färg.

 

Jag tror att det är precis detta jag förstår inte i syntaxen.

Angående n[[1]]:

 I Mathematica kommer vi åt det som står på på första plats i en vektor n med n[[1]]. Vi delar alltså hela ekvationen med det som står framför x-termen för att få en ekvation på formen x+By+Cz+D=0.

Uppfattat!

Angående cross:

Jag tycker det går snabbare och blir mer lättläst att använda ×\times och ·\cdot istället för Cross[] och Dot[]. För att snabbt och enkelt komma åt cross trycker du på Esc-tangenten (vanligtvis längst upp till vänster på tangentbordet) börjar skriva "cro" och klickar på TAB.

Esc låter dig också skriva in andra bokstäver. t.ex. π\pi, klicka Esc p TAB eller Esc a TAB för α\alpha osv.

 Gud vad roligt! Tack!

Guggle 1364
Postad: 29 maj 2018 13:14 Redigerad: 29 maj 2018 13:21

Men i våra fall har vi fortfarande en coloring, trots att dd har en bestämt värde! (jo, jag gjorde mig av Rationalize)

Fast d har inte ett bestämt värde! Testa att skriva "?d" så säger bara Mathematica "Global`d". Variabeln används av Solve-funktionen. Men Solve-funktionen tilldelar inte d något värde när den är klar.

Vad är /. ? Läraren sa att det var en transformations variabel, men jag fattade aldrig. Vad ersätter du med vad?

./ betyder "ReplaceAll[]". Många funktioner i Mathematica ger dig en lista med transformationsregler som svar. Solve är en sådan funktion. Den lägger alltså INTE svaret i variabeln man löser ut. Testa följande:

In[1]:= lista = Solve[x^2 - 4 == 0, x]
Out[1]= {{x -> -2}, {x -> 2}}

Nu innehåller lista två regler. Regel nummer 1 är x-2x\to-2 och betyder "Finns det något x, byt ut det mot -2!". Vi testar genom att skriva in ett uttryck med x och använda den första regeln i lista:

In[3]:= 5 x^3 + 2 x - 4 /. lista[[1]]
Out[3]= -48

Om vi vill testa med den andra lösningen använder vi den andra regeln i listan. Den regeln säger "Finns det något x, byt ut det mot 2!"

In[4]:= 5 x^3 + 2 x - 4 /. lista[[2]]
Out[4]= 40

Om vi vill kan vi tillämpa båda reglerna på en gång och få två resultat direkt

In[5]:= 5 x^3 + 2 x - 4 /. lista
Out[5]= {-48, 40}

Om du tittar på innehållet i variabeln x så ser du att den i sig själv inte håller något värde.

Guggle 1364
Postad: 29 maj 2018 14:03

Oh, and btw :)

dajamanté 5139 – Fd. Medlem
Postad: 30 maj 2018 06:28 Redigerad: 30 maj 2018 06:29

Ooooh ok!

Det påmminer om konvergerande matris problem!

Om jag har matris A:

A = {{-1.7, -12.6, -12.6}, {-1.2, -5.6, -6.6}, {1.5, 7.8, 8.8}}

och undersöker konvergens med:

MatrixPower[A, 1000]

får jag:

{{7.10543*10^-15, 2.84217*10^-14, 3.55271*10^-14}, {-1., -4., -5.}, {1., 4., 5.}}

Jag har testat Rationalize{{7.10543*10^-15, 2.84217*10^-14, 3.55271*10^-14}, {-1., -4., -5.}, {1., 4., 5.}} eller

Rationalize[MatrixPower[A, 1000]]

... det vill inte visa noll istället för dem två första rader!

 

PS: tack, jag tror jag är med transformationer :)

Guggle 1364
Postad: 30 maj 2018 11:02

Ja, om du vill räkna "exakt" måste du säga åt Mathematica det redan från början genom att konvertera dina närmevärden till exakta bråk, så här (Matris B är exakt och Matris A är fulmatris):

dajamanté 5139 – Fd. Medlem
Postad: 30 maj 2018 11:08

Tack! Gräset är mycket nöjd, och bli kanske godkänt på tenta imorgon.

Svara
Close