Vinnaren i pepparkakshustävlingen!
2012-11-20, 15:35
  #1
Medlem
maribs avatar
Här är uppgiften, på norska, men ni förstår säkert. Om inte så säg till så ska jag försöka omformulera.

http://oi47.tinypic.com/j5ut8j.jpg

Och här är min kod.

Citat:
function [ output_args ] = Oppgave3b(x)
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here

sum=0;
f1=-((x-1)^2)+1;
f2=(-((x-2)^3));
f3=0;

if rem(x,3)>=0 & 1>rem(x,3)
sum=f1;

else
if rem(x,3)>=1 & 2>rem(x,3)
sum=f2;

else
if rem(x,3)>=2 & 3>rem(x,3)
sum=f3;

end
end
end

sum
end

Den fungerar fint på den positiva sidan men det blir galet på den negativa.
För x-värden ...-6,-3,0,3,6... så ska den köra igenom f1
För x-värden ...-5,-2,1,4,7... så ska den köra igenom f2
För x-värden ...-4,-1,2,5,8... så ska den köra igenom f3.

Den ger rätt svar på allt utom f2s negativa sida. f1&f3s negativa sida blir korrekt, och f2s positiva sida blir också korrekt. Varför? Jag förstår inte. Min lärare sa att det ser bra ut men att jag också ska tänka på de negativa värdena.

Den ger svaret 0 för negativa värden för f2, men det är ju fel.
__________________
Senast redigerad av marib 2012-11-20 kl. 15:38.
Citera
2012-11-20, 16:02
  #2
Medlem
maribs avatar
Problem löst. Här är min nya kod.

Citat:
function [ sum ] = Oppgave3b(x)
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here

x=rem(x,3);
if x<0
x=x+3;
else
end

if x<1
sum=-((x-1)^2)+1;

elseif x<2
sum=(-((x-2)^3));

else
sum=0

end
end

Citera
2012-11-20, 16:08
  #3
Medlem
Citat:
Ursprungligen postat av marib
Problem löst. Här är min nya kod.
det kan vara värt att använda

while x<0
x = x + 3 ;
end

om x skulle vara mer än en period bort.
min lösning blev

Kod:
function flashTester
    x = -10:0.001:10; 
    for i = 1:length(x)
        y(i) = perFunc(x(i)); 
    end
    plot(x,y) 
    shg
end 

function r = perFunc(x)
    while x<0 
        x = x + 3 ; 
    end 
    xx = rem(x,3); 
    
    if (xx>=0) && (1>=xx)
        r = -((xx-1)^2)+1 ; 
    elseif (xx>1) && (2>=xx)
        r = -((xx-2)^3) ; 
    else
        r = 0;
    end
end
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback