MATLAB - unos podataka u postojeći program

poruka: 21
|
čitano: 5.969
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Pozdrav svima!

 

Ovo je moj prvi post i vezan je uz programiranje u Matlabu. Naime, prošao sam par tutorijala, ali nisu mi bili od velike pomoći...

Dakle, imam postojeći set podataka (preko 100 000 zapisa u 27 stupaca) u tekstualnoj datoteci koje moram unijeti u Matlab okolinu. To sam recimo napravio, ali ne znam kako bih mogao iz tog seta izdvojiti npr. tri stupca i kreirati matricu od njih. Zasad mi uspijeva samo napraviti zasebni stupac kao vektor.

Drugo, da li netko zna kako bih u postojeći program (evo ga: http://wiki.gis.com/wiki/index.php/Geodetic_system#Step_1:_Convert_WGS-84_to_ECEF) mogao unijeti te svoje podatke tako da se obavi računanje za svih 100 000 zapisa? I da se potom rezultat kreira kao nova matrica?

 

Unaprijed se zahvaljujem svima koji budu imali volje pokušati mi pomoći!

 

LP, Joke_Car

how you doin'?
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Pogledaj da li ti koristi funkcija dlmread. Ona čita tekstualnu datoteku i to što pročita spremi u matricu. Ako imaš matricu A, onda ćeš njena prva 3 stupca dobiti sa A(:,1:3)

A ovaj postojeći program spremiš kao .m file i onda ga zoveš za svoje podatke, i to se da napravit. U glavnom prozoru ili u svojem .m fileu napišeš

[X,Y,Z] = llh2xyz(lat,long, h)
s time da mu umjesto lat,long, h staviš neke podatke iz matrice (npr A(1,1), A(1,2), A(1,3) ili kaj ti je već u toj matrici). To možeš ponavljati i u petlji, pa kreirati novu matricu B ovako:

B=zeros(max(size(A)),3);
for i=1:max(size(A))
[B(i,1),B(i,2),B(i,3)] = llh2xyz(A(1,1), A(1,2), A(1,3));
end

Uvijek je dobro alocirati memorijeu prije, može se dosta ubrzati izvođenje programa (zato sam stavio ovo sa zeros)

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Luuka hvala ti puno!

 

Ovo sa dobivanjem stupaca sam se naknadno sjetio, ali hvala svejedno na podsjećanju. :) Bio sam čačkao po Matlabu prije godinu dana ali izgleda da mi je sve isparilo...

 

Hvala za ovo sa alokacijom. Daj mi molim te samo reci da li upotreba max(size(A)) u for petlji znači da će upotrijebiti sve zapise koje imam, budući da mi je onda početna matrica dimenzija cca 100 000 X 3?

how you doin'?
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program
Joke_Car kaže...

Daj mi molim te samo reci da li upotreba max(size(A)) u for petlji znači da će upotrijebiti sve zapise koje imam, budući da mi je onda početna matrica dimenzija cca 100 000 X 3?

max(size(A)) će u ovom slučaju biti 100 000 pa će petlja proći po svim recima matrice. Naravno, granica petlje može biti nešto drugo ako ne želiš proći svim podacima.

 

(btw ako je A mxn matrica onda je size(A)=[m n] )

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Hmm, mislim da sam napokon shvatio. Znači ova naredba max uključuje sve redove/stupce u datoj matrici? Sad mi sve sjeda na mjesto.

 

Hvala ti puno na pomoći, odoh sad programirat... :)

how you doin'?
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

max vraća maximalni element niza. U ovom slučaju niz je [m n] ( kod tebe [100000  3] ) pa će onaj max dati veću vrijednost od te dvije. Kako ti znaš da imaš više redaka nego stupaca, onda ćeš dobiti baš broj redaka. Alternativno i ovo je dobro :

 

[m n] = size(A);

for i=1:m

   radi nešto za svaki redak

end

 

 

inače za svaku naredbu možeš pogledat help, puno pomaže :D

Samo u glavni prozor napišeš recimo

 

help max

 

i dobiješ cijeli opis što funkcija max radi

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
Poruka je uređivana zadnji put čet 12.5.2011 17:43 (Luuka).
14 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Odlično, baš ću morati izraditi još par programa a najviše me zezao ovaj unos podataka i uklapanje s postojećim kodom. Hvala puno!

 

Što se tiče help-a - nekad znam nešto tražit al mi izbaci toliko linkova da mi se na kraju ne da uopće čitati. :) Znam, lijenost ubija!

how you doin'?
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Trebam mali savjet poznanika Matlaba.

 

Ovo mi je dio kôda koji me muči: http://pastebin.com/nUXidJ5T

Matlab me trenutno muči sa ovom porukom: 'Loop index 'i' is changed inside of a FOR or PARFOR loop.', koja mi ga totalno zablokira pa ga moram gasit i ponovno paliti. Prije mi je javljao poruku tipa: Attempted to access xyz(79114,1); index out of bounds because size(xyz)=[79113,3]. Dakle, problem glavni mi je da moram uspoređivati vrijednosti matrice i to sljedeća-prethodna, ali kada mi dođe do kraja javlja da traži korak dalje koji ne postoji...

 

Sad mi je žao što nisam 2 godine samo pokušavao shvatiti Matlabov princip rada. {#}

how you doin'?
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Makni onaj i=i+1. U matlabu ti for petlja sama radi inkrement, ne moraš ti sam. Inkrement moraš istaknuti za while petlju.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Maknuo sam brojanje i-a, međutim Matlab pokrene program i samo radi bez rezultata... Postoji li efikasniji način zaustavljanja rada od ovog koje trenutno koristim, a to je gašenje samog Matlaba?

how you doin'?
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Kako misliš da radi bez rezultata? Vrti se u nekoj bekonačnoj petlji ili samo ništa ne ispisuje? U ovom kodu se niti neće ništa ispisati, a neće se vrtit beskonačno budući da je max(size(xyz)) neki konačan broj. Testna skripta bi ti trebala ispisivat, a ovo bi trebalo biti uređeno kao posebna funkcija koja vraća ove vektore koji su ti potrebni, kao u kodu koji sam ti slao.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Pa rekao bih da se vrti u beskonačnoj petlji. Mislim pokrenem testnu skriptu koja pokreće i ovaj program, međutim program javlja Busy i čini mi se da će tako u nedogled. Jedina mi je opcija da ga ostavim pa se vratim za 2 sata. A tako ipak ne bi trebalo biti. Jedino što ga možda budi je to što sam ostavio imena varijabli ista kao i kod onog programa prije. Iako mislim da on svejedno radi samo najaktualnije matrice...

how you doin'?
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Pozdrav svima, ponajviše Luki, ekspertu u Matlabu. :)

 

Evo ja opet imam problem. :) Naime, u Matlabu dobivam poruku koja glasi:

 

??? Attempted to access A(-1e-005); index must be a
positive integer or logical.

Error in ==> duluka at 18
    G=a*(1-e2)*(A(fi(i)-fi(i-1))-B/2*(sin*2*fi(i)-sin*2*fi(i-1))+C/4*(sin*4*fi(i)-sin*4*fi(i-1)));

 

 

Pri tome mi je glavni program koji računa duljinu luka ovakvog izgleda:

http://pastebin.com/54Dt5iAr

 

Kontrolni program kojim pokrećem ovaj glavni glasi ovako:

http://pastebin.com/C35kSyA2

 

U čemu bi mogla biti pogreška? Ne vidim kako to Matlab dobiva negativnu vrijednost, jer kad kontroliram kod mene su vrijednosti u plusu. Ako je uopće o tome riječ?

how you doin'?
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Ako je A matrica, ona ima elemente A(1,1) do A(m,n). Ti sa A(fi(i)-fi(i-1)) želiš pristupiti elementu (zapravo cijelom stupcu) koji ima prvi index fi(i)-fi(i-1) što jasno ne mora biti 1,2,3,...,m. I tu ti Matlab javi grešku. On retke numerira sa cijelim brojevima, a tu mu daješ realni i to nije dobro. Što želiš zapravo ovdje? Što je fi?

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Luuka, moj bed.

 

Naime, nisam stavio iza A oznaku za množenje. {#} A mi nije matrica, to je skalar koji se izračuna par koraka prije. :)

 

Fi mi je oznaka za geografsku širinu. Dakle, program bi mi trebao računati duljine luka meridijana, pri čemu su mi fi(i) pojedini podaci za kuteve... Ovo pokušavam izračunati onaj moj problem u lokalnom sustavu. Naime, razlike izlaznih vrijednosti su mi puno veće nego što bi trebale biti, pa mi je mentor predložio da probam računati u lokalnom sustavu...

 

Da ne dužim, sada mi nažalost javlja ovo:

??? Error using ==> sin
Not enough input arguments.

Pri tom sam još u testnom fajlu ubacio jednadžbu za pretvaranje iz stupnjeva u radijane - fi=fi/180*pi;

 

...

how you doin'?
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

E tak već da :D A kod sinusa ti fali pokoja zagrada.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
MATLAB - unos podataka u postojeći program

Kako da u matlabu napisem rjesenje matrične jednadžbe.

 

AX=B

S time da mi je:

 

A=[2 0;2 -3;1 -1]

B=[2 0 6;-1 -6 0;0 -2 1]

Koliki mi je X.

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

A i B si već napisao, sad je X=A\B.

 

Da je A kvadratna mogao bi koristiti i X=inv(A)*B, ali to je puuuuno lošije, nestabilnije itd. (ovdje to niti ne možeš jer je A pravokutna, a takve nemaju inverz).

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program

Ok, znaš li kako da limes upisem u matlab, ako znas neki primjer ili da sintaksu napises, gledao sam ali ne znam kako da napisem čemu limes teži.

14 godina
protjeran
offline
MATLAB - unos podataka u postojeći program

Imaš cijelokupnu detaljnu dokumentaciju online.

 

Dakle limes ili limit (eng) u symbolic toolbox-u:

 

http://www.mathworks.com/help/toolbox/symbolic/limit.html

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: MATLAB - unos podataka u postojeći program
Bypass kaže...

Imaš cijelokupnu detaljnu dokumentaciju online.

 

Dakle limes ili limit (eng) u symbolic toolbox-u:

 

http://www.mathworks.com/help/toolbox/symbolic/limit.html

  Hvala na ovome

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice