MatLab – Cvičení 2

Zadání

  1. Vygenerujte 3D matici C s náhodnými rozměry v rozsahu 10 – 40, ke generování
    rozměrů použijte příkaz rand, k zaokrouhlováni floor, ceil, fix nebo round a ke
    generování matice příkaz randn.
  2. Spočítejte průměr všech prvků C různými způsoby
      1. cyklus for
      2. příkaz mean
      3. příkaz sum

    Ke zjištění rozměrů C použijte funkci size.

  3. Převeďte pole C(1,:,:) na 2D matici (příkazy squeeze nebo reshape)
  4. Kladné hodnoty v C přepište jejich druhou odmocninou, hodnoty v rozmezí (-1,-0.5]
    přepište hodnotou 0 a ostatní jejich třetí mocninou. Použijte cyklus for a podmínky if, elseif, else.
    Stejný úkol vyřešte pomocí logického indexování.
  5.  Naprogramujte funkci, která z každého prvku x vstupní proměnné vrací hodnotu sin2(x)cos(x), a tedy funguje stejně jako standardní funkce v Matlabu (tj. „po prvcích“).
  6. Pomocí příkazu dir zjistěte součet velikostí všech souborů začínajících vybraným písmenem v nějakém adresáři (vyberte takový adresář, aby nějaké takové soubory obsahoval).

Řešení

Hlavní program

clear *
close all
clc
%-------------1-------------
x = floor(10 + (40 - 10).*rand(1,1)); %Vygeneruje náhodnou hodnotu v rozssahu 10-40 a zaokrouhlí jí
y = floor(10 + (40 - 10).*rand(1,1));
z = floor(10 + (40 - 10).*rand(1,1));
C = randn(x,y,z); %Vygeneruje 3D matici C o náhodných rozměrech
%-------------2-------------
soucet = 0;
%Prochází celou matici a hodnoty přičítá do součtu
for i = 1:size(C,1)
    for j = 1:size(C,2)
        for k = 1:size(C,3)
            soucet = soucet + C(i,j,k);
        end
    end
end

prumer1 = soucet./(x.*y.*z); %Ssoučet vydělíme počty prvků 3D matice => dostaneme průměr
prumer2 = mean(mean(mean(C))); %Průměr prvků 3D matice C příkazem mean
prumer3 = sum(sum(sum(C)))/(x.*y.*z); %Průměr prvků 3D matice C příkazem sum => sečte prvky 3D matice a vydělí je počtem prvků 3D matice C
%-------------3-------------
A = squeeze(sum(sum(C, 3), 4));
%-------------4-------------
%Pomocí cyklu for a podmínek if/elseif/else
%Procházíme celou matici
for i = 1:size(C,1)
    for j = 1:size(C,2)
        for k = 1:size(C,3)
          if(C(i,j,k) >= 0) %Pokud bude hodnota větší nebo rovno 0 tak jí odmocni
              C(i,j,k) = sqrt(C(i,j,k));
          elseif((C(i,j,k) > (-1)) && (C(i,j,k) <= (-0.5))) %Pokud bude hodnota v intervalu (-1;-0,5] tak jí přepiš na 0
           C(i,j,k) = 0; 
          else
            C(i,j,k) = C(i,j,k).*C(i,j,k).*C(i,j,k); %Ostatní umocni na 3
          end    
        end
    end
end
%Pomocí logického indexování
C(C>0)= (C(C>0)).^(1/2);
C(and((C>-1),(C<-0.5)))= 0;
C(C<-1)= C(C<-1).^3;
%-------------5-------------
%Nachází se v souboru cv2fc.m
%-------------6-------------
files = dir('C:\Users\Lukáš\Documents\MatLab\c*'); %Zjistí počet souborů začínající na "c" v danné složce
sum([files.bytes]) %sečte velikosti souborů a vypíše je

Funkce

function [x] = cv2fc( x )
    x = sin(x)*sin(x)*cos(x);
end

You may also like...

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *