משתמש: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
קישורים שימושיים
[עריכת קוד מקור | עריכה]
דפי משתמש | • ![]() ![]() ![]() ![]() ![]() ![]() | |
דפי נושא | • ![]() ![]() ![]() ![]() ![]() ![]() ![]() | |
דפי גותיקה | • ![]() ![]() ![]() | |
מיזמים אחרים | • ![]() ![]() ![]() ![]() ![]() |
![]() ![]() |
תרומות וערכים | ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | |
מבחר ערכים מומלצים שכתבתי |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | |