Zaloguj się
Blog na Matlab.pl
Forum polskich użytkowników
 
UŻYTKOWNICY GRUPY PROFIL Zaloguj się, by sprawdzić wiadomości FAQ
 



Napisz nowy temat     Odpowiedz do tematu Zobacz poprzedni temat :: Zobacz następny temat

Funkcja Ackleya
Forum MATLAB Strona Główna-> Biologia komputerowa i systemy medyczne
Post Wysłany: 6 Grudnia 2016, Wto 9:12 pm Temat postu: Funkcja Ackleya Odpowiedz z cytatem
 
AUTOR:
Docx



Dołączył: 06 Gru 2016
Posty: 3


Ogląda profil użytkownika Wyślij prywatną wiadomość
Witam serdecznie,
Mam daną funkcję Ackley'a

Kod:


function [y] = ackley(xx)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
ACKLEY FUNCTION
%
%
Authors: Sonja Surjanovic, Simon Fraser University
%          Derek Bingham, Simon Fraser University
% Questions/Comments: Please email Derek Bingham at dbingham@stat.sfu.ca.
%
%
Copyright 2013. Derek Bingham, Simon Fraser University.
%
%
THERE IS NO WARRANTY, EXPRESS OR IMPLIED. WE DO NOT ASSUME ANY LIABILITY
% FOR THE USE OF THIS SOFTWARE.  If software is modified to produce
% derivative works, such modified software should be clearly marked.
%
Additionally, this program is free software; you can redistribute it
% and/or modify it under the terms of the GNU General Public License as
%
published by the Free Software Foundation; version 2.0 of the License.
%
Accordingly, this program is distributed in the hope that it will be
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% For function
details and reference information, see:
%
http://www.sfu.ca/~ssurjano/
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
INPUTS:
%
%
xx = [x1, x2, ..., xd]
%
a = constant (optional), with default value 20
% b = constant (optional), with default value 0.2
% c = constant (optional), with default value 2*pi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

d = length(xx);

if (
nargin < 4)
    
c = 2*pi;
end
if (nargin < 3)
    
b = 0.2;
end
if (nargin < 2)
    
a = 20;
end

sum1
= 0;
sum2 = 0;
for
ii = 1:d
    xi
= xx(ii);
    
sum1 = sum1 + xi^2;
    
sum2 = sum2 + cos(c*xi);
end

term1
= -a * exp(-b*sqrt(sum1/d));
term2 = -exp(sum2/d);

y = term1 + term2 + a + exp(1);

end




Chciałbym teraz wyświetlić wykres tej funkcji w zakresie [-5:5, -5,5]. Próbowałem to zrobić w taki sposób:
Kod:

x
=-5:5;
y=-5:5;
[
X,Y] = meshgrid(x,y);
xx = [X(:), Y(:)];
y = ackley(xx);
Z = reshape(y,size(X)); >> Tutaj błąd:
Error using reshape
To RESHAPE the number of elements must not
change
.
surfc(X,Y,Z); >> i tutaj również że Z musi być macierzą a nie wektorem lub skalarem.


Czy ktoś mógłby mi pomóc się z tym uporać?


 

Post Wysłany: 6 Grudnia 2016, Wto 10:46 pm Temat postu: Co zwraca funkcja Ackley'a Odpowiedz z cytatem
 
AUTOR:
Jacek Konieczny
Może pisać książki


Dołączył: 31 Mar 2009
Posty: 315
Skąd: Poznań


Ogląda profil użytkownika Wyślij prywatną wiadomość Odwiedź stronę autora
A co zwraca funkcja Ackley'a - ta, której skrypt załączono ? Po krótkiej analizie programu wynika, że powinna ona zwrócić skalar, tj. pojedynczą liczbę. A trudno sporządzić wykres takiego wyniku w jakimś przedziale.
Proponuję wywołać samą funkcję i jej wynik potraktować przy pomocy funkcji "size". Jeżeli 'size' zwróci dwie jedynki, to mamy do czynienia ze skalarem.


 

Post Wysłany: 7 Grudnia 2016, Sro 5:28 am Temat postu: Odpowiedz z cytatem
 
AUTOR:
Docx



Dołączył: 06 Gru 2016
Posty: 3


Ogląda profil użytkownika Wyślij prywatną wiadomość
Rozumiem, czyli jeśli w pętli zapisywał bym wyniki działania programu dla n=6 to otrzymał bym macierz 2x3 i wtedy było by możliwe wyrysowanie tego wykresu?


 

Post Wysłany: 7 Grudnia 2016, Sro 9:34 am Temat postu: Funkcja Ackley'a - co zwraca Odpowiedz z cytatem
 
AUTOR:
Jacek Konieczny
Może pisać książki


Dołączył: 31 Mar 2009
Posty: 315
Skąd: Poznań


Ogląda profil użytkownika Wyślij prywatną wiadomość Odwiedź stronę autora
Oczywiście ! Gdyby pętla "for" zapisywała do jakiegoś wektora lub do jakiejś macierzy, to nie byłoby problemu. Macierz o zadanym wymiarze można wstępnie przygotować przez uruchomieniem pętli for przy pomocy funkcji "zeros" lub funkcji "ones".


 

Post Wysłany: 7 Grudnia 2016, Sro 2:49 pm Temat postu: Odpowiedz z cytatem
 
AUTOR:
Docx



Dołączył: 06 Gru 2016
Posty: 3


Ogląda profil użytkownika Wyślij prywatną wiadomość
Zgadza sie, natomiast nie bardzo rozumiembw jaki sposób moge zapisywac kolejne wynikivw macierzy. Poniewaz po każdym przejsciu petli otrzymuje wynik i chcialbyn te wyniki przypisywac do macierzy Z która umożliwi mi wyrysowanie wykresu. Robie tak Z = zeros(n) i mam macierz wypełniona zerami o wielkosci n(liczba parametrów wejsciowych funkcji). I teraz przy kazdym przejsciu pętli jak moge ja wypełnić wynikami?


 

Post Wysłany: 7 Grudnia 2016, Sro 4:28 pm Temat postu: Wypełnianie wstępnie zadeklarowanej macierzy Odpowiedz z cytatem
 
AUTOR:
Jacek Konieczny
Może pisać książki


Dołączył: 31 Mar 2009
Posty: 315
Skąd: Poznań


Ogląda profil użytkownika Wyślij prywatną wiadomość Odwiedź stronę autora
Najzwyczajniej w świecie ; po prostu w pętli ( np. "for" ) do każdego elementu macierzy ( odpowiednio indeksowanego ) wpisuję nową wartość, np. :

dane = zeros ( 4 , 1 ) ;
for i = 1 : 4
dane (i) = i^2 ; % na przykład
end

Funkcja 'zeros' pełni w tym momencie podobną rolę, jak deklaracja DIM w rozmaitych dialektach języka BASIC lub deklaracja "Array [ 1..4 ] of ..." w rozmaitych dialektach języka PASCAL - po prostu wstępnie przygotowuje tablicę ( czyli w języku Matlaba - macierz ), której elementy można potem zawsze nadpisać.


 

Forum MATLAB Strona Główna-> Biologia komputerowa i systemy medyczne
Wyświetl posty z ostatnich:   

Napisz nowy temat     Odpowiedz do tematu Zobacz poprzedni temat :: Zobacz następny temat

Wszystkie czasy w strefie CET (Europa)

Skocz do:  

Statystyki forum:



Od dnia 08.06.2006 forum odwiedzano 36558662
Najwięcej użytkowników 266 było obecnych 19 Lutego 2015, Czw 7:03 pm

Aktualnie online:




Najnowsze posty na forum:
zamiennik funkcji smooth  (23 Czerwca 2017, Pią 1:30 pm)
Warto robić szkolenia?  (22 Czerwca 2017, Czw 8:40 am)
Rysowanie sygnałów Sygnały okresowe  (21 Czerwca 2017, Sro 6:52 pm)
Błąd przy inicjowaniu sieci LVQ  (21 Czerwca 2017, Sro 4:39 pm)
Czy wypada być z byłym chłopakiem przyjaciółki?  (21 Czerwca 2017, Sro 2:19 pm)
Artykuły o Matlab  (21 Czerwca 2017, Sro 9:46 am)
Czy wasz człowiek też jest dziwny?  (20 Czerwca 2017, Wto 1:59 pm)
Poprawianie matury to wstyd?  (20 Czerwca 2017, Wto 8:53 am)
Gdzie po szybką pożyczkę?  (17 Czerwca 2017, Sob 12:43 pm)
Mała pomoc  (16 Czerwca 2017, Pią 11:27 pm)
Twoje prawa:
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Nie możesz ściągać plików na tym forum