Mathematica

O matematiki, številih, množicah in računih...
Odgovori
Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Mathematica

Odgovor Napisal/-a Aniviller »

Saj se. To je obicajno delovanje. Ce hoces, da se ti ne priredi, moras posebej povedat, da naj ne izracuna (uporabis := namesto =).

Popotnik
Prispevkov: 532
Pridružen: 12.11.2008 18:35

Re: Mathematica

Odgovor Napisal/-a Popotnik »

Mja. Vse skupaj sem napisal kar v C-ju, je bilo enostavneje.

Naprosyn
Prispevkov: 7
Pridružen: 11.4.2009 21:44

Re: Mathematica

Odgovor Napisal/-a Naprosyn »

Živijo,

imam kratek seznam podatkov v obliki tabele, v Mathematici bi mu rad priredil neko optimalno krivuljo in iz nje potem izračunal določene vrednosti. Želel bi, da je krivulja čim bolj podobna grafu, ki ga zriše ListLinePlot, sam da je gladka. Poskušal sem z Interpolation in Fit. Interpolation sicer zriše neki podobnega, vendar ima vmes anomalije - vrednosti tudi naraščajo, čeprav morajo vseskozi padati. Pri Fit pa ne vem kakšno obliko funkcije bi moral nastaviti, da potem poišče ustrezne koeficiente.
Konkretno gre za ta seznam:
data = {{0, 1.77}, {25, 1.394}, {50, 1.314}, {100, 1.233}, {200,1.152}, {400, 1.071}, {800, 0.99}};

Krivuljo sem sicer moral tako in tako risati ročno, zanima pa me kako se to izvede z Mathematico. Pri 444.4 je po ročni metodi vrednost funkcije 1.055. Kako se temu približat ?

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

Re: Mathematica

Odgovor Napisal/-a Aniviller »

Uh... ja interpolacija gre cez vse tocke (povezava s crto je itak interpolacija prvega reda, lahko pa vleces potem cez tudi parabole in hujse stvari, kar pocne Interpolation ce mu ne reces drugace).
Problem je tezji kot mislis. Ce hoces potegnit gladko krivuljo, moras najti funkcijo, ki popisuje te podatke. Ta funkcija je ponavadi povezana s fiziko ki stoji za danimi podatki in ce hoces postavit korekten model, moras kar nekaj vedet o procesu. Lahko gres po drugi strani cisto na empiricen nacin in poskusas funkcije ki podobno izgledajo. V tem primeru moras imeti bogate izkusnje in zelo dobro intuicijo za funkcije.

V tem primeru imas sreco: ce skalo v x smeri das v logaritemsko, vidis da je razen prve tocke (ki v tem primeru ni smiselna ker je ln(0)=-neskoncno), lezijo tocke TOCNO na premici (kot da so bili podatki generirani s to funkcijo!). To pomeni da je
y=a*ln(x)+b.
fit ti da
a = -0.116858
b = 1.77115


Ce zaradi kakrsnegakoli razloga kdaj nimas nikakrsnih podatkov o funkciji in rocno izbiranje ne pride v postev (ce se mora to izvajat avtomatsko), potem obstajajo tudi bolj sofisticirani (in ne cisto objektivni in upraviceni) algoritmi ki ti potegnejo priblizno gladko krivuljo cez tocke. Se boljsi so inteligentni algoritmi ki delajo isto kot clovek (preucijo krivuljo in najdejo ustrezno funckijo s poskusanjem, genetskimi algoritmi, lepljenjem vec kosov itd...). Samo toliko da si predstavljas tezavnost zastavljenega vprasanja.
Priponke
tmp_nolog.png
tmp_nolog.png (3.43 KiB) Pogledano 4911 krat
tmp_log.png
tmp_log.png (3.63 KiB) Pogledano 4911 krat

Naprosyn
Prispevkov: 7
Pridružen: 11.4.2009 21:44

Re: Mathematica

Odgovor Napisal/-a Naprosyn »

Carska razlaga, najlepša hvala. Zdelo se mi je, da problem ni tako krotek, vendar mi je nekdo razlagal, da je stvar rešil kar z Excelom, meni v Open Officu to ni uspelo.
Zanima me še kako podaš vhodne podatke, da pri Fit ne dela problemov s tistim prvim parom vrednosti (0,1.77) za to funkcijo. Izračuna mi, če ne podam prvega para (to že razumem zakaj), vendar se potem vrednosti koeficientov malo razlikujejo od zgornjih.Sem brskal mal, pa nisem rano neki vešč Mathematice.

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

Re: Mathematica

Odgovor Napisal/-a Aniviller »

S prvo tocko ne bo nikoli uspelo (ker imas tam neskoncnost). Ce verjames da je prva tocka pravilna, potem ta funkcija pac ne bo cisto ustrezna na strogem robu.

Rezultati se lahko na kaksni decimalki razlikujejo (odvisno od tega koliksna natancnost je programu dovolj in se ustavi). Fit[] uporablja linearno regresijo in bo podala v nasem primeru cisto tocen rezultat. Jaz sem uporabil gnuplot, ki ima splosen nelinearen fit, ker je misljen za splosno rabo (ekvivalenten FindFit[] od mathematice) in ti algoritmi imajo notri test da se ustavijo ko so dovolj blizu - realni podatki so ponavadi itak malo raztreseni in zato nima smisla gnati postopka cisto do konca. Ce splotas in krivulja izgleda v redu, potem je prav. Jaz itak ne bi podal stvari vec kot na tri mesta natancno.

Rorschach
Prispevkov: 95
Pridružen: 2.6.2009 20:00

Re: Mathematica

Odgovor Napisal/-a Rorschach »

Rad bi izračunal lastne vrednosti in lastne vektorje za matriko:

Koda: Izberi vse

m = {{p, q, q}, {q, 0, p}, {q, p, p}}
pa dobim čuden rezultat:

Koda: Izberi vse

{Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 1], 
 Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 2], 
 Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 3]}
za vrednosti in:

Koda: Izberi vse

{{-(p/q) + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 1]^2/(
   q (p + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 1])), 
  Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 1]/(
  p + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 1]), 
  1}, {-(p/q) + 
   Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 2]^2/(
   q (p + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 2])), 
  Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 2]/(
  p + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 2]), 
  1}, {-(p/q) + 
   Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 3]^2/(
   q (p + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 3])), 
  Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 3]/(
  p + Root[p^3 - p q^2 - 2 q^2 #1 - 2 p #1^2 + #1^3 &, 3]), 1}}
za vektorje
zanima me kaj je narobe.
Uporabljam ukaz:

Koda: Izberi vse

Eigenvalues[m]
Eigenvectors[m]

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

Re: Mathematica

Odgovor Napisal/-a Aniviller »

Nic ni narobe. Resitve so izrazene kot resitve polinoma tretje stopnje - ta je sicer analiticno resljiv ampak imas tega ocitno ne gre mathematica vstavit (tudi ne bi bilo pretirano pregledno, resevanje gre cez kompleksna stevila). Ker nastopata p in q simbolicno je to najvec kar se da naredit. Za konkretne stevilke bi ti ze izracunalo, brez pa razpade na kup razlicnih resitev (ene so singularne, druge so degenerirane,...).

Rorschach
Prispevkov: 95
Pridružen: 2.6.2009 20:00

Re: Mathematica

Odgovor Napisal/-a Rorschach »

Tudi tako sem že poskušal, pa sem dobil isto:

Koda: Izberi vse

p = 1;
q = 5;
m = {{p, q, q}, {q, 0, p}, {q, p, p}}
Eigenvalues[m]
Eigenvectors[m]

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

Re: Mathematica

Odgovor Napisal/-a Aniviller »

Ja ocitno ni taka enacba da bi se izrazila na elementaren nacin. Daj N okrog pa bo dalo numericno resitev.

Rorschach
Prispevkov: 95
Pridružen: 2.6.2009 20:00

Re: Mathematica

Odgovor Napisal/-a Rorschach »

hvala

comandos
Prispevkov: 21
Pridružen: 3.1.2010 14:04

Re: Mathematica

Odgovor Napisal/-a comandos »

Pozdravljeni vsi no ko smo ze pri Mathematici bi pa še jst neki prašu a mi lahko kdo pove zakaj mi noče narisat obeh grafov skup oz kaj delam narobe?
Pa še niki bi prašal zakaj mi ko pisem osi mi noce napisat velikega E ampak vstraja na malem

Koda: Izberi vse

e0 = 8.854*10^(-12); q = 20*10^(-6);
Plot[q/(2 Pi*e0*r), (q/(2 Pi*e0*r^2)), {r, 1, 100}]

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

Re: Mathematica

Odgovor Napisal/-a shrink »

Koda: Izberi vse

e0 = 8.854*10^(-12); q = 20*10^(-6);
Plot[{q/(2 Pi*e0*r), q/(2 Pi*e0*r^2)}, {r, 1, 100}, AxesLabel -> {"r", "E"}]]
Poglej malo primere v Help-u.

comandos
Prispevkov: 21
Pridružen: 3.1.2010 14:04

Re: Mathematica

Odgovor Napisal/-a comandos »

XD smeh

Sej sm prej pogledu sam nism vedu da je AxesLabel tolk pomenbna funkcija vsen thx.

Rorschach
Prispevkov: 95
Pridružen: 2.6.2009 20:00

Re: Mathematica

Odgovor Napisal/-a Rorschach »

Zanima me če obstaja kakšen način da bi mathemathica takoj ob rešitvi sistema enačb rešitve shranila tako da bi jih v nadaljnem postopku lahko uporabljal.

Pri rešitvi sistema enačb dobim:

Koda: Izberi vse

Solve[{a x + y == 7, b x - y == 1}, {x, y}]
{{x -> 8/(a + b), y -> -((a - 7 b)/(a + b))}}
Pri tem se x-u in y-u ne dodeli vrednost na desni. Se bi dalo?

Odgovori