Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 18. 03. 2015 09:41

Jose
Zelenáč
Příspěvky: 7
Škola: VUT FEKT
Pozice: student
Reputace:   
 

Matlab - funkce s více vstupními parametry

Zdravím vás,
Potřeboval bych poradit s vytvořením funkce v matlabu, která by pracovala s řádkovým vektorem řekněme o 1000 a více hodnot v rozmezí -1 až 1 pracovala by následovně:

Pokud by všechny hodnoty ve vektoru byly větší nebo rovné nule tak by se veškeré členy vynásobily.
Pokud by se vyskytl alespoň jeden záporný člen tak by se vynásobili poze záporné členy zvětšené o 1 a od jejich součinu by se odečetla 1.

Předem děkuji za radu.

Offline

 

#2 18. 03. 2015 12:13 — Editoval O.o (18. 03. 2015 12:15)

O.o
Veterán
Příspěvky: 1402
Reputace:   16 
 

Re: Matlab - funkce s více vstupními parametry

↑ Jose:

Ahoj,

zacneme tim, ze nam nejprve reknes v cem je problem. Nejak nevidim, co presne bys od nas ocekaval a uz urcite nevidim nejaky matlab script, kde by ses takovou funkci pokousel vytvorit a mi na to mohli nejak navazat a poradit ti co a jak.

a/ upresni, co je tvuj problem
b/ ukaz, jak zatim vypada tvoje funkce
c/ navrhni, jak resit problemovou partii, s kterou ses setkal pokud mas nejake napady.

Zatim ahoj ;-).

PS: Pokud nevis co je to funkce nebo jak ji napsat, tak se podivej do napovedy matlabu, stavba neni nijak narocna.

Offline

 

#3 18. 03. 2015 13:42

Jose
Zelenáč
Příspěvky: 7
Škola: VUT FEKT
Pozice: student
Reputace:   
 

Re: Matlab - funkce s více vstupními parametry

Takže zkusím to lépe vysvětlit.
Mám několik vstupních parametrů X1,X2,X3,...Xn, které nabývají hodnot -1 až 1
musím vytvořit funkci, která funguje takto:

Jestli je alespoň jeden parametr záporný
tak Y= (Xzáporné1+1)*(Xzáporné2+1)*(Xzáporné3+1)*...*(Xzápornén+1)-1       

Jestli jsou všechny parametry kladné nebo rovné nule
tak Y=X1*X2*X3*...*Xn

Kdyby ta funkce byla pro předem daný málý počet vstupních parametrů třeba pro 3, tak bych to udělal takhle:

if x1<0|x2<0|x3<0
       
    if x1<0
            x1=x1+1
        else x1=1
    end
   
    if x2<0
            x2=x2+1
        else x2=1
    end
   
    if x3<0
            x3=x3+1
        else x3=1
    end

    y=x1*x2*x3-1;
           
else
    y=x1*x2*x3
end

Programování mi moc nejde, a netuším jak bych to udělal, kdyby bylo vstupních parametrů třeba 1000 a pokaždé pro odlišný počet těchto parametrů.
Kdyby jste mi doporučili nějaký postup nebo nejakou funkci na kterou se podívat, byl bych vám vděčný ;)

Offline

 

#4 18. 03. 2015 16:22 — Editoval O.o (18. 03. 2015 19:43)

O.o
Veterán
Příspěvky: 1402
Reputace:   16 
 

Re: Matlab - funkce s více vstupními parametry

↑ Jose:

Zkusme to nejak poskladat tedy.

i. Zprvu pro funkci na pocatku definujes pocet vstupnich parametru, kdybys jich mel tisic, tak musis napsat tisic vstupnich zastupcu, pro tebe bude lepsi, kdyz do funkce bude vstupovat obycejna matice, tim se zbavis toho, kolik cisel do funkce muzes vlozit, proste tam pujde jedna matice a jak je velka na tom uz te funkci nezalezi.

