Tehtävä 1

ratk = Solve[z^7 + 1 == 0, z]

summamuoto = ComplexExpand[z /. ratk]

N[summamuoto]

Juurten etäisyys origosta voidaan nähdä suoraan kohdista ratk ja summamuoto. Kaikki juuret ovat siis etäisyydellä 1 origosta. Kompleksilukujen itseisarvo eli etäisyys origosta saadaan myös komennolla Abs.

Abs[z /. ratk]

Abs[summamuoto] // Simplify

Juurten napakulmat nähdään suoraan kohdasta summamuoto. Ne voidaan myös laskea komennolla Arg.

Arg[z /. ratk]

Seuraavassa on vielä piirretty juuret kompleksitasoon. Ensin on muodostettu juuria vastaavat kompleksitason pisteet ja sitten ne on piirretty ListPlot-komennolla, jossa on optioksi annettu pisteen koko.

pisteet = {Re[summamuoto],  Im[summamuoto]} // Transpose

ListPlot[pisteet, AspectRatio -> Automatic,  
      PlotStyle ->  PointSize[0.04]]

Ratkaisut sijaitsevat tasavälisesti ympyrän kehällä.

Tehtävä 2

ratk = 
      Solve[z^3 - I*z^2 + 2*I*z + (8 - 4*I) == 0, z]

juuret  =  z  /.  ratk

Tehtävä 3

yhtalo1 = 2*x^2 + 3*y^2 - x*y == 10

yhtalo2 = a*x - y == 5

Solve[{yhtalo1, yhtalo2}, {x, y}]

Yhtälöparilla on reaalisia ratkaisuja, kun juurrettava 24 (a^2) - 8 a - 99 ≥ 0. Lisäksi nimittäjässä oleva 3 (a^2) - a + 2 ei saa olla nolla.

Needs["Algebra`InequalitySolve`"]

InequalitySolve[-99 - 8*a + 24*a^2 ≥ 0, a]

Solve[2 - a + 3*a^2 == 0, a]

Ratkaisussa oleva nimittäjä ei siis ole nolla millään reaaliluvulla a. Siten ainoa ehto sille, että ratkaisut ovat reaalisia, on a ≤ (1/12) (2 - (Sqrt[598])) tai a ≥ (1/12) (2 + (Sqrt[598])).

Tehtävä 4

ympyra1 = x^2 + y^2 - 4*x - 6*y + 10 == 0

ympyra2 = x^2 + y^2 + 2*x - 2*y - 3 == 0

Lasketaan ympyröiden leikkauspisteet ja sijoitetaan ne muuttujiin lp1 ja lp2.

ratk = Solve[{ympyra1, ympyra2}, {x, y}]

{lp1, lp2} = {x, y} /. ratk

Leikkauspisteiden etäisyydet origosta ovat etaisyys1 ja etaisyys2.

etaisyys1 = Sqrt[lp1 . lp1] // Simplify

etaisyys1 // N

etaisyys2 = Sqrt[lp2 . lp2] // Simplify

etaisyys2 // N

Leikkauspisteiden välinen vektori on lp1lp2 ja leikkauspisteiden välinen etäisyys valinenetaisyys.

lp1lp2 = lp2 - lp1 // Simplify

valinenetaisyys = Sqrt[lp1lp2 . lp1lp2]

valinenetaisyys // N

Seuraavassa on vielä piirretty ympyrät ImplicitPlot-komennolla.

Needs["Graphics`ImplicitPlot`"]

ImplicitPlot[{ympyra1, ympyra2}, {x, -4, 5}, {y, -2, 
        6}]

lp1 // N

lp2 // N

Tehtävä 5

Funktio pkert muodostaa vektorin, jossa on painokertoimet, kun osavälejä on n kpl.

pkert[n_] := 
      Flatten[{1,  Table[2, {i,  1,  n - 1}],  1}]

f[x_] := Exp[-x^2]

Funktio fktarvot laskee funktion f arvot välillä 0...1, kun osavälejä on n kpl.

fktarvot[n_] := Table[f[x], {x, 0, 1, 1/n}]

Funktio kerroin on puolisuunnikassäännössä oleva kerroin ((b - a)/(2 n)). Tässä tehtävässä b = 1 ja a = 0.

kerroin[n_] := 1/(2*n)

Funktio puolisuunnikasmenet laskee funktion f määrätyn integraalin välillä 0...1 käyttäen n osaväliä.

puolisuunnikasmenet[n_] := kerroin[n]*pkert[n] . fktarvot[n]

Esimerkiksi neljällä osavälillä saadaan määrätylle integraalille arvio:

puolisuunnikasmenet[4] // N

Vastaavalla tavalla saadaan arviot myös muille n:n arvoille. Nämä voidaan laskea myös yhdellä komennolla:

arviot = Table[puolisuunnikasmenet[n], {n, 4, 20, 4}] // N

Verrataan saatuja arvoja vielä NIntegrate-komennolla saatuun arvoon.

numintegr = NIntegrate[f[x], {x, 0, 1}]

numintegr - arviot

Tehtävä 6

r = 6370

d = 
      r*ArcCos[Sin[theta1 Degree]*Sin[theta2 Degree] + 
            Cos[theta1 Degree]*Cos[theta2 Degree]*
              Cos[(fii1 - fii2) Degree]]

a) Helsingin ja Tokion välinen etäisyys

levH = 60 + 8/60

pitH = 25

levT = 35 + 40/60

pitT = 139 + 45/60

d /. {theta1 -> levH, theta2 -> levT,  fii1 -> pitH,  
          fii2 -> pitT}  // N

b) Reykjavikin ja Sydneyn välinen etäisyys

levR = 64 + 9/60

pitR = -(21 + 58/60)

levS = -(33 + 55/60)

pitS = 151 + 10/60

d /. {theta1 -> levR, theta2 -> levS,  fii1 -> pitR,  
          fii2 -> pitS} // N

Alapuolella tehtävä on ratkaistu myös muodostamalla funktio, johon sopivat maantieteelliset koordinaatit sijoitetaan.

etaisyys[theta1_,  fii1_, theta2_, fii2_] := 
      r*ArcCos[Sin[theta1 Degree]*Sin[theta2 Degree] + 
            Cos[theta1 Degree]*Cos[theta2 Degree]*
              Cos[(fii1 - fii2) Degree]]

etaisyys[levH, pitH, levT, pitT] // N

etaisyys[levR, pitR, levS, pitS] // N

Tehtävä 7

yhtalo = 
      x^4 + y^4 + z^4 + 2*x^2*y^2 + 2*y^2*z^2 + 2*z^2*x^2 - 10*x^2 - 10*y^2 + 
          6*z^2 + 9 == 0

Needs["Graphics`ImplicitPlot`"]

leikkaus1 = yhtalo /. z -> 0

ImplicitPlot[leikkaus1, {y, -4, 4}]

leikkaus2 = yhtalo /. z -> 0.9

ImplicitPlot[leikkaus2, {y, -4, 4}]

Kun torusta leikataan tasoilla z = vakio,  missä  - 1 < z < 1, ovat leikkauskäyrät sisäkkäisiä origokeskisiä ympyröitä. Kun |z| = 1, niin leikkauskäyränä on 2-säteinen origokeskinen ympyrä. (Sitä Mathematica ei kuitenkaan suostunut piirtämään.)

leikkaus3 = yhtalo /. x -> 0

ImplicitPlot[leikkaus3, {y, -4, 4}]

leikkaus4 = yhtalo /. x -> 0.9

ImplicitPlot[leikkaus4, {y, -4, 4}, 
      AspectRatio -> Automatic]

leikkaus5 = yhtalo /. x -> 1

ImplicitPlot[leikkaus5, {y, -4, 4}, 
      AspectRatio -> Automatic]

leikkaus6 = yhtalo /. x -> 1.3

ImplicitPlot[leikkaus6, {y, -4, 4},  
      AspectRatio -> Automatic]

leikkaus7 = yhtalo /. x -> 2

ImplicitPlot[leikkaus7, {y, -4, 4},  
      AspectRatio -> Automatic]

leikkaus8 = yhtalo /. x -> 2.6

ImplicitPlot[leikkaus8, {y, -4, 4},  
      AspectRatio -> Automatic]

Kun torusta leikataan tasoilla x = vakio, missä -3 < x < 3, niin syntyy kuudenlaisia leikkauskuvioita. Kun x = 0, syntyy kaksi erillistä ympyrää. Kun 0 < |x| < 
        1, syntyy leikkaus4-tyyppisiä kuvioita. Kun |x| = 1, syntyy kuvio leikkaus5. Kun 1 < |x| < 
        2, syntyy leikkaus6-tyyppinen kuvio. Kun |x| = 2 syntyy leikkaus7-tyyppinen kuvio. Kun 2 < |x| < 
        3 syntyy leikkaus8-tyyppisiä kuvioita. Kun |x| = 3, syntyy pelkkä piste.

Tehtävä 8

yhtalo = x^4 - a*x^2 + 2*x + 1 == 0

Seuraavat tulostukset ovat hieman pitkiä; tämän johdosta puolipisteet syötteiden perään.

ratk = Solve[yhtalo, x];

Length[ratk]

neliot = x^2 /. ratk;

neliosumma = Apply[Plus,  neliot] // Simplify

Solve[neliosumma == 1, a]

Vakion a pitää siis olla (1/2).

Tehtävä 9

Kyseessä on siis geometrinen sarja, joka suppenee, kun \(TraditionalForm\`|\(2\ x - 1\)\/\(3\ x + 1\)| < 1\).

InequalitySolve[Abs[(2*x - 1)/(3*x + 1)] < 1, x]

Määritellään summafunktio ja piirretään sen kuvaaja.

summa[x_  /;  x < -2 || x > 0] = 
      Sum[((2*x - 1)/(3*x + 1))^k, {k, 0, Infinity}]

Plot[summa[x], {x, -4, 2}, 
      PlotRange -> {-1, 15}]

Tehtävä 10

Toisen asteen yhtälön ratkaisukaava:

ratk = Solve[a*x^2 + b*x + c == 0, x]

Solve[15*x^2 + 2*x + 12 == 0, x] // Simplify

ratk /. {a -> 15, b -> 2, c -> 12} // 
      Simplify

Molemmilla tavoilla saadaan samat ratkaisut.

Kolmannen asteen yhtälön ratkaisukaava:

Remove[d]

ratk = Solve[a*x^3 + b*x^2 + c*x + d == 0, x]

sijkaavaan = 
      x /. (ratk /. {a -> 1, b -> 0, c -> -2, 
                d -> -5}) // Simplify

suoraratk = 
      x /. Solve[x^3 - 2*x - 5 == 0, x] // Simplify

sijkaavaan == suoraratk // FullSimplify

Molemmilla tavoilla saadaan samat ratkaisut.