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

Nebuchadnezzar
Fibonacci
Fibonacci
Innlegg: 5648
Registrert: 24/05-2009 14:16
Sted: NTNU

Kode: Velg alt

fprintf('/n')
tall = 0;
sum  = 0;

b = input('Skriv inn en karakter: ');

if round(b)==b
    h=1;
else
    h=0;
end

if  b > 0 && b<7 && h==1
    
while b > 0 && b<7 && h==1
    
    sum = sum + b;
    tall = tall + 1;
    b = input('Skriv inn enda en karakter: ');
    
    if round(b)==b
        h=1;
    else
        h=0;
    end
    
end
  fprintf('Gjennomsnittet av karakterene ble %d /n',sum/tall)
  
else
fprintf('Du skrev ikke inn noen gydlige karakterer \n')
end
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Kode: Velg alt

function [elements sum]=funcunderN(N)

a=0;

count=0;

 i=0;
 
 matrix=[];

while a<=N
    
   
    
    i=i+1;
    
    a=a+i^2;
    
   
    count=count+1;
    
    matrix(i)=a;
    
    
    
end

 if a>=N
        
        a=a-i^2;
        
    count=count-1;
    
    matrix=matrix(1:i-1);
    
 end
    
 
 sum=count;

elements=sum(matrix);

jeg får ikke skrevet elements med denne koden her.
ærbødigst Gill
ojmik
Pytagoras
Pytagoras
Innlegg: 9
Registrert: 07/10-2011 16:23

gill skrev:jeg får ikke skrevet elements med denne koden her.
Når du kjører dårlig kode i matlab så får du en feilmelding. Denne er svært nyttig for å finne ut hvor feilen din er lokalisert. Når du kjører koden du skrev inn overfor får du feilmeldingen:

Kode: Velg alt

>> [a b]=funcunderN(5)
??? Index exceeds matrix dimensions.

Error in ==> funcunderN at 41
elements=sum(matrix);
Programmet gir deg beskjed om en feil på linje 41, og at "Index exceeds matrix dimensions". Grovt oversatt betyr det at elementet du ba om ikke finnes i matrisen.

Nå bør du tenke at dette virker noe merkelig ettersom sum ikke er en matrise men en funksjon. Hvorfor skal matlab tolke funksjonen sum som en matrise?

Hvis du ser like over, på linje 39 finner du at der har du definert sum til å være en variabel. Samtidig har du definert sum som variabel til returnering i linje en.

Siden du i m-fila di har definert sum som en variabel kan ikke matlab lenger bruke sum-funksjonen. Gi nytt navn til variabelen og du bør være i boks.
Ole J
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Kode: Velg alt

function isitalike=comparestrings(a,b)

n=length(a);

m=length(b);

c=logical(0);

y=m;

z=n;

f=0;

if m>n
    
    temp=a;
    
    a=b;
    
    b=temp;
    
end
    
    
    
    for i=1:n
        
   c=strcmp(a(i),b(1));
        
        if c
            
            j=1;
            
            if length(a(i:n))>=length(b)
        
            for k=1:length(b)
            
            while a(i)==b(j)
                
               
            
        if j==length(b)
            
             if z>y
              
        disp('b is in a')
        
       f=1;
       
     
        
        else
        
            disp('a is in b')
            
            f=1;
            
         
            
            end
            
        end
        
         j=j+1;
        
             i=i+1;
             
            end
        
        end
        
            end
            
            
                
            end
            
        end
    
koden over får jeg feilmeldingen

Kode: Velg alt

>> b

b =

vg

>> a

a =

detvgdet

>> comparestrings(a,b)
b is in a
??? Attempted to access b(3); index out of bounds because numel(b)=2.

Error in ==> comparestrings at 39
            while a(i)==b(j)
 
>> 
men jeg prøver å kutte av sammenligningen med

for k=1:length(b)

etter lengde av b skulle den hoppe over if definert over tenkte jeg. Hvorfor gjør den ikke det?
ærbødigst Gill
Nebuchadnezzar
Fibonacci
Fibonacci
Innlegg: 5648
Registrert: 24/05-2009 14:16
Sted: NTNU

% Oppgave 2 a)

% Alternativ I

Kode: Velg alt

function Y = Omvend1( a )
p=length(a);
    for i=1:p
    g(i)=a(p-i+1);
    end

Y=g;

end
% Alternativ II

Kode: Velg alt

function Y = Omvend(a)
Y = fliplr(a);
end

% Oppgave 2 b)