Takze nejak takto

Code:

function [ output_args ] = functionName( mtx )

end

(pokud mas mit nejaky vystup z funkce, tak proto tam mas promenou output_args - prepis si to na co chces, pokud nepotrebujes vystup, tak tuhle cast smaz. Dale si prepis functionName na to, jak chces aby se tvoje funkce jmenovala).

ii. Diky vstupu jako matice misto jednotlivych clenu, tak muzes pouzit for cyklus, abys prosel celou matici.

Treba takto

Code:

[rows, cols] = size(mtx);
for i = 1:rows
  for j = 1:cols
    % do something
  end
end

ii. Pristupuj k clenum v matici takto

Code:

[rows, cols] = size(mtx);
for i = 1:rows
  for j = 1:cols
    if (mtx(i,j) > 0) 
      % do something
    end
  end
end

(pristup k prvku matice je mtx(i,j), ja jsem sem jen placnul nejakou podminku, aby bylo videt, jak to pouzit, ty pouzij co vyzaduje tvuj pripad samozrejme)

To mas zakladni prvky, s kterymi uz by nemel byt problem tvoji funkci dohromady, nebo se prinejmensim pohnout o kus dal. Zkus co ti pujde a pak nam to tu napis a pripadne doladime detaily uz toho, co napises ty ;-).

Offline

 

#5 18. 03. 2015 18:46

Jose
Zelenáč
Příspěvky: 7
Škola: VUT FEKT
Pozice: student
Reputace:   
 

Re: Matlab - funkce s více vstupními parametry

Díky za rady, zkusil bych to takhle a budu uvažovat, že vstupní matice x má pouze jeden řádek:

function [ y ] = soucinovaf( x )

for m=1:size(x,2);
    if ???alespon jeden člen x(m)<0???
      if x(m)<0
          z(m)=z(m)+1               %úprava parametrů podle podmínky
      else z(m)=1
      end
      for n=2:size(z,2)              %součin upravených záporných parametrů
          z(n)=z(n)*z(n-1)
          y=z(size(z,2))
      end
    else for n=2:size(z,2)          %součin součin všech parametrů
          z(n)=z(n)*z(n-1)
          y=z(size(z,2))
         end
       
    end
end
end
Ale netuším jak by měl vypadat tvar té podmínky co potřebuji.

Offline

 

#6 18. 03. 2015 19:39 — Editoval O.o (19. 03. 2015 12:32)

O.o
Veterán
Příspěvky: 1402
Reputace:   16 
 

Re: Matlab - funkce s více vstupními parametry

↑ Jose:

Tady uz zalezi na tom, jak komplikovane si to chces udelat.
Proc jsem to psal v jednoduchych blocich bylo, aby to slo snadno udelat.

Muzes jit tedy touto asi nejsnadnejsi cestou.
V prvnim cyklu projed celou matici a hledej hodnoty mensi nez nula, pokud nejakou najdes, tak ji uloz do nove matice. Nakonci ti zustane bude prazdna matice nebo matice pouze zapornych prvku. Pokud prazdna, tak proste projed znovu (druhy cyklus) celou puvodni matici a uz jen pronasobuj spolu jednotlive cleny a pokud je druha matice neprazdna, tak projed tuto matici misto puvodni a udelej svoji upravu.

Nejak takto by potom mohla vypadat cela tvoje funkce:
(odkryj jen pokud si to nechces nejprve zkusit napsat sam ;-))



V predeslych prispevcich jsem pouzil pri volani matice spatne zavorky, tady jsou spravne a vse funguje ok, upravil jsem je i v minulych prispevcich, aby bylo vse vporadku.

Predstavoval sis to nejak takto?

Offline

 

#7 19. 03. 2015 10:42

Jose
Zelenáč
Příspěvky: 7
Škola: VUT FEKT
Pozice: student
Reputace:   
 

Re: Matlab - funkce s více vstupními parametry

Jo jo díky moc.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson