11 svar
242 visningar
Elias93 130
Postad: 11 nov 2018 12:35

blank funktions-plot

Hej!

Varför kommer det bara upp en blank sida när jag RUN denna script?

Första gången jag skriver en funktion där ett uttryck  ska divideras med ett annat i mathlab. Jag vet inte vad som menas med elementvis multiplikation i funktioner för elementvis multiplikation används ju när man multiplicerar matriser men detta är en funktion.

woozah 1414 – Fd. Medlem
Postad: 11 nov 2018 12:45

Vad är ditt x? Du behöver ju skapa en vektor säg x=1:10 för att plotta den mot något.

woozah 1414 – Fd. Medlem
Postad: 11 nov 2018 12:57 Redigerad: 11 nov 2018 12:58

Ser nu att problemet är att din y=f(x) dividerar med / och inte ./(punkt slash). Om du vill plotta så gör istället att du skapar ett intervall (exempelvis x=0:0.1:10) och sedan en funktion (säg y=2.^x) och sedan "plot(x,y)".

Elias93 130
Postad: 11 nov 2018 13:05

Jag ska ta reda på minpunkten så intervallet måste vara öppet tills jag vet ungefär var minpunkten är. Vad är felet nu? Dessa prickar före / och * vet jag inte vad det är för utom när jag multiplicerar matriser.

woozah 1414 – Fd. Medlem
Postad: 11 nov 2018 13:05

Skillnaden mellan till exempel x*xx*x och x.*xx.*x i matlab kan vara följande:

Säg att x=[0 1 2 3 4], om du nu bara tar x*x så kommer du få en error som säger "matrix dimension does not agree! eftersom det blir felaktiga dimensioner. 

 

Däremot skulle x.*xx.*x bli elementvis multiplikation, så du skulle få en ny vektor med som är på formen x.*x=[0*0 1*1 2*2 3*3 4*4]=[0 1 4 9 16].

Du har alltså bara multiplicerat varje element med sig själv igen.

 

Om du använder x=[0 1 2 3 4] och använder att y=x^2 och z=x.^2 så får du samma problem; ^2 betyder matris*matris (och dimensioner fungerar ej i detta fall!) medan .^ att man tar varje element och kvadrerar, så du skulle få att y=x^2 (ERROR matrix dimensions does not agree) och z=x.^2=[0^2 1^2 2^2 3^2 4^2]=[0 1 4 9 16]

Elias93 130
Postad: 11 nov 2018 13:11

tack!

Men nu måste jag snart få denna funktion att inte ge en blank plot. Det funkade kort men sen sparade jag och då var det blankt igen.

woozah 1414 – Fd. Medlem
Postad: 11 nov 2018 13:20
Elias93 skrev:

tack!

Men nu måste jag snart få denna funktion att inte ge en blank plot. Det funkade kort men sen sparade jag och då var det blankt igen.

 

Först och främst: Du kan inte ge en "öppet intervall" (det vore enklare att argumentera varför stora x är irrelevanta för min-funktionen ;) )

Så här skulle jag göra: Skapa ett intervall som du tycker är relevant (vi kan överdriva och säga x=-1000:0.5:1000)

Sedan skapar jag funktionen; f=(1+x.^2-1.5*x.^3+0.5*x.^4)./(1+x.^4);

Sedan plot(x,f)

 

Det skulle alltså se ut:

x=-1000:0.5:1000; %du kan förminska intervallet efter vad du vill ha

f=(1+x.^2-1.5*x.^3+0.5*x.^4)./(1+x.^4); %funktionen

plot(x,f) %plotten av funktionen i givet intervall

woozah 1414 – Fd. Medlem
Postad: 11 nov 2018 13:26

 Om du dessutom vill ha reda på vad det minsta/största värdet är av en funktion givet intervallet xx så kan du helt enkelt skriva min(f) eller max(f), så väljer den ut minsta/största värdet i vektorn f (som är din funktion)

Elias93 130
Postad: 11 nov 2018 13:39

tack nu lyckades det. Jag försöker hitta max och minpunkter nu. Men en gång skrev jag in en funktion utan att ange intervall och då kom det upp en plot från 250 000>x<-250 000. Konstigt. 

Elias93 130
Postad: 11 nov 2018 13:53

Tack! Det lyckades även om det är lite mysko. Men jag vänjer mig nog allt eftersom. Jag trodde man måste använda x=fminbnd för funktionen och för -f(x) men det du föreslår låter enklare.

woozah 1414 – Fd. Medlem
Postad: 11 nov 2018 14:06
Elias93 skrev:

tack nu lyckades det. Jag försöker hitta max och minpunkter nu. Men en gång skrev jag in en funktion utan att ange intervall och då kom det upp en plot från 250 000>x<-250 000. Konstigt. 

 

Det låter som du måste ha indirekt definierat det intervallet, annars skulle matlab bara säga att det inte finns någon vektor att sätta in i funktionen och du får en röd text. Det går inte heller att skapa en vektor [-inf,inf] eftersom det skulle krävas...ptja, oändligt mycket tid. :P

Elias93 130
Postad: 12 nov 2018 12:33 Redigerad: 12 nov 2018 12:33

ok. En vän förklarade att linspace skapar en vektor mellan punkterna och att x är en vektor, inte en variabel. Därför vet jag nu varför jag ska sätta en punkt före * ibland.

Svara
Close