SF1626 - Övning 2 - Code

Göran Andersson goeran@kth.se, 110324

Dubbelklicka på  nedan för att öppna en rubrik.

Inledning

I filen SF1626_1_code.nb visas att du exekverar kod. Koden representeras i en Input-cell vars utsträckning visas med cellklammern  till höger. För att exekvera koden markerar du (klickar på) cellklammern trycker ⇧↵ eller endast ⌤ på ett numeriskt sido-tangentbord. Istället för att markera cellklammern räcker det med att textmarkören finns någonstans i Input-cellen. Mathematica kommer att svara med en Output-cell. Om du trycker endast ↵ utförs radmatning inom en cell.

Om du klickar under eller ovanför en kodcell eller en cell med annan information bildas en horisontell linje. Det är en cursor som visar var en ny cell läggs in om du trycker på en tangent (alfa-numerisk symbol) på tangentbordet. Den nyskapade cellen är by default en Input-cell som kan exekveras. Ofta har du behov av annan information, t.ex. text eller rubrik. Du kan då markera cellklammern och i menyn välja Format Style för att konvertera cellen till text- eller rubrik-stil. Rubrik-stilar har ofta grupperingsegenskaper, vilket gör att du kan öppna och stänga grupper med celler. Om du markerar en hel grupp med celler för exekvering kommer endast Input-cellerna att exekveras.

All syntax i SF1626_1_code.nb visas med enkla ASCII-tecken. Fördelen med detta är att koden är direkt avskrivningsbar. I denna fil (som kallas notebook) kommer syntaxen att ibland att vara tvådimensionell med specialtecken. Fördelen med detta är att uttrycken blir matematiskt lättolkade. T.ex.

ClearAll["`*"](* rensa egna symboler *)

f[x_,y_]:=(E^(-x y))((Sin[π(x+y)])/(x+y))

D[f[x,y],x]

Den nackdel som denna halvmatematiska syntax medför är att du inte direkt ser hur uttrycket ska matas in. Du kan emellertid lätt konvertera koden till ren ASCII genom att du markerar (klickar på) cellklammern  till höger om koden och sedan i menyn Cell välja Convert To InputForm (Windows snabbkommando Ctrl|⇧[I]).

Försök konvertera koden f[x_,y_]:=(e^(-x y))((Sin[π(x+y)])/(x+y))  ovan till ASCII. Resultatet bör bli

f[x_, y_] := Sin[Pi*(x + y)]/(x + y)/E^(x*y)

Som du säkert har lagt märke till inleds alla inbyggda symboler i Mathematica med en versal (upper case), t.ex. Sin och Pi. Använd därför inledande gemen (lower case) i egna symboler för att undvika konflikt.

Vidare används hakparenteser [] (Eng. square brackets) som funktionsparenteser. Det medför en klar skillnad mellan multiplikation och funktion, dvs.  mellan a(b+c) och f[x+y]. Observera att man ibland kan utelämna multiplikationstecknet, t.ex. a(b+c),  men att x y måste skrivas x*y eller x␣y, annars tolkas xy som en symbol.

Tecknet _ (Blank) har en speciell innebörd (godtyckligt uttryck) och måste undvikas i symbolnamn.

Listor, vektorer, matriser, tensorer etc. avgränsas med krullparenteser {} (Eng. curly brackets). Se länken Lists

Den normala halvmatematiska syntaxen kallas StandardForm och det finns även en helmatematisk form som kallas TraditionalForm.

TraditionalForm[f[x,y]]

Man kan även mata in koden tvådimensionellt, men som nybörjare är det lämpligast att hålla sig till ASCII. Här visas dock ett exempel. 2D-input  görs med Ctrl-koder och specialtecken matas in med Esc-sekvenser. Man kan även använda knappsatser i paletter (menyn Palettes). I Windows kan definitionen f[x_,y_]:=(e^(-x y))((Sin[π(x+y)])/(x+y)) ovan matas in med

f[x_,y_]:=eeCtrl|⇧|[^]-x␣yCtrl|[␣]Sin[p(x+y)]Ctrl|⇧|[/]x+y

där  betyder Esc och ␣ betyder ␣. Du kan läsa mer om inmatning här: Entering Two-Dimensional Input och Input and Output in Notebooks

2.2

b)

ClearAll["`*"](* rensa egna symboler *)

Double Struck letters kan inmatas med EscdsxEsc.

f[{x1_,x2_,x3_}]:=((((x1^2)+(x2^2)+(x3^2)))^(1/2))

𝕩={x1,x2,x3};

f[𝕩]

D[f[𝕩],x1]

Gradienten ∇f=((Subscript[f, (Subscript[x, 1])]^′)(𝕩),(Subscript[f, (Subscript[x, 2])]^′)(𝕣),(Subscript[f, (Subscript[x, 3])]^′)(𝕣)) kan enkelt beräknas med

D[f[𝕩],{𝕩}]

Symbolen nabla ∇ kan skrivas EscdelEsc.

2.11

Alternativ 1

ClearAll["`*"](* rensa egna symboler *)

f[x_,y_]:=(x^2)+4(y^2)

Tangentplanet blir:

tangetplan=z==f[1,1]+Derivative[1,0][f][1,1](x-1)+Derivative[0,1][f][1,1](y-1)

Simplify[tangetplan]

Anm: I endimensionella fallet kan f'(a) enkelt beräknas med f'[a]. För att beräkna ((∂f)/(∂x)) används normalt D[f[x,y],x], men här kan du inte (direkt) ange värden {x,y}={a,b}. Med syntaxen Derivative[1,0][f][a,b] blir detta möjligt. Se länken Derivative för mer information.

Alternativ 2

ClearAll["`*"](* rensa egna symboler *)

f[{x_,y_,z_}]:=z-(x^2)-4(y^2)
𝕩={x,y,z};𝕩0={1,1,5};

Symbolen nabla ∇ kan skrivas EscdelEsc. Gradienten ∇f=((Subscript[f, x]^′)(𝕩),(Subscript[f, y]^′)(𝕩),(Subscript[f, z]^′)(𝕩)) beräknas med

(∇f)[{x_,y_,z_}]=D[f[𝕩],{𝕩}]

Tangentplanet blir:

(∇f)[𝕩0].(𝕩-𝕩0)==0 // Simplify

2.13

ClearAll["`*"]

f[x_,y_]:=(E^((x^2) y))+x y

u[t_] = f[Cos[t],Sin[t]]

u'[t]

Resultatet kan förenklas med hjälp av paletten Algebraic Manipulation. Markera (t.ex.) ((Cos[t])^2)-((Sin[t])^2) med musen och klicka på knappen TrigReduce i paletten. Uttrycket förenklas då till Cos[2t]. Se även paletten Basic Math Assistant. Fler paletter finns i menyn under rubriken Palettes.

2.17

ClearAll["`*"]

f[x_,y_]:=(1/(Sqrt[x y]))g[(x/y)]

Expand[
x D[f[x,y],x]+y D[f[x,y],y]+f[x,y]
]

2.21

ClearAll["`*"]

DSolve[{
2D[f[x,y],x]+D[f[x,y],y]==0,
f[x,0]==Sin[x]
},f[x,y],{x,y}]