Projekt i MATLAB (2)
Tack till @Dr. G och @Matsmats för hjälpen i föregående tråd! Jag har fortfarande en del att jobba på!
Hur ska jag göra nu?
Feedback
-Du använder heller inte funktionen velocity_routeX
Del 1 b)
Mitt försök
Kommentar: Nedan finns Matlabfunktionen och koden för plottningarna i
figur 2 och 3. Jag valde ”spline” ¨aven för figur 2 och 3 för att splinefunktionen
anpassar en bra funktion till dessa spridda värdena.
function[v] = velocity_routeX(pos,speedX,distanceX)
%Funktionen r¨aknar hastigheten f¨or en given position f¨or en viss rutt.
%Rutten ges i form av tv˚a vektorer. En med ett antal distanser p˚a rutten
%och den andra med hastigheter f¨or distanserna.
sd = spline(distanceX,speedX); %H¨ar skapas ett approximerat funktionsuttryck
%f¨or v
v = ppval(sd,pos); %H¨ar ber¨aknas v f¨or given position
end
%Kod för rutt A plottningarna:
load('speed_routeA.mat')
load('speed_routeB.mat')
A=distanceA_km;
B=speedA_kmph;
plot(A,B) %Här plottas anpassnignen
hold on
x=linspace(min(A),max(A));
y=spline(A,B,x)
plot(A,B,'*') %Här plottas datapunkterna
xlabel('Sträckan (km)')
ylabel('Farten (km/h)')
%Kod för rutt B plottningarna:
C=distanceB_km;
D=speedB_kmph;
plot(C,D) %Här plottas anpassnignen
hold on
x=linspace(min(C),max(C));
y=spline(C,D,x);
plot(C,D,'r*') %Här plottas datapunkterna
xlabel('Sträckan (km)')
ylabel('Farten (km/h)')
Du gör ju ungefär samma sak här som med den första funktionen.
Först skapar du en funktion, velocity_routeX men sedan använder du inte den när du gör plottningarna utan gör en ny spline-anpassning.
Men då förstår jag inte vilka inparametrar jag ska ha vid plotningen :o
varden1 = speedA_kmph;
varden2=distanceA_km;
plot(varden,velocity_routeX(varden1,varden2, 0),'*')
typ så??
Aha, nu ser jag ju att du inte ens använder dina framräknade värden.
1) du skall räkna fram y med funktionen
2) du skall plotta x och y, nu plottar du A och B resp. C och D två gånger men med olika 'kluttar' i plottarna
Jag har ju plotat y för båda ruttarna, A och B, eller va menar du? (Länge sen jag gjorde uppgiften)
Kolla koden:
plot(C,D) %Här plottas anpassnignen
hold on x=linspace(min(C),max(C));
y=spline(C,D,x);
plot(C,D,'r*') %Här plottas datapunkterna
Sorry Matsmats, men hänger inte med riktigt, detta är ju koden för anpassningen, samt grafen för datan, hur använder jag detta i funktionen? Jag tänker att jag måste få en annan plot med hjälp av funktionen, men blir svårt med 3 inparametrar.
Jag får denna plot i alla fall när jag försöker med funktionen. Med kod:
x=linspace(min(A),max(A));
plot(x,velocity_routeX(x,speedA_kmph,A))
Det ser bättre ut, nu använder du ju x och anpassningen till x.
I din tidigare kod plottade du C och D två gånger.
Så eller? Jag fattar typ nada nu, Plotarna i "mitt försök" i huvudinlägget ska finnas med ellerhur? och nu måste jag bara få en plot med hjälp av funktionen (?)
x=linspace(min(C),max(C));
plot(x, velocity_routeX(x,D,C))
Ja, nånting sånt. Då plottar du ju de x-värden du valt och anpassat till.
Kolla din kod ovan, du gör plot(A,B), hold on, plot(A,B) utan att A och B ändras däremellan. Samma för C och D. Dina kommentarer säger dock något annat...
Jag fick detta för RUTT A.
Kod: nedan
Är det här vad läraren vill ha? Har jag använt funktionen (blå graf) rätt?
A=distanceA_km;
B=speedA_kmph;
plot(A,B) %Här plottas anpassnignen
hold on
x=linspace(min(A),max(A));
y=spline(A,B,x);
plot(A,B,'*')
hold on
x=linspace(min(A),max(A));
>> plot(x, velocity_routeX(x,B,A),'b*')
Som innan, varför gör du plot(A,B) två gånger? Ta bort den andra plotten och kommentaren "Här plottas anpassningen" i den första plotten för det är ju dina datapunkter som plottas där.
Du gör ju också spline en gång utan att använda det, den görs ju senare i funktionen. Som jag sagt tidigare, titta i editorn, där har nog MATLAB strukit under och sagt att du inte använder variabeln y.
Sista plotten verkar ok tycker jag.
Oj förlåt! Den här figuren räcker alltså? Med kod:
A=distanceA_km;
B=speedA_kmph;
x=linspace(min(A),max(A));
y=spline(A,B,x);
plot(A,B,'*')
hold on
x=linspace(min(A),max(A));
plot(x, velocity_routeX(x,B,A),'r*')
Som sagt, titta i editorn... y används inte (och skall inte heller användas, spline finns ju inne i funktionen).
Jag hade nog själv tagit den anpassade kurvan (dvs velocity_routeX) som en linje snarare än prickar. Tanken är ju att den skall visa anpassningen till någon form av kurva.
Såhär alltså? Om nej, då ger jag upp :( Är förvirrad och trött :/
A=distanceA_km;
B=speedA_kmph;
>> plot(A,B)
>> hold on
>> x=linspace(min(A),max(A));
>> plot(x, velocity_routeX(x,B,A),'r*')
Så menade jag, ja!
OK! Den här figuren duger till Rutt A alltså? (ska lägga till namn på axlarna och gör samma sak för Rutt B). Är läraren nöjd nu?
Lite svårt för mig att svara på... eller är jag läraren :)
Jag utgår ifrån att du är läraren :). Men med hänsyn till vad som står i uppgiften, vad tycker du?
Följande script och kod är till uppgift b), (jag får dock syntaxfel när jag anropar funktionen)...
function[v] = velocity_routeX(pos,speedX,distanceX)
%Funktionen räknar hastigheten för en given position för en viss rutt.
%Rutten ges i form av två vektorer. En med ett antal distanser på rutten
%och den andra med hastigheter för distanserna.
sd = spline(distanceX,speedX); %Här skapas ett approximerat funktionsuttryck
%för v
v = ppval(sd,pos); %Här beräknas v för given position
end
%RUTT A
A=distanceA_km;
B=speedA_kmph;
plot(A,B)
hold on
x=linspace(min(A),max(A));
plot(x, velocity_routeX(x,B,A),'r*')
xlabel('Sträckan (km)')
ylabel('Farten (km/h)')
%____________________________________
%RUTT B
C=distanceB_km;
D=speedB_kmph;
plot(C,D)
hold on
x=linspace(min(C),max(C));
plot(x, velocity_routeX(x,D,C),'r*')
xlabel('Sträckan (km)')
ylabel('Farten (km/h)')
Vad står det i felmeddelandet?
Precis som det står, de första två argumenten måste vara vektorer med minst två element.
Annars blir det svårt att interpolera...
Hur? Jag fick inte till det när jag provar med två element.
Du testar ju med velocity_routeX(20,20,20). De första två '20' måste vara vektorer och lika långa, det är ju de som är grunden för interpolationen. Den sista skall ligga inuti intervallet för de två första. Det ser ut som det är rätt i den riktiga koden, där skickar du ju tre vektorer; x, D och C.
Juste! velocity_routeX(x,D,C) fungerade bra i alla fall. Jag utgår från att detta är tillräckligt för uppgift 1 b).
Men en sista fråga bara, när jag plotar (A,B) så är det datapunkter jag plotar. Men vad kan man kalla ploten med stjärnor, en anpassning bara? Ska ha "legend" med.
Det är de två sista till din funktion men de två första till chckxy. Läs felmeddelandena, det går nerifrån och upp.
Jag tror jag såg fel när jag svarade "Så menade jag, ja" förra gången.
Det bör vara typ plot(A,B,'*') och plot(x, velocity_routeX(x,D,C)).
Det är ju datapunkterna som man uppfattar som diskreta ('*') och anpassningen velocity_routeX som man uppfattar som "kontinuerlig" (sammanhängande linje). Eller vad tycker du?
I så fall blir det ju plot(A,B,'*') och plot(x, velocity_routeX(x,B,A)) för Rutt A?
Bump :((