min matlabtråd

Det er god trening å prate matematikk. Her er det fritt fram for alle. Obs: Ikke spør om hjelp til oppgaver i dette underforumet.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

1) c = a | b gir c(i) = 1 der a(i) eller b(i) = 1, og c(i) = 0 der a(i) og b(i) = 0
2) c = a & b gir c(i) = 1 der a(i) = 1 og b(i) = 1, og c(i) = 0 der a(i) eller b(i) = 0.
3) c = a==b gir c(i) = 1 der a(i) = b(i) og 0 der a(i) != b(i)

For ikke-binære sekvenser så skilles det på elementer lik null og elementer ulik null i 1) og 2). Dvs hvis a = [1 3 2] og b = [0 3 1] så vil c = a & b = [0 1 1], mens c = a | b = [1 1 1]. 3) gjelder uansett verdier da man gjør en direkte sammenligning mellom elementene.

Og samme greia for matriser. Elementvis sammenligning.

Ellers må jeg si at du burde øve deg på å uttrykke deg tydeligere, for det er ikke innlysende hva du vil fram til (og sånt blir du straffet for senere i studiet når du skal skrive rapporter osv).
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Skal prøve å formulere meg:) Takk for tilbekemelding!

Jeg har et problem med å få en funksjon vist i boka til å fungere i matlab. Funksjonen printem vist her:

http://bildr.no/view/1004261

Her er mitt forsøk:

http://bildr.no/view/1004263

Her er function printem sin tekst:

function printem(a,b)

fprintf('the first number is %.lf and the second is %.lf\n',a,b)
end
ærbødigst Gill
espen180
Gauss
Gauss
Innlegg: 2578
Registrert: 03/03-2008 15:07
Sted: Trondheim

Du har visst lest feil og skrevet %.lf der det skal stå %.1f.

%.nf der n er et natulig tall viser et tall rundet til n desimaler.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Takk!

http://bildr.no/view/1004608

Jeg lurer på hvorfor de har gått fra double til int32 i subfunction i øverste del her som heter askforn. Jeg har prøvd uten og det fungerer helt fint i tilegg har int32 lavere begrensing for høyeste tall enn double.

Dette fungerte og helt fint:

function outn=askforn

inputnum=input('Enter a positive integer for n ')

while inputnum<0

inputnum=input('Invalid! Enter a positive integer ')

end

outn=inputnum

end
Sist redigert av gill den 19/10-2011 19:50, redigert 1 gang totalt.
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

Tror du har glemt å legge til link. ;)
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

oj der kom den ja. Beklager så mye har lagt den til nå i hvert fall
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

De bruker int32() for å sjekke om tallet du skriver inn er et heltall eller ei. Ved å bruke double så kan du skrive inn flyttall, og det er ikke det de ber om. Men en double datatype kan jo også være et heltall, og det sjekker de ved å konvertere tallet til til int32 og sjekke om tallene er like.

Hvis du ikke vil konvertere til int32 (eller andre heltallstyper) så kan du sikkert sjekke om mod(n,1) er lik null eller ikke. Hvis mod(n,1) er lik null så er n et heltall, hvis ikke så er det ikke det.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg lurer på hva de mener med det de har skrevet nedenfor nederst i 6.4
http://bildr.no/view/1005050

altså: Running this function does not add any variables to the base workspace, as demonstrated in the following:

>>clear
>>who
>>disp(mysum([5 9 1]))
15
>>who
>>

Når jeg bruker disp får jeg heller ingen ting i workspace i matlab lagret:
http://bildr.no/view/1005048

Men når jeg kjører funksjonen får jeg ans lagret som variabel:
http://bildr.no/view/1005049

Og da har jo noe blitt lagret i base workspace eller? Jeg vet at disp ikke lagrer noe ans (det står i boka og) men her sier de at de skal kjøre funksjonen og jeg tolker ikke det som at de sier at man må bruke disp her

Videre sier de at for script blir variabler de bruker i scriptet lagret i workspace:

http://bildr.no/view/1005057

Så jeg ser det er forskjell på hva som blir lagret med å kjøre script mot å kjøre funksjon som bare lagrer ans. Er det kanskje det som er hele poenget?
ærbødigst Gill
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

http://bildr.no/view/1005978

Jeg lurer på hvordan de kaller bar-grafen med eval nederst i link over. Jeg får det bare til slik:

http://bildr.no/view/1005980
ærbødigst Gill
espen180
Gauss
Gauss
Innlegg: 2578
Registrert: 03/03-2008 15:07
Sted: Trondheim

De viser en situasjon er du i prinsippet ikke kan vite hva slags plott som brukeren vil be om. Ved å la brukeren skrive det inn og legge det til en streng, kan du velge riktig plott med eval. Alternativet er å lage en lang if-løkke det du tar høyde for alle (sannsynlige) muligheter.

eval('str') er en kommando som evaluerer strenger MATLAB-kommandoer. Det er derfor mulig å generere dynamiske kommandoer ved å lage og lime sammen strenger.

Generellt er det derimot så godt som aldri lurt å bruke eval. Så godt som alle situasjoner der eval kan brukes, kan du gjøre det bedre og raskere på en annen måte.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

ja skulle gjerne holdt meg unna eval men siden den er en del av pensum kan man vel ikke utelukke at den dukker opp på eksamen heller selv om det ser ut som jeg bør håpe på det!

http://bildr.no/view/1005974

http://bildr.no/view/1005975

her i quick question lager de en eval(['sin('angle')']) (øverst i andre del av quick question)

som jeg ikke får til å fungere en gang. Her er mine forsøk:

http://bildr.no/view/1006555
ærbødigst Gill
espen180
Gauss
Gauss
Innlegg: 2578
Registrert: 03/03-2008 15:07
Sted: Trondheim

sin funksjonen kan ikke ta strenger som input. Du må gjøre dn om til double type ved å bruke str2num.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

http://bildr.no/view/1007012


Jeg har prøvd å lage denne funksjonen selv men jeg får et problem med en av verdiene:

Her er funksjonen:
inputfield=input('Which field would you like to see: ','s')

if isfield(package, inputfield)

fprintf('The value of the %s field is: %c\n',inputfield,...
eval(['package.' inputfield]))

else
fprintf('Error: %s is not valid field\n', inputfield)

end

jeg prøvde å kalle den i matlab og definerte først strukturen:

>> package=struct('item_no',123,'cost',19.99,'price',39.95,'code','g')
package =
item_no: 123
cost: 19.9900
price: 39.9500
code: 'g'
>> structurevalue
Which field would you like to see: cost
inputfield =
cost
The value of the cost field is: 1.999000e+001
>> structurevalue
Which field would you like to see: item_no
inputfield =
item_no
The value of the item_no field is: {

hvorfor ble den siste verdien {?
ærbødigst Gill
ojmik
Pytagoras
Pytagoras
Innlegg: 9
Registrert: 07/10-2011 16:23

gill skrev: ...

fprintf('The value of the %s field is: %c\n',inputfield,...
eval(['package.' inputfield]))

...

The value of the item_no field is: {

hvorfor ble den siste verdien {?
%c forteller fprintf funksjonen å hvis mulig tolke verdien som en char. 123 i ascii-tabellen er '{'.
Ole J
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg skulle prøve å lage en datafil i matlab som besto av tall og bokstaver. Jeg prøvde slik:

>> wordandnumbers=[5.3 'a'; 2.2 'b'; 3.3 'a'; 4.4 'a'; 1.1 'b']

wordandnumbers =

a
b
a
a
b

>>


grunnen til at jeg ville lage en var at de i matlabboka definerte en fil som besto av både tall og bokstaver som heter type subjexp.dat:

http://bildr.no/view/1007434

Hvordan fikk de laget den?
ærbødigst Gill
Svar