Portál AbcLinuxu, 25. května 2024 08:37


Dotaz: Grafy v Maximě

otula avatar 14.10.2023 19:50 otula | skóre: 45 | blog: otakar | Adamov
Grafy v Maximě
Přečteno: 648×
Odpovědět | Admin
Ahoj, chtěl bych se zeptat, zda mi někdo poradí s pár začátečnickými otázkami v Maximě. Mohli tomu dát nějaký jiný název, s názvem Maxima mi vyhledávání vyhodí milion irelevantních odkazů...
  1. Nepodařilo se mi zjistit, jak najít maximum/minimum funkce, ideálně ho zobrazit přímo v 2D/3D grafu.
  2. Dá se nějak v grafu označit průsečík či třeba dotykový bod tečné roviny?
  3. Lze pomocí draw3d vykreslovat v polárních souřadnicích? Pomocí plot3d to jde hezky pomocí [transform_xy,polar_to_xy], ale nepodařilo se mi najít žádný způsob, jak to dělat pomocí draw3d.
  4. Jak se dají ovlivňovat osy? Myslím například, když budu mít paraboloid x^2+y^2 a chci mít osu "z" v jeho středu, zda to lze nějak nastavit...
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.10.2023 02:47 Olaf
Rozbalit Rozbalit vše Re: Grafy v Maximě
Odpovědět | | Sbalit | Link | Blokovat | Admin
Stačí hledat pod heslem wxmaxima.
15.10.2023 02:59 Olaf
Rozbalit Rozbalit vše Re: Grafy v Maximě
Jinak tedy: Proč nepoužít SageMath / CoCalc? Proč dnes Maxima? Jako i SageMath používá pro mnohé samotnou Maximu, ale je to zabalené do Pythonu a celé je to příjemnější.
otula avatar 15.10.2023 20:02 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Grafy v Maximě
Protože jsem Maximu zkusil nainstalovat, je více-méně intuitivní a snad by měla pro mé potřeby stačit, pokud nenarazím na nějaký zásadní problém.
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
otula avatar 15.10.2023 19:54 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Grafy v Maximě
Díky za odkaz. Lokální extrémy jsem tam našel, že si je musím sám spočítat pomocí derivace, ale například ty polární souřadnice jsem nenašel. Ale připadá mi zvláštní, že by to nemělo jít, protože je to vcelku základní věc.
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
16.10.2023 23:00 Olaf
Rozbalit Rozbalit vše Re: Grafy v Maximě
Tady je docela obsáhlý přehled grafů v Maximě, sférické souřadnice str. 21. Já s ní nedělal už nějakých... no ani nevím, kolik je to let, ale je to hodně dávno. Takže fakt se poohlédnout po Pythonu/SageMath/CoCalc či Julii. Třeba.
16.10.2023 23:02 Olaf
Rozbalit Rozbalit vše Re: Grafy v Maximě
Já poslal spíše věci k matplotlib, tady je SageMath přístup.
otula avatar 26.10.2023 11:28 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Grafy v Maximě
Přílohy:
Se zpožděním mockrát díky. Chápu, že SageMath je pokročilejší software, ale mně by ta Maxima vcelku stačila, když už jsem se ji naučil trochu používat. Má oproti těm ostatním jednodušší a intuitivnější syntaxi a já do budoucna stejně nebudu potřebovat tvořit nádherné grafy nebo dělat výpočty, které by Maxima nezvládla.

Akorát mě teda zarazilo, že se na ty grafy nedá úplně spolehnout (a pokud SageMath Maximu využívá, bude mít zřejmě stejný problém). Když si nadefinuji fci, spočítám pomocí derivace extrémy a nechám vykreslit graf, tak to občas škaredě nesedí. Schválně malou ukázku hodím do příloh. Stejná funkce, dvojka je přiblížená pomocí omezení rozsahu...
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
otula avatar 26.10.2023 11:41 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Grafy v Maximě
Než si to tady smažu, tak raději přihodím i ten kód, který vygeneroval ten graf:
f(x):=(x+3)^3-(x+17)^2-x+5;

derivace_f: diff(f(x),x);

extremy: solve(derivace_f=0);

draw2d(explicit(f(x),x,-10,10),
yrange = [-300,-100],
color = red,
line_type = dots,
implicit(x=extremy[1],x,-10,10,y,-500,1500),
implicit(x=extremy[2],x,-10,10,y,-500,1500),
color = green,
implicit(y=rhs(f(extremy[1])),x,-10,10,y,-500,1500),
implicit(y=rhs(f(extremy[2])),x,-10,10,y,-500,1500)
)
PS: mimochodem, nepodařilo se mi přijít na to, jak vyřešit, abych hodnoty toho seznamu extremy nemusel vykreslovat ručně jeden po druhém. Celý seznam se tomu x předat nedá a ani jsem nenašel způsob, jak třeba pomocí cyklu for procházet položky seznamu, jak to funguje běžně v BASHi či Pythonu.
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
30.10.2023 23:04 Olaf
Rozbalit Rozbalit vše Re: Grafy v Maximě
Tak já jsem si hodil wxmaximu do virtuálu -- výpočty probíhají korektně. Ten nesoulad s protnutím grafů konstantních hodnot a lokálních extrémů zkoumané funkce je dán tím, že máte pokaždé jinak definované intervaly hodnot závisle proměnné: v případě f(x) je H = [-300, -100], u stacionárních bodů ale [-500, 1500]. Čili ta osa y se asi překreslí.

Seznam bodů si vytvoříte třeba jako
f(x):= (x+3)^3-(x+17)^2-x+5;
stps: solve(diff(f(x), x), x);
local_extrema: makelist(rhs(f(stps[i])), i, 1, length(stps));
Formát seznamu si upravte dle potřeby.
otula avatar 9.11.2023 17:11 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Grafy v Maximě
Děkuji, zkusil jsem ty hodnoty srovnat, ale stejně je to pořád mimo, i když méně. Ale bez ohledu na rozsah se to srovná, pokud místo implicitního vyjádření funkce použiju explicitní. Tam bude asi zakopaný chcíplý pes...

S tím seznamem jsem to myslel tak, že nevím, jak udělat, abych vykreslil všechny položky seznamu. Takže když mi vypadne třeba 5 hodnot extrémů, tak musím pětkrát vypsat vykreslení funkce pro každou jednu položku. Potřeboval bych ten seznam nějak předat. Něco na způsob
for extrem in seznam_extremu:
  draw(y=extrem)
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.
31.10.2023 16:55 Olaf
Rozbalit Rozbalit vše Re: Grafy v Maximě
Příloha:
Pro zajímavost ještě uvedu řešení v Pythonu pomocí knihovny Sympy (SageMath je obrovský systém, Sympy je fakt malinký balíček).
from sympy import Symbol, diff, solveset, S
from sympy.plotting import plot

x = Symbol('x')
f = (x+3)**3-(x+17)**2-x+5

# Hledám stacionární body (v oboru reálných čísel) včetně hodnot
sp_x = list(solveset(diff(f, x), domain=S.Reals)) # převádím rovnou na seznam
sp_y = [f.subs(x, spx) for spx in sp_x] # příslušné hodnoty ve stacionárních bodech

# Graf funkce včetně vykreslení lokálních extrémů
# Pozn.: Více křivek se vykresluje prostým výpisem fcí, popř. 
# konstantních hodnot. Protože hodnoty máme výše v seznamu, 
# je potřeba je rozbalit, což se udělá jako *list, u nás *sp_y.
f_plot = plot(f, *sp_y, (x, -10, 5), size=(12, 8), markers=[{'args': [sp_x, sp_y, 'ro']}])
Výsledek je v příloze.
otula avatar 9.11.2023 17:12 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Grafy v Maximě
To je pěkné :)
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.