Mathematica
Re: Mathematica
Saj se. To je obicajno delovanje. Ce hoces, da se ti ne priredi, moras posebej povedat, da naj ne izracuna (uporabis := namesto =).
Re: Mathematica
Mja. Vse skupaj sem napisal kar v C-ju, je bilo enostavneje.
Re: Mathematica
Ž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 ?
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 ?
Re: Mathematica
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.
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 (3.43 KiB) Pogledano 4911 krat
-
- tmp_log.png (3.63 KiB) Pogledano 4911 krat
Re: Mathematica
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.
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.
Re: Mathematica
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.
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.
Re: Mathematica
Rad bi izračunal lastne vrednosti in lastne vektorje za matriko:
pa dobim čuden rezultat:
za vrednosti in:
za vektorje
zanima me kaj je narobe.
Uporabljam ukaz:
Koda: Izberi vse
m = {{p, q, q}, {q, 0, p}, {q, p, p}}
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]}
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}}
zanima me kaj je narobe.
Uporabljam ukaz:
Koda: Izberi vse
Eigenvalues[m]
Eigenvectors[m]
Re: Mathematica
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,...).
Re: Mathematica
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]
Re: Mathematica
Ja ocitno ni taka enacba da bi se izrazila na elementaren nacin. Daj N okrog pa bo dalo numericno resitev.
Re: Mathematica
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
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}]
Re: Mathematica
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"}]]
Re: Mathematica
XD smeh
Sej sm prej pogledu sam nism vedu da je AxesLabel tolk pomenbna funkcija vsen thx.
Sej sm prej pogledu sam nism vedu da je AxesLabel tolk pomenbna funkcija vsen thx.
Re: Mathematica
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:
Pri tem se x-u in y-u ne dodeli vrednost na desni. Se bi dalo?
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))}}