משתמש:MathKnight-at-TAU/מעבדת MATLAB

מתוך ויקיפדיה, האנציקלופדיה החופשית

טיוטה לשיפור הערך MATLAB.

תחביר[עריכת קוד מקור | עריכה]

בסיסי[עריכת קוד מקור | עריכה]

>> x = 2 * pi
x =
   6.2832

A = [3+2i 7-8i]
>> A =
   3.0000 + 2.0000i   7.0000 - 8.0000i
>> tol = 3 * eps
tol =
   6.6613e-016

>> intmax('uint64')
ans =
   18446744073709551615

מערכים ומטריצות[עריכת קוד מקור | עריכה]

יצירת מערך בריווח קבוע
% integer space
>> grid1 = 0:1:10
grid1 =
     0     1     2     3     4     5     6     7     8     9    10
>> grid2 = linspace(0,10,11)
grid2 =
     0     1     2     3     4     5     6     7     8     9    10
% fractional space
>> grid3 = 0:0.1:1
grid3 =
         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000
>> grid4 = linspace(0,1,11)
grid4 =
         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000

שימו לב: כדי לקבל ריווח של הפרמטר n צריך להיות .

תחביר פשוט יותר הוא תחביר הנקודה פסיק (semicolon). המבנה הכללי הוא - first:step:last, כלומר: ערך התחלה, גודל הצעד (יכול להיות כל מספר רציונלי, ובפרט גם מספר שלילי או שבר) וערך סופי.

>> A = -6:2:6
A =
    -6    -4    -2     0     2     4     6
>> B = -1.5:0.5:2.5
B =
   -1.5000   -1.0000   -0.5000         0    0.5000    1.0000    1.5000    2.0000    2.5000
% Launching sequence initiated
>> C = 10:-1:0
C =
    10     9     8     7     6     5     4     3     2     1     0
% We have a liftoff!
יצירת מערכת צירים דו-ממדית (גריד 2D)
[X,Y]=meshgrid(-2:1:2)
X =
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
Y =
    -2    -2    -2    -2    -2
    -1    -1    -1    -1    -1
     0     0     0     0     0
     1     1     1     1     1
     2     2     2     2     2
>> [X,Y]=meshgrid(-2:1:2,-1:0.5:1)
X =
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
    -2    -1     0     1     2
Y =
   -1.0000   -1.0000   -1.0000   -1.0000   -1.0000
   -0.5000   -0.5000   -0.5000   -0.5000   -0.5000
         0         0         0         0         0
    0.5000    0.5000    0.5000    0.5000    0.5000
    1.0000    1.0000    1.0000    1.0000    1.0000

>> [X,Y]=meshgrid(-1:1:1,0:1:2)
X =
    -1     0     1
    -1     0     1
    -1     0     1
Y =
     0     0     0
     1     1     1
     2     2     2
יצירת מערכת צירים תלת-ממדית (גריד 3D)
>> [X,Y,Z]=meshgrid(-1:1:1)
X(:,:,1) =
    -1     0     1
    -1     0     1
    -1     0     1
X(:,:,2) =
    -1     0     1
    -1     0     1
    -1     0     1
X(:,:,3) =
    -1     0     1
    -1     0     1
    -1     0     1
Y(:,:,1) =
    -1    -1    -1
     0     0     0
     1     1     1
Y(:,:,2) =
    -1    -1    -1
     0     0     0
     1     1     1
Y(:,:,3) =
    -1    -1    -1
     0     0     0
     1     1     1
Z(:,:,1) =
    -1    -1    -1
    -1    -1    -1
    -1    -1    -1
Z(:,:,2) =
     0     0     0
     0     0     0
     0     0     0
Z(:,:,3) =
     1     1     1
     1     1     1
     1     1     1
גישה לאיברים במטריצה
>> A = magic(3)
A =
     8     1     6
     3     5     7
     4     9     2
>> A(1,3)
ans =
     6
>> A(3,2)
ans =
     9
>> sum(A(1,:))
ans =
    15
>> sum(A(1,1:2:3))
ans =
    14
>> sum(A)
ans =
    15    15    15
>> sum(A(:,3))
ans =
    15
הפיכת מטריצה לווקטור עמודה
>> Random_Matrix = rand(2,2)
Random_Matrix =
    0.9797    0.1111
    0.4389    0.2581
>> Random_Vector = Random_Matrix(:)
Random_Vector =
    0.9797
    0.4389
    0.1111
    0.2581
יצירת מטריצת בלוקים
>> A = magic(3);
B = [-5 -6 -9; -4 -4 -2];
C = eye(2) * 6;
>> D = blkdiag(A,B,C)
D =
     8     1     6     0     0     0     0     0
     3     5     7     0     0     0     0     0
     4     9     2     0     0     0     0     0
     0     0     0    -5    -6    -9     0     0
     0     0     0    -4    -4    -2     0     0
     0     0     0     0     0     0     6     0
     0     0     0     0     0     0     0     6

% building Jordan block matrix from Jordan blocks
>> J1 = 2*eye(2)+diag([1],1), J2=3*eye(2), J3 = 6*eye(3)+diag([1 1],1)
J1 =
     2     1
     0     2
J2 =
     3     0
     0     3
J3 =
     6     1     0
     0     6     1
     0     0     6
>> D = blkdiag(J1,J2,J3)
D =
     2     1     0     0     0     0     0
     0     2     0     0     0     0     0
     0     0     3     0     0     0     0
     0     0     0     3     0     0     0
     0     0     0     0     6     1     0
     0     0     0     0     0     6     1
     0     0     0     0     0     0     6
הבדל בין שחלוף להצמדה (תקף רק לגבי מטריצות עם איברים מרוכבים)
>> C = [1,i; 3 2i]
C =
   1.0 + 0.0i   0.0 + 1.0i
   3.0 + 0.0i   0.0 + 2.0i
>> C.'
ans =
   1.0 + 0.0i   3.0 + 0.0i
   0.0 + 1.0i   0.0 + 2.0i
>> C'
ans =
   1.0 + 0.0i   3.0 + 0.0i
   0.0 - 1.0i   0.0 - 2.0i

לוגיקה[עריכת קוד מקור | עריכה]

השוואות בין מספרים

הקוד שלהלן מציג את אופרטורי ההשוואה העיקריים: שווה (==), לא שווה (=~), קטן שווה (=>) וגדול שווה (=<). הקוד מחזיר 1 לוגי אם התנאי הלוגי נכון ו-0 לוגי אחרת.

% equal, not equal, less or equal, greater than or equal
>> Rel = [ 1==1, 1~=1, 1 <= 2, 3 >= 2 ]
Rel =
     1     0     1     1
</syntxhighlight>

באמצעות אופרטורים בינאריים אפשר ליצור ביטויים לוגיים מורכבים. הסימון ~ מייצג NOT, הסימון & מייצג AND, הסימון | מייצג OR. ראו דוגמה להלן:

<syntaxhighlight lang="matlab">
% Logical not, and, or, xor
>> BinOps = [ ~(1==0) , (1==1) & (2==2), (0==1) | (0==0) , xor(1>2,2>1) ]
BinOps =
     1     1     1     1

מומלץ להשתמש באופרטורים && עבור AND ו-|| עבור OR, שכן הם יעילים יותר (short-circuit logics).

>> 0 == 1 || 2 > 0
ans =
     1
>> 0 == 1 && 2 > 0
ans =
     0

>> ( (6 > 0) || isprime(6) ) && isprime(47)
ans =
     1

מבני זרימה ותכנות[עריכת קוד מקור | עריכה]

פקודת תנאי if
x = 3;
>> if x >= exp(1)
x^2
else sqrt(x)
end
ans =
     9

>> if 3 > 2 && 3 == 1+2, disp 'yup', else disp 'bummer', end
yup

>> A = ones(2,3);            % Two-dimensional array
B = rand(3,4,5);          % Three-dimensional array

if isequal(size(A), size(B))
   C = [A; B];
else
   warning('A and B are not the same size.');
   C = [];
end
Warning: A and B are not the same size. 

x = 42;
if exist('myfunction.m') && (myfunction(x) >= pi)
   disp('Condition is true')
   else disp('No function, sorry.')
end
No function, sorry.
לולאת for
% calculating 2^10 = 1024
>> base=2;
for n=2:10
 base=base*2;
end
base
base =
        1024

>> for s = 1.0: -0.1: 0.0
   disp(s)
end
     1
    0.9000
    0.8000
    0.7000
    0.6000
    0.5000
    0.4000
    0.3000
    0.2000
    0.1000
     0

>> for s = [6,36,0,pi]
   disp(s)
end
     6
    36
     0
    3.1416

>> for e = eye(2)
  disp('Current value of e:')
  disp(e)
end
Current value of e:
     1
     0
Current value of e:
     0
     1
>>
לולאת while
>> n = 1;
nFactorial = 1;
while nFactorial < 1e100
    n = n + 1;
    nFactorial = nFactorial * n;
end
n =
    70

>> % Find the root of the polynomial x3 - 2x - 5 using interval bisection.

a = 0; fa = -Inf;
b = 3; fb = Inf;
while b-a > eps*b
   x = (a+b)/2;
   fx = x^3-2*x-5;
   if fx == 0
      break
   elseif sign(fx) == sign(fa)
      a = x; fa = fx;
   else
      b = x; fb = fx;
   end
end
disp(x)
    2.0946
פיצול למקרים, פקודת case
>> mynumber=1;
>> switch mynumber
    case -1
        disp('negative one');
    case 0
        disp('zero');
    case 1
        disp('positive one');
    otherwise
        disp('other value');
end
positive one

דוגמאות שימושיות ומורכבות יותר[עריכת קוד מקור | עריכה]

שרטוט גרף תלת-ממדי
>> [X,Y] = meshgrid(-2:0.1:2);
>> Z = X .* exp(-X.^2 - Y.^2);
>> surf(X,Y,Z)
>> W = X.^2 - Y.^2;
>> surf(X,Y,W)
שימוש בנקודה-פסיק לבניית מטריצה בלולאת for
>> A = zeros(2);
>> for i=1:2, for j=1:2, A(i,j)=i+j, end, end
A =
     2     0
     0     0
A =
     2     3
     0     0
A =
     2     3
     3     0
A =
     2     3
     3     4
>> A(1,:)
ans =
     2     3
>> A(:,2)
ans =
     3
     4
אינדקסים לוגיים
>> A = magic(4)
A =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
>> B = isprime(A)
B =
     0     1     1     1
     1     1     0     0
     0     1     0     0
     0     0     0     0
>> A(B)
ans =
     5
     2
    11
     7
     3
    13
>> A(B)'
ans =
     5     2    11     7     3    13
יצירת מערך של מספרים אקראיים ומיונו
>> B1 = rand(3)
B1 =
    0.5870    0.4709    0.1948
    0.2077    0.2305    0.2259
    0.3012    0.8443    0.1707
>> sum(diag(B1))
ans =
    0.9882
% creating random array and then sorting it
>> B2 = rand(1,7)
B2 =
    0.2277    0.4357    0.3111    0.9234    0.4302    0.1848    0.9049
>> B3 = sort(B2)
B3 =
    0.1848    0.2277    0.3111    0.4302    0.4357    0.9049    0.9234

קישורים שימושיים[עריכת קוד מקור | עריכה]


דפי משתמש MathKnight (דף משתמש, שיחה, תרומות)‏ • משתמש:MathKnight-at-TAU‏ (מתמטיקה)‏ • MathKnight/גלריה ארגז כלים
דפי נושא • ‏ MathKnight/ ‏ • ‏MathKnight/‏D9‏ • MathKnight/טריצרטופס ‏ • MK/תנינים MK/חמציצים
דפי גותיקה MathKnight/אדריכלות גותית MathKnight/מבנים גותיים • (סקר אדריכלות גותית) • MathKnight/דום מטאל ומטאל גותי
מיזמים אחרים ויקישיתוף‏ • ויקיפדיה האנגלית ויקיציטוט ויקינתוניםויקימינים MathKnight/ניווט
תרומות וערכים ערכים ותרומות עיקריות כל תרומותיי ישראלצבא וטכנולוגיה צבאית ‏ • מתמטיקה פיזיקה מדעי החיים והטבע דינוזאורים אדריכלות גותית ונאו-גותית ציוד מכני הנדסי וכלי רכב
מטאל ורוק כבד אישים ספרים ספרות, קולנוע, טלוויזיה וקומיקס ספורט וספורטאים כללי ושונות
מבחר ערכים
מומלצים שכתבתי
הרשימה המלאה דחפור די-9 בשירות צה"ל טריצרטופס תנינאים תנין היאור תנין הים דיינוסוכוס
אדריכלות גותית קתדרלת קלן נוטרדאם פריז חיל ההנדסה הקרבית מרכבה (טנק) פילוסופיה של המתמטיקה.