Mathematica
Mathematica
Kako se v Mathematici množi matrike?
Recimo matriki 3x3 in 1x3?
Recimo matriki 3x3 in 1x3?
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:
No, ce imas vektor za vrstico in ne za stolpec lahko uporabis tudi enojne oklepaje (v tem primeru moras seveda mnoziti B.A
Primer:
Koda: Izberi vse
A = {{3, 3, 2}, {1, 2, 3}, {5, 6, 4}};
B = {{5}, {2}, {4}};
A.B
-----------------------------------------
{{29}, {21}, {53}}
Koda: Izberi vse
Plot[f(x), {x, -5, +5}, {y, -5, +5}]
Kako naj npr. izrišem takle graf?
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}]
V Mathematici narišem tale graf:
Š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.
Koda: Izberi vse
\!\(Plot[\[ExponentialE]\^\(1\/\(2 x\)\) - \@\[ExponentialE]\^\(1\/x\), {x, \
\(-0.001\), 0.001}]\)
\(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.
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.
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.
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.
p.s. tole je grdo, raje uporabi :el: za element (: za escape)
Koda: Izberi vse
\FullSimplify[Exp[1/(2x)]-Sqrt[Exp[1/x]], {Element[x,Reals], x != 0}]
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.
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.
Za kombiniranje več grafov na isti sliki, lahko uporabiš funkcijo "Show", npr.:
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".
Koda: Izberi vse
f1 = Plot[Sin[x], {x, -10, 0}]
f2 = Plot[Cos[x], {x, 0, 10}]
Show[f1, f2, PlotRange -> Automatic]
Za več informacij si poglej v helpu tutorial "Redrawing and Combining Plots".
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.
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:
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:
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
Koda: Izberi vse
f/: g[f]=h
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]]
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]