% Alternativ I

Kode: Velg alt

function Y = Snur(a) 
b = length(a);
c = 0;
for i=1:b
    if a(i)==a(b-i+1)
        c = c + 1;
    end
end

if c < round(b/2)
    Y = 0;
else Y = 1;
end
% Alternativ II

Kode: Velg alt

function Y=Palindrom(a)
b = strrep(a,' ','');
    if strcmpi(b,fliplr(b))
       Y=1;
    else
       Y=0;
    end
end
% Oppgave 2 c)

Kode: Velg alt

function Y = Finn(b,a)
    if strfind(a,b)>0
        Y=1;
    else
        Y=0;
    end
end
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg lurer på hva de mner med første fallgruve her at man ikke kan bruke en vektor med 1 og 0 lagret med double som true false statement

http://bildr.no/view/1027433

Dette skriptet fungerte i hvert fall

Kode: Velg alt


h=[1 0 1];

for i=1:length(h)
    
    if h(i)
        
        disp('yes')
        
    end
    
end
ærbødigst Gill
Vektormannen
Euler
Euler
Innlegg: 5889
Registrert: 26/09-2007 19:35
Sted: Trondheim
Kontakt:

Er 1 og 0 lagret som double?
Elektronikk @ NTNU | nesizer
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

vektoren h blir lagret som vanlig double?

Kjører if true eller false for h som er double var det jeg tenkte?
ærbødigst Gill
Vektormannen
Euler
Euler
Innlegg: 5889
Registrert: 26/09-2007 19:35
Sted: Trondheim
Kontakt:

Det er vel ikke vektoren, men tallene i den, som lagres som integer, double, osv. Datatypen til tallene avhenger av hvor stor presisjon som trengs. Når du skriver h = [1 0 1] så tviler jeg på at MATLAB lagrer disse heltallene som double (altså desimaltall med høy presisjon.) Prøv heller å skrive h = [1.0 0.0 1.0]. Da går det kanskje ikke.
Elektronikk @ NTNU | nesizer
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

funker med desimaltall og:

http://bildr.no/view/1027446

h blir lagret om double

oopps ingen vits i å ta med variabelen i som ble med i workspace
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

A = ceil(16*rand(20,1));
idx_log = A>10;
idx_double = double(idx_log);

Kaller du deretter

A(idx_log)

får du listet opp alle elementene i A som er større enn 10. Prøver du å kalle A(idx_double) vil du få feilmeldingen "Subscript indices must either be real positive integers or logicals.", med andre ord en mulig fallgruve hvis du ikke tenker deg om.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg lurer på det de sier nederst til venstre i øverste ark til venstre

http://bildr.no/view/1028232


at man kan slette en hel rekke eller kolonne men når jeg gjør det i matlab får jeg:

Kode: Velg alt

>> cellrowvec={1:3, 'hello', 'e', [1:3;4:6];1:3, 'hello', 'e', [1:3;4:6]}

cellrowvec = 

    [1x3 double]    'hello'    'e'    [2x3 double]
    [1x3 double]    'hello'    'e'    [2x3 double]

>> cellrowvec{1,:}=[ ]
??? The right hand side of this assignment has too few values to satisfy
 the left hand side.
 
>> 
ærbødigst Gill
espen180
Gauss
Gauss
Innlegg: 2578
Registrert: 03/03-2008 15:07
Sted: Trondheim

Prøv

Kode: Velg alt

cellrowvec(1,:)=[]
{...} refererer til innholdet i en gitt celle, mens (...) refererer til selve cellen.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

http://itgk.idi.ntnu.no/oving/lf/aud2-t ... 6392pl.pdf

lurer på flytskjemaet i oppgave 1e:

jeg tenkte at å sette i=1 og temp=list(1) skulle være et parallellogram og ikke en vanlig firkant siden det var en input og at i=i+1 skulle være firkant mens temp=list(i) skulle være parallellogram men det var det ikke i fasit. Hvordan kan i=1 være en process?
ærbødigst Gill
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

jeg lurte på oppgave 2c og spørsmålet

I hvilken dimensjon lagres x-posisjonene dersom
spillbrettet lagres som en to-dimensjonal MATLAB-tabell ?

hva er en todimensjonal MATLAB-tabell?

http://itgk.idi.ntnu.no/eksamen/gamle_e ... Matlab.pdf

fasit

http://itgk.idi.ntnu.no/eksamen/gamle_e ... b%20LF.pdf
ærbødigst Gill
Svar