» »

Matlab pomoč

Matlab pomoč

ismon1 ::

Pozdravljeni!

Iz strani snemam skozi steklo vodo, ki se peni. In jaz bi moral v Matlabu spisati program, ki bo:

-posnetek razbil na slike
-slike ''scentriral'' da ne bo projekcije
-na slikah dobil rob, kjer je vodna gladina
-na sliki določil spodnjo točko in izračunal razdaljo od te točke do vodne gladine
-in vse skupaj spravil v koordinate x,y

oziroma bolj na kratko:
input: posnetek vode iz strani
output: koordinate gladine glede na dno posode.

Sem že dobil spisane programe na internetu ki:

-scentrirajo sliko, da ni projekcije
-dobijo rob med vodo in zrakom

Ker je zame to prevelik zalogaj (ja, če bi si vzel 3 tedne, ki jih nimam, bi mi to uspelo), me zanima, če je kdo pripravljen to naredit, ter koliko bi računal. Ponudbe na ZS.
Hvala!

ismon1 ::

Pozdrav.

Nekako smo rešili zgornjo stvar. Imam pa vprašanje. Imam podatke v sledečem redu:
x y
1 2
1 4
1 5
2 4
2 7
2 5
itd.

Nikakor mi ne uspe izpopolniti if stavka, ki bi povedal, da za vsak x najde minimalni y in zapiše x in ymin v txt datoteko, kar bi pomenilo:
x y
1 2
2 4
itd.
Ideje?

Randomness ::


x = [1 1 1 2 2 2]';
y = [2 4 5 4 7 5]';
n = max(x);
miny = zeros(n,1);
for i=1:n
ii = find(x == i);
miny(i) = min(y(ii));
end

fd = fopen('rezultat.txt', 'w');
for i=1:n
fprintf(fd, '%d %d\n', i, miny(i));
end
fclose(fd);

Zgodovina sprememb…

ismon1 ::

Točno to!
Najlepša hvala!

ps.: ne vem zakaj moram pri fprintf vedno dat %d\r\n, da mi dela nove linije. ampak sedaj dela ;)

Randomness ::

Na Windowsih sta za prehod v novo vrstico potrebna dva znaka: '\r' in '\n', na Unix sistemih pa le en: '\n'.
New line

Zgodovina sprememb…

ismon1 ::

Po vsej logiki bi moralo zapisat v 2 stolpca. Zakaj ne?

fa = fopen('rezultat.txt', 'w');
fprintf(fa, '%d %d\r\n', D(1,1).X, D(1,1).Y);
fclose(fa);

Če mi pa že uspe ustvarit 2 stolpca, pa gredo vrednosti D(1,1).X v oba stolpca, dokler jih ne zmanjka, potem še vrednosti y.

ismon1 ::

Rešeno!

fprintf(fa, '%d %d\r\n', [D(1,1).X, D(1,1).Y].');

ismon1 ::

Komentar:
D je spremenljivka in zajemam podatke iz workspace-ja.

9797 ::

Lep pozdrav,

Imam problem, pri reševanju ene od nalog v Matlabu:

Izračunajte funkcijo cos(x) s pomočjo neskončne vrste:

cos(x)=1- x^2/2! + x^4/4! - x^6/6! + ...

Uporabnik naj poda vrednost želenega kota v stopinjah. Program naj izračuna kosinus kota na 6 decimalnih mest natančno. Izpiše kot v radianih in vrednost cos za ta kot. Koliko členov ste uporabili? Rešitev primerjajte z Matlabovo funkcijo cos(x).


Ima kdo kakšno idejo, kako rešiti to, oz bi bil pripravljen rešiti?

Math Freak ::

Ker nimam Matlaba gor maš tuki kako približno bi lahko izgledalo v Pythonu:

Najprej definiraš funkcijo za izračun fakultete (najbolj preprosta rekurzija), ki jo uporabiš v drugi funkciji. Vse kar moraš storiti potem je, da ugotoviš zaustavitveni pogoj (kdaj dosežeš na 6 decimalk natančen rezultat). cos(x): x računaš v radianih ...

def f(x):
    if x == 1:
        return 1
    else:
        return x*f(x-1)

def cos(x):
    trenutnaVrednost = 0
    rezultat = 1
    predznak = -1
    potenca = 2
    
    for i in range(10):
        trenutnaVrednost = predznak*(x**potenca/(f(potenca)*1.0))
        rezultat += trenutnaVrednost
        print("trenutnaVrednost: " ,round(rezultat,6))
        
        potenca += 2
        predznak *= -1

    return "koncni rezultat", rezultat


Primer (1): cos(3.14) -> 9. korak rekurzije
>>> cos(3.14)
('trenutnaVrednost: ', -3.9298)
('trenutnaVrednost: ', 0.120688)
('trenutnaVrednost: ', -1.210518)
('trenutnaVrednost: ', -0.97614)
('trenutnaVrednost: ', -1.001817)
('trenutnaVrednost: ', -0.999899)
('trenutnaVrednost: ', -1.000003)
('trenutnaVrednost: ', -0.999999)
('trenutnaVrednost: ', -0.999999)
('trenutnaVrednost: ', -0.999999)
('koncni rezultat', -0.9999987316527259)


Primer (2): cos(0.5) -> 5. korak rekurzije
>>> cos(0.5)
('trenutnaVrednost: ', 0.875)
('trenutnaVrednost: ', 0.877604)
('trenutnaVrednost: ', 0.877582)
('trenutnaVrednost: ', 0.877583)
('trenutnaVrednost: ', 0.877583)
('trenutnaVrednost: ', 0.877583)
('trenutnaVrednost: ', 0.877583)
('trenutnaVrednost: ', 0.877583)
('trenutnaVrednost: ', 0.877583)
('trenutnaVrednost: ', 0.877583)
('koncni rezultat', 0.8775825618903728)

Math Freak ::

Popravek: mislil sem n. korak for zanke, ne rekurzije =p.

celada ::

Za break parameter lahko preprosto uporabi delto med trenutnim in predzadnjim rezultatom. Ko je ta manjša od 10^-6 pač ustavi zanko.
Asus p5q-pro, 1,5 TB Segate Baraccuda , Sapphire Ati radeon 4850
Core 2 Duo E8400 4Gb rama

specing ::

9797 je izjavil:

Lep pozdrav,

Imam problem, pri reševanju ene od nalog v Matlabu:

Izračunajte funkcijo cos(x) s pomočjo neskončne vrste:

cos(x)=1- x^2/2! + x^4/4! - x^6/6! + ...

Uporabnik naj poda vrednost želenega kota v stopinjah. Program naj izračuna kosinus kota na 6 decimalnih mest natančno. Izpiše kot v radianih in vrednost cos za ta kot. Koliko členov ste uporabili? Rešitev primerjajte z Matlabovo funkcijo cos(x).


Ima kdo kakšno idejo, kako rešiti to, oz bi bil pripravljen rešiti?



Prvo na papirju razpišeš neskončno taylorjevo vrsto za cos(x). Nato to vrsto ločiš na dva dela, pri prvem delu (to kar ti rabiš) gre n od 0 do N, pri drugem pa gre n od N+1 do neskončno. Zdaj oceni tak N, da bo druga vrsta (=ostanek) absolutno manjša od 0.000001.

Ko dobiš tak N, narediš N-mestni array z uporabo funkcije arrayfun() in ga sesteješ:

function c = mycos(x)
c = sum(arrayfun (@(x,potenca)( (-1)**(potenca+1) * x**(2*potenca) / factorial(2*potenca) ), 2, [0:N]));
end


@MathFreak inštaliraj si GNU Octave.
@Celada klasičen monkey strategy.

celada ::

Jah odvisno koliko hočeš optimizirati samo funkcijo. Primer od Math Freak-a je praktično brute force rešitev. Tvoja rešitev je pa kompletno odvisna od funkcije za oceno N. V najslabši implementaciji (naprimer da ne upoštevaš cikličnosti cos(x) in vsakič posebaj ocenjuješ potrebno število korakov) bo še počasnejša od Math Freakove. Da ne omenjam da ne uporabljaš memoizacije, ko računaš faktorizacijo :P
Asus p5q-pro, 1,5 TB Segate Baraccuda , Sapphire Ati radeon 4850
Core 2 Duo E8400 4Gb rama

Zgodovina sprememb…

  • spremenil: celada ()

Jan23 ::

Pozdravljeni.

Potreboval bi pomoč pri kreiranju primera v Matlabu.
Gre se za primer Travelling Salesman Problem, ki bi ga želel rešiti z uporabo optimization toolboxa. Ima kdo idejo kako narediti kriterijsko funkcijo za ta primer?

Lp


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Zaloga vrednosti

Oddelek: Šola
102252 (2041) Math Freak
»

Trije integrali pomoč!!!

Oddelek: Šola
192708 (2174) Math Freak
»

integral

Oddelek: Šola
422840 (1277) Elyon8472
»

Matematika, again :)

Oddelek: Šola
131846 (1300) tinkatinca
»

Tezava pri grafu kotnih funkcij

Oddelek: Šola
6594 (562) Mavrik

Več podobnih tem