I början av Januari 2014 låstes Whoa och du kan alltså ej logga in eller skriva något nytt i forumen. Innehåll i forum osv kommer finnas tillgängligt. Läs Mer »

Någon grym matlab:are här ?

Hobby & Fritid - Datorer & Teknik

   

2007-02-15 13:52

Någon grym matlab:are här ?

Skulle behöva hjälp med en grej. Vet inte ens vart jag ska börja, och förstår inte hur man ska räkna ut omkretsen på en polygon? :S

Ni kan ladda ner den här.
http://www.badongo.com/file/2242758

You'll Never Walk Alone

2007-02-15 17:33
Polygonens omkrets är naturligtvis summan av avstånden mellan dess punkter. Eftersom du har alla punkter sorterade "i ordning" är det en smal sak.. skriv bara en funktion som summerar avstånden p1 -> p2, p2 -> p3, ..., pn -> p1


Mitt program blev 5 rader, slå det om du kan :)
mensvärk är livets krydda.

2007-02-15 18:54

johanman 5 rader?!?!!? hur ?!?!? jag var uppe i 17 rader och fick det endå inte att fungera...... sket i den och gick vidare .. har tentan på måndag , måste lära mig lite av allt tills dess.. :)  

cva ?

2007-02-15 19:41
function c=circumf(poly)
c = 0;
for i=1:length(poly);
    c = c + norm(poly(i,:)-poly(mod(i,length(poly))+1,:));
end
%return
mensvärk är livets krydda.

2007-02-15 19:45
där norm(x) ger 2-normen för en vektor (eller matris)

mod() finns där för att slippa lägga till "extrafallet" pn-p1
mensvärk är livets krydda.

2007-02-15 19:56

circumf(p) ska det vara!!! :P nee skoja bara , du e grym...

cva ?

2007-02-16 00:00
det är mitt jobb att vara grym..

är dessutom jävligt bra på why()-funktionen :)
mensvärk är livets krydda.

2007-02-16 00:57
----------------------------------------------------------------------
Square part
----------------------------------------------------------------------

Implement a function that computes the square part of an integer.
The square part is the largest square dividing a positive integer.

Syntax: sp = squarepart(n)
        -------------------------

where sp  is the largest square dividing n
      n   is a positive integer


Example:

n = 72
divisors:
1 2 3 4 6 8 9 12 18 24 36 72
Of those are 1, 4, 9 and 36 squares. Thus the largest square dividing
72 is 36.


Basic functionality:

>> sp = squarepart(72)

sp =

    36

----------------------------------------------------------------------

----------------------------------------------------------------------
Knapsack Problem
----------------------------------------------------------------------

Given a knapsack with a certain capacity and a number of items with
different weights and values - the task is to fill the knapsack such
that the total weight of items inside is less or equal the capacity
of the knapsack and the total value of items inside is maximized.
It is very hard to obtain an optimal solution for larger numbers of
items as the number of possible combinations increases exponentially.

Your task here is to implement a heuristic method that will give a
suboptimal but still good solution to the knapsack problem.
Sort the items by "value per weight" and start packing with the most
valuable item (maximum value per weight). Keep on packing until there
is no item left that could fit without exceeding the given capacity.


Example:

capacity: 20
items:  index     1    2    3    4    5    6
        value     3    5    8    3    4    7
        weight    2    4    7    4    3    5
       
        v per w  1.50 1.25 1.14 0.75 1.33 1.40

Start packing with the most valuable item (per weight) - the first one.
The remaining capacity is 18, the value of the items inside is 3.
Continue with items numer 6, 5 and 2. The remaining capacity is 6.
There are two items left but the most valuable of these two does not
fit into the knapsack (remaining capacity 6 - weight of item 3: 7).
Thus item number four will be packed. Then there is no item left that
could fit into the knapsack.
Finally:
items inside: 1, 6, 5, 2, 4
total value:  22
total weight:  18


Syntax: value = knapsack(cap,items)
        -------------------------

where value  is the total value of all items inside the knapsack
      cap    is the capacity of the knapsack
      items  is a matrix of one column per item and two rows
             the first row contains the value and the second the
             weight of each item



Basic functionality:

>> cap = 20

cap =

    20

>> items =

items =

     3     5     8     3     4     7
     2     4     7     4     3     5

>> value = knapsack(cap,items)

value =

    22

----------------------------------------------------------------------
You'll Never Walk Alone

2007-02-16 12:26
bump

Där är 2 "talen" btw :D
You'll Never Walk Alone

2007-02-16 14:16
Kan lägga till att det framför allt är den andra uppgiften som jag verkligen inte vet vart jag ska börja.
You'll Never Walk Alone

2007-02-16 15:59
Typ enklast möjliga för squarepart. Osäker på om den är 100%-ig men bör funka.

function sp=squarepart(n)
for sp=floor(n/2):-1:4
    if mod(n,sp)==0 && sqrt(sp)==floor(sqrt(sp))
        return;
    end
end
sp=0; %returnerar 0 om ngn sp ej existerar


Däremot är ovanstående inte särskilt optimalt (loopar ju igenom alla tal), jag gjorde en mycket snyggare funktion som byggde på factor() men glömde ladda upp den :(

Ovanstående borde dock funka rätt bra för tal upp till 10^7 - 10^8 typ..
mensvärk är livets krydda.

2007-02-16 16:00
Man kan (bör) nog lägga till en isprime() i början för att slippa onödiga beräkningar
mensvärk är livets krydda.

2007-02-16 16:10
Vad gäller knapsack så har du ju ganska tydliga steg-för-steg-instruktioner

1. Sortera föremålen efter värde per vikt
2. Kontrollera att (återstående) föremål med högst värde/vikt ryms i ryggsäcken. Om ja, lägg till föremålet samt räkna ner kvarstående utrymme.
3. Kika på nästa föremål, gå till punkt 2

Hela funktionen kan skrivas rekursivt.


Ska just till att formatera datorn, blir utan matlab en stund :)
mensvärk är livets krydda.

2007-02-16 16:18
Aj aj aj vilka korta koder du får!! :P Ska studera den första uppgiften, sen kriga med knapsack hela dagen :P Tack som fan! Frågar i den här tråden om jag behöver hjälp igen.
You'll Never Walk Alone

2007-02-17 14:57
function sp=squarepart(n)
for sp=floor(n/2):-1:4
    if mod(n,sp)==0 && sqrt(sp)==floor(sqrt(sp))
        return;
    end
end
sp=0; %returnerar 0 om ngn sp ej existerar

sp existerar väl alltid? 1 finns ju alltid väl?
cva ?

2007-02-19 12:34
"en stund" blev ganska länge, fick inte licensen att funka :(


sp existerar väl alltid? 1 finns ju alltid väl?
Ja, miss av mig. Tänkte att det var nått primtalsliknande, dvs att ettan inte räknades.. men det står ju i uppgiften


Hur gick tentan?
mensvärk är livets krydda.