Mathematica

O matematiki, številih, množicah in računih...
Odgovori
Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Mathematica

Odgovor Napisal/-a Mafijec »

Kako se v Mathematici množi matrike?

Recimo matriki 3x3 in 1x3?

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Odgovor Napisal/-a Aniviller »

Kot prvo morajo biti oboje matrike (torej dvojni zaviti oklepaji). Za mnozenje se uporabi produkt ki se ga oznaci s piko ali z Dot[A,B];
Primer:

Koda: Izberi vse

A = {{3, 3, 2}, {1, 2, 3}, {5, 6, 4}};
B = {{5}, {2}, {4}};
A.B
-----------------------------------------
{{29}, {21}, {53}}
No, ce imas vektor za vrstico in ne za stolpec lahko uporabis tudi enojne oklepaje (v tem primeru moras seveda mnoziti B.A 8)

Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Odgovor Napisal/-a Mafijec »

Koda: Izberi vse

Plot[f(x), {x, -5, +5}, {y, -5, +5}]
f(x) pa je: x^2 - x*y + y^2 = 0

Kako naj npr. izrišem takle graf?

Uporabniški avatar
shrink
Prispevkov: 14575
Pridružen: 4.9.2004 18:45

Odgovor Napisal/-a shrink »

Mafijec napisal/-a:
f(x) pa je: x^2 - x*y + y^2 = 0

Kako naj npr. izrišem takle graf?

Koda: Izberi vse

<< Graphics`ImplicitPlot`
ImplicitPlot[x^2 - x*y + y^2 == 5, {x, -10, 10}]

Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Odgovor Napisal/-a Mafijec »

Ok, hvala.

Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Odgovor Napisal/-a Mafijec »

V Mathematici narišem tale graf:

Koda: Izberi vse

\!\(Plot[\[ExponentialE]\^\(1\/\(2  x\)\) - \@\[ExponentialE]\^\(1\/x\), {x, \
\(-0.001\), 0.001}]\)
Še v TeXu enačba za graf:

\(e^{1\over 2x} - \sqrt{e^{1 \over x}}\)

e je naravno število.

Graf je nekam čuden, če narišem \({e^{1\over 2x}} \over {\sqrt{e^{1 \over x}}}\) sploh ne vidim ravne črte pri ena.

Uporabniški avatar
shrink
Prispevkov: 14575
Pridružen: 4.9.2004 18:45

Odgovor Napisal/-a shrink »

Pa ni ta prva funkcija očitno \(f(x)=0\)?

Mathematica ni tako "pametna", da bi to sama ugotovila, zato računa vrednosti za dano funkcijo v določenih točkah (npr. z vrsto, ki lahko v določenih točkah ne konvergira), kar ima za posledico čudne upodobitve.

Tista druga funkcija je očitno \(f(x)=1\), vendar Mathematica tudi v tem primeru tega ni zmožna ugotoviti, spet računa vrednosti za dano funkcijo v določenih točkah (npr. z vrsto, ki pa spet lahko v določenih točkah ne konvergira) in na ta način dobi krivuljo (recimo z interpolacijo), ki nikakor ne izgleda premica.

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Odgovor Napisal/-a Aniviller »

Za majhne x je izraz v eksponentu zelo velik. Ker Mathematica za grafe uporablja MachinePrecision, ti lahko javi le overflow. Poenostaviti pa noce ker ne ve kaksen je lahko x. Ce pa Mathematici zagotovis da je realen in razlicen od nic potem pa lepo razresi izraz. Ce Mathematica necesa noce poenostavit se vedno najprej vprasaj ce vedno velja. Korena iz kvadrata stevila naprimer ne bo spremenila v x ce ne poves da je x vecji od 0 in realen.

Koda: Izberi vse

\FullSimplify[Exp[1/(2x)]-Sqrt[Exp[1/x]], {Element[x,Reals], x != 0}]
p.s. tole je grdo, raje uporabi :el: za element (: za escape)

Uporabniški avatar
shrink
Prispevkov: 14575
Pridružen: 4.9.2004 18:45

Odgovor Napisal/-a shrink »

Po moje je poglavitni problem sledeč:

Programi, kot so Mathematica in podobni, so pametni toliko, kot je pameten njihov uporabnik. Če programu ne dopoveš, kaj mora narediti, potem bo delal po default-u. Če Mathematici ne rečeš (z ukazom FullSimplify ali kako drugače), da naj izraz poenostavi, potem bo izraz v večini primerov jemal v dani obliki. Tudi pri risanju grafov.

Pri izrisu grafa funkcije \(\frac{e^{\frac{1}{2x}}}{\sqrt{e^{\frac{1}{x}}}}\) v dani obliki (brez poenostavljanja) se npr. lepo vidi, kje je težava: Na določenih intervalih graf odstopa od 1 (s špicami), kar kaže na probleme s konvergenco, iz kateregakoli vzroka že.

Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Odgovor Napisal/-a Mafijec »

Kak se dva grafa nariše na eni sliki? Imam \(f_{1}\) na intervalu \(I_{1}\) in \(f_{2}\) na \(I_{2}\).

In potlej imam \(Plot[f_{1}, I_{1}]\) in \(Plot[f_{2}, I_{2}]\). Torej kak naj naredim, da bom imel le en plot?

Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Odgovor Napisal/-a Mafijec »

Že vem :).

g1 = Plot[blabla];
g2 = Plot[blabla];

Show[g1, g2, PlotRange -> Automatic]

Uporabniški avatar
shrink
Prispevkov: 14575
Pridružen: 4.9.2004 18:45

Odgovor Napisal/-a shrink »

Za kombiniranje več grafov na isti sliki, lahko uporabiš funkcijo "Show", npr.:

Koda: Izberi vse

f1 = Plot[Sin[x], {x, -10, 0}]
f2 = Plot[Cos[x], {x, 0, 10}]
Show[f1, f2, PlotRange -> Automatic]
Opomba: V funkciji "Show" je pametno definirati na novo lastnosti prikaza (v danem primeru: "PlotRange"), saj v nasprotnem predpostavi lastnosti prvega grafa (v danem primeru: "f1"), kar v primeru risanja funkcij na različnih intervalih pomeni to, da je skupen graf narisan na intervalu prvega grafa.

Za več informacij si poglej v helpu tutorial "Redrawing and Combining Plots".

Uporabniški avatar
shrink
Prispevkov: 14575
Pridružen: 4.9.2004 18:45

Odgovor Napisal/-a shrink »

Vidim, da si že sam ugotovil. 8)

Mafijec
Prispevkov: 472
Pridružen: 12.12.2005 21:36

Odgovor Napisal/-a Mafijec »

Hvala :D.

Še to: Se da v Mathematici računati z napakami?

Sedaj napake pišem v posebne spremenljivke, prav tako enačbe za računanje napak. In vse je treba posebej odvajati.

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Odgovor Napisal/-a Aniviller »

Lepa stran Mathematice je, da se da vse definirat. Ce hoces racunat z napakami, si samo izmislis strukturo, ki drzi informacijo o podatku in napaki hkrati, in definiras pravila za racunanje z njimi.

Koda: Izberi vse

f/: g[f]=h
Ta koda definira, kaj funkcija g naredi, ce ji das strukturo f kot argument. Perfektno za ta namen. Za racunanje z napakami odvisnih spremenljivk (tako da se napake sestevajo linearno), npr. zadostuje tole:

Koda: Izberi vse

Err /: Err[x_, dx_]Err[y_, dy_] = Err[x y, Abs[x dy] + Abs[y dx]]
Err /: Err[x_, dx_] + Err[y_, dy_] = Err[x + y, Abs[dx] + Abs[dy]]
Err /: Err[x_, dx_]^Err[y_, dy_] = Err[x^y, x^y(Abs[dx y/x] + Abs[dy Log[
  x]])]
Err /: f_[Err[x_, dx_]] = Err[f[x], Abs[f'[x]dx]]

Err /: Err[x_, dx_]a_ = Err[a x, a dx]
Err /: Err[x_, dx_] + a_ = Err[x + a, dx]
Err /: Err[x_, dx_]^a_ = Err[x^a, Abs[a x^(a - 1)dx]]
Err /: a^Err[x_, dx_] = Err[a^x, Abs[a^x Log[a]dx]]
Err[5,0.1] npr. predstavlja stevilo 5 z absolutno napako 0.1 (izbira imena strukture je seveda poljubna). Zgoraj sem definiral, kaj se zgodi pri mnozenju, sestevanju ali potenciranju, pa se za splosno funkcijo. Zadnji stirje samo definirajo, kaj se dogaja pri mnozenju s cistimi stevili. Odstevanje in deljenje ni potrebno, ker Mathematica uporabi mnozenje in sestevanje. Absolutne vrednosti so bistvene, ker gre za napake. Zdaj samo racunas z Err-i namesto z navadnimi stevilkami. Primer uporabe:

Koda: Izberi vse

Sin[Err[0.4, 0.2]]^Err[2, 0.01] + 2Err[3, 0.4]Err[6, 0]
Mathematica vrne:
Err[36.1516, 4.9449]
Kot vidis si lahko definiras cisto svoja ''stevila'' in novo matematiko nad njimi. Zdaj vsakic na zacetku definiras zgornje zadeve in brezskrbno racunas z napakami. Edino zapis je malce okoren, kaj hocemo :?

Odgovori