Difference between revisions of "Упрaжнение 2. Matlab"

From Ilianko
 
(30 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
 
== Help ==
 
== Help ==
  
 +
<code>
 
>>help
 
>>help
  
>>symbolic toolbox
+
>>help symbolic toolbox
  
 
>>demo
 
>>demo
 +
</code>
 +
 +
 +
== Индексиране на вектори ==
  
*Индексиране на вектори
 
 
   v = [1 2 3 Inf 0 2 NaN]
 
   v = [1 2 3 Inf 0 2 NaN]
 +
Inf <=> bezkrajnost
 +
NaN <=> nesyshtestwuwa
  
 
   функция isfinite() - връща само крайните стойности
 
   функция isfinite() - връща само крайните стойности
 
   v(isfinite(v) ) = []
 
   v(isfinite(v) ) = []
  
 +
Връщане на всички стойности от зададения интервал и записване в изходната променлива v
 +
 
 +
<code><pre>
 
v(v>4 | v<1)  = []
 
v(v>4 | v<1)  = []
 +
</pre></code>
  
вектор с равномерно разпределение
+
=== вектор с равномерно разпределение ===
 
   a + (b-a)*rand(1,7)
 
   a + (b-a)*rand(1,7)
  
  
== Хистограма ==
+
=== Хистограма ===
Хистограма на нормално разпределение
+
Изчертаване на хистограма на (нормално разпределение).
 
+
<code><pre>
 
>> y = round(100*randn(1,10000));
 
>> y = round(100*randn(1,10000));
 
>> hist(y,20)
 
>> hist(y,20)
 +
</pre></code>
  
 
== Двумерна графика ==
 
== Двумерна графика ==
Line 49: Line 59:
  
 
Разделяме прозореца 4 части
 
Разделяме прозореца 4 части
 
+
Изчертаване на няколко графики в един прозорец
 +
<code><pre>
 
>> subplot(2,2,1)
 
>> subplot(2,2,1)
 
+
</pre></code>
 
затихваща синусоида с различен коеф. на затихваме
 
затихваща синусоида с различен коеф. на затихваме
 
+
<code><pre>
y = e^(-k*x.sin(x))
+
y = exp(-k*x.*sin(x))
  
 
>>k = [0.1, 0.2, 0.3, 0.4]
 
>>k = [0.1, 0.2, 0.3, 0.4]
 
>>x = 0:pi/100:6*pi
 
>>x = 0:pi/100:6*pi
 +
</pre></code>
 +
  
 
Създаване на потребителски функции.
 
Създаване на потребителски функции.
Line 82: Line 95:
 
end
 
end
 
</pre></code>
 
</pre></code>
 
+
<pre>
>>for i =1:4  
+
>>for i =1:4
 
subplot(2,2,i);
 
subplot(2,2,i);
 
plot(x, f(x,k(i)), 'r' );
 
plot(x, f(x,k(i)), 'r' );
 
end
 
end
 
+
</pre>
 
>>ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)', [-6*pi 6*pi])
 
>>ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)', [-6*pi 6*pi])
  
Line 97: Line 110:
 
тестване:
 
тестване:
 
>>path
 
>>path
 +
 +
== Достъп до променливи ==
 +
 +
Локални
 +
Глобални променливи
 +
 +
Workspace - обхваща цялото пространство
 +
 +
Всяка функция си има собствено пространство
 +
 +
f(x,y) с аргументите на функцията се предават променливи от основния воркспаце към функцията
 +
 +
>> global x,y; прави глобални променливите, трябва да се извика и във функцията;
 +
 +
 +
== Пример скрипт файл ==
 +
 +
Създайте файл със следните редове
 +
<code><pre>
 +
A = input( 'A = [x1 y1 z1] , wekto s tri  koordinati:')
 +
B = input( 'B = [x2 y2 z2] , wekto s tri  koordinati:')
 +
 +
d = sqrt(  (A(1)-B(1))^2 + (A(2)-B(2))^2 + (A(3)-B(3))^2 );
 +
 +
disp(['sumata e ', num2str(d)]) % преобразуване от число в стринг
 +
</pre></code>
 +
 +
Изпълнете в работаната среда
 +
<code><pre>
 +
>> ab
 +
A = [x1 y1 z1] , wekto s tri  koordinati:[0 0 0]
 +
 +
A =
 +
 +
    0    0    0
 +
 +
B = [x2 y2 z2] , wekto s tri  koordinati:[1 1 1]
 +
 +
B =
 +
 +
    1    1    1
 +
 +
sumata e 1.7321
 +
</pre></code>
 +
 +
== Извикване на коментар на функция от команден ред ==
 +
Коментарите между декларирането на функцията и първата променлива се извеждат като help.
 +
 +
<code><pre>
 +
function d = ab_f(A,B)
 +
% Prograма за намиране разстянието между две триизмерни точки
 +
% Входни аргументи
 +
% Вектор А = [a b c] с координатите на т.А
 +
% Вектор B = [a b c] с координатите на т.B
 +
d = sqrt(  (A(1)-B(1))^2 + (A(2)-B(2))^2 + (A(3)-B(3))^2 );
 +
% ala bala
 +
end
 +
</pre></code>
 +
 +
Иzwevdaне не komentaрите до първия изпълним ред
 +
<code><pre>
 +
>>help ab_f
 +
  Prograма за намиране разстянието между две триизмерни точки
 +
  Входни аргументи
 +
  Вектор А = [a b c] с координатите на т.А
 +
  Вектор B = [a b c] с координатите на т.B
 +
</pre></code>
 +
 +
<code><pre>
 +
>>ab_f([0 0 0], [1 1 1])
 +
 +
ans =
 +
 +
    1.7321
 +
</pre></code>
 +
 +
== Смяна на показваната точност ==
 +
<code><pre>
 +
>>format long
 +
</pre></code>
 +
== Предаване на данни ==
 +
чрез обявяването им като глобални
 +
 +
Създава се файл ab_g.m
 +
<code><pre>
 +
function [a , d] = ab_g(A,B)
 +
% Prograма за намиране разстянието между две триизмерни точки
 +
% Входни аргументи
 +
% Вектор А = [a b c] с координатите на т.А
 +
% Вектор B = [a b c] с координатите на т.B
 +
global p;
 +
d = sqrt(  (A(1)-B(1))^2 + (A(2)-B(2))^2 + (A(3)-B(3))^2 );
 +
a = d/p
 +
%
 +
end
 +
</pre></code>
 +
 +
Workspace
 +
<code><pre>
 +
>> global p;
 +
>> p = 3;
 +
>>[s , x] = ab_g([0 0 0], [1 1 1])
 +
</pre></code>
 +
 +
== Условни оператори ==
 +
 +
=== for Втори вариант ===
 +
 +
Сумиране на колоните на матрица
 +
<code><pre>
 +
>>A = magic(7) % задаване на магическа матрица
 +
 +
A =
 +
 +
    30    39    48    1    10    19    28
 +
    38    47    7    9    18    27    29
 +
    46    6    8    17    26    35    37
 +
    5    14    16    25    34    36    45
 +
    13    15    24    33    42    44    4
 +
    21    23    32    41    43    3    12
 +
    22    31    40    49    2    11    20
 +
 +
>> for i = A
 +
i', sum(i)
 +
end
 +
</pre></code>
 +
 +
=== while ===
 +
<code><pre> 
 +
while <expression>
 +
  statements
 +
end
 +
</pre></code>
 +
 +
== Въвеждане на стойности на функции в диалогов режим ==
 +
 +
<code><pre>
 +
while 1 %  безкраен цикъл
 +
    x = input('x = ');
 +
    y = sin(x);
 +
    disp(['resultat',num2str(y)]);
 +
    disp('press any button');
 +
    pause;
 +
    an = input('prodylzhi (y/n)', 's'); % s - ще въвеждаме стринг
 +
    if ( (an == 'y' || an == 'Y'))
 +
        break; % Излизане от безкрайния цикъл
 +
    end
 +
end
 +
</pre></code>
 +
 +
Намиране корени на полином по метода на Newton
 +
<code><pre>
 +
>> x = 0:0.01:1.5;;
 +
>> plot(x,newton(x)), grid on;
 +
>>
 +
>> a = 0.1, b = 0;
 +
>> eps = 1.e-10
 +
 +
eps =
 +
 +
  1.0000e-10
 +
 +
>> while  abs (b-a) >=eps
 +
b=a;
 +
a = a-newton(a)/fp(a)
 +
end
 +
</pre></code>
 +
 +
[[Category:Matlab]]

Latest revision as of 14:28, 16 April 2011

Help

>>help

>>help symbolic toolbox

>>demo


Индексиране на вектори

 v = [1 2 3 Inf 0 2 NaN]

Inf <=> bezkrajnost NaN <=> nesyshtestwuwa

 функция isfinite() - връща само крайните стойности
 v(isfinite(v) ) = []

Връщане на всички стойности от зададения интервал и записване в изходната променлива v

v(v>4 | v<1)  = []

вектор с равномерно разпределение

 a + (b-a)*rand(1,7)


Хистограма

Изчертаване на хистограма на (нормално разпределение).

>> y = round(100*randn(1,10000));
>> hist(y,20)

Двумерна графика

Цвят на линията, ..., включване на грид >> hist(y,20), grid on

Много прозорци plot в един

subplot(3,2,1)

m = 3 -> редове n = 2 -> koloni a = 1 -> ацтивен

plot

Въвеждане на специални символи

Синтаксис от Latex

Скриптови файлове

поредица от команди записани във файл


Разделяме прозореца 4 части Изчертаване на няколко графики в един прозорец

>> subplot(2,2,1)

затихваща синусоида с различен коеф. на затихваме

y = exp(-k*x.*sin(x))

>>k = [0.1, 0.2, 0.3, 0.4]
>>x = 0:pi/100:6*pi


Създаване на потребителски функции. Два входящи елемента x,k

Създаваме нов m файл!

  • Името на файла трябва да отговаря на името на функцията
  • оператор точка за по елементно умножение

for - при незадаване на стъпка, тя е единица

Управляващи оператори на plot(x,y, 'r:')

function y = f( x,k ) 

%UNTITLED Summary of this function goes here
%   Detailed explanation goes here

y = 2.^( (-k*x).*sin(x) );

end
>>for i =1:4
subplot(2,2,i);
plot(x, f(x,k(i)), 'r' );
end

>>ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)', [-6*pi 6*pi])

Създаване на директория

Конфигуриране на собствена директория и даване на пътя

file -> set path ...

тестване: >>path

Достъп до променливи

Локални Глобални променливи

Workspace - обхваща цялото пространство

Всяка функция си има собствено пространство

f(x,y) с аргументите на функцията се предават променливи от основния воркспаце към функцията

>> global x,y; прави глобални променливите, трябва да се извика и във функцията;


Пример скрипт файл

Създайте файл със следните редове

A = input( 'A = [x1 y1 z1] , wekto s tri  koordinati:')
B = input( 'B = [x2 y2 z2] , wekto s tri  koordinati:')

d = sqrt(  (A(1)-B(1))^2 + (A(2)-B(2))^2 + (A(3)-B(3))^2 );

disp(['sumata e ', num2str(d)]) % преобразуване от число в стринг

Изпълнете в работаната среда

>> ab
A = [x1 y1 z1] , wekto s tri  koordinati:[0 0 0]

A =

     0     0     0

B = [x2 y2 z2] , wekto s tri  koordinati:[1 1 1]

B =

     1     1     1

sumata e 1.7321

Извикване на коментар на функция от команден ред

Коментарите между декларирането на функцията и първата променлива се извеждат като help.

function d = ab_f(A,B)
% Prograма за намиране разстянието между две триизмерни точки
% Входни аргументи 
% Вектор А = [a b c] с координатите на т.А
% Вектор B = [a b c] с координатите на т.B
d = sqrt(  (A(1)-B(1))^2 + (A(2)-B(2))^2 + (A(3)-B(3))^2 );
% ala bala
end

Иzwevdaне не komentaрите до първия изпълним ред

>>help ab_f
  Prograма за намиране разстянието между две триизмерни точки
  Входни аргументи 
  Вектор А = [a b c] с координатите на т.А
  Вектор B = [a b c] с координатите на т.B
>>ab_f([0 0 0], [1 1 1])

ans =

    1.7321

Смяна на показваната точност

>>format long 

Предаване на данни

чрез обявяването им като глобални

Създава се файл ab_g.m

function [a , d] = ab_g(A,B)
% Prograма за намиране разстянието между две триизмерни точки
% Входни аргументи 
% Вектор А = [a b c] с координатите на т.А
% Вектор B = [a b c] с координатите на т.B
global p;
d = sqrt(  (A(1)-B(1))^2 + (A(2)-B(2))^2 + (A(3)-B(3))^2 );
a = d/p
%
end

Workspace

>> global p;
>> p = 3;
>>[s , x] = ab_g([0 0 0], [1 1 1])

Условни оператори

for Втори вариант

Сумиране на колоните на матрица

>>A = magic(7) % задаване на магическа матрица

A =

    30    39    48     1    10    19    28
    38    47     7     9    18    27    29
    46     6     8    17    26    35    37
     5    14    16    25    34    36    45
    13    15    24    33    42    44     4
    21    23    32    41    43     3    12
    22    31    40    49     2    11    20

>> for i = A
i', sum(i)
end

while

  
while <expression>
  statements
end

Въвеждане на стойности на функции в диалогов режим

while 1 %  безкраен цикъл
    x = input('x = ');
    y = sin(x);
    disp(['resultat',num2str(y)]);
    disp('press any button');
    pause;
    an = input('prodylzhi (y/n)', 's'); % s - ще въвеждаме стринг
    if ( (an == 'y' || an == 'Y'))
        break; % Излизане от безкрайния цикъл
    end
end

Намиране корени на полином по метода на Newton

>> x = 0:0.01:1.5;;
>> plot(x,newton(x)), grid on;
>> 
>> a = 0.1, b = 0;
>> eps = 1.e-10

eps =

   1.0000e-10

>> while  abs (b-a) >=eps
b=a;
a = a-newton(a)/fp(a)
end