Difference between revisions of "Упрaжнение 2. Matlab"
m (moved Упр 2. Matlab to Упрaжнение 2. Matlab) |
|||
(35 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 45: | Line 55: | ||
== Скриптови файлове == | == Скриптови файлове == | ||
+ | поредица от команди записани във файл | ||
+ | |||
+ | |||
+ | Разделяме прозореца 4 части | ||
+ | Изчертаване на няколко графики в един прозорец | ||
+ | <code><pre> | ||
+ | >> subplot(2,2,1) | ||
+ | </pre></code> | ||
+ | затихваща синусоида с различен коеф. на затихваме | ||
+ | <code><pre> | ||
+ | y = exp(-k*x.*sin(x)) | ||
+ | |||
+ | >>k = [0.1, 0.2, 0.3, 0.4] | ||
+ | >>x = 0:pi/100:6*pi | ||
+ | </pre></code> | ||
+ | |||
+ | |||
+ | Създаване на потребителски функции. | ||
+ | Два входящи елемента x,k | ||
+ | |||
+ | Създаваме нов m файл! | ||
+ | |||
+ | *Името на файла трябва да отговаря на името на функцията | ||
+ | |||
+ | *оператор точка за по елементно умножение | ||
+ | |||
+ | for - при незадаване на стъпка, тя е единица | ||
+ | |||
+ | Управляващи оператори на plot(x,y, 'r:') | ||
+ | |||
+ | <code><pre> | ||
+ | function y = f( x,k ) | ||
+ | |||
+ | %UNTITLED Summary of this function goes here | ||
+ | % Detailed explanation goes here | ||
+ | |||
+ | y = 2.^( (-k*x).*sin(x) ); | ||
+ | |||
+ | end | ||
+ | </pre></code> | ||
+ | <pre> | ||
+ | >>for i =1:4 | ||
+ | subplot(2,2,i); | ||
+ | plot(x, f(x,k(i)), 'r' ); | ||
+ | end | ||
+ | </pre> | ||
+ | >>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; прави глобални променливите, трябва да се извика и във функцията; | ||
+ | |||
+ | |||
+ | == Пример скрипт файл == | ||
+ | |||
+ | Създайте файл със следните редове | ||
+ | <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
Contents
- 1 Help
- 2 Индексиране на вектори
- 3 Двумерна графика
- 4 Въвеждане на специални символи
- 5 Скриптови файлове
- 6 Създаване на директория
- 7 Достъп до променливи
- 8 Пример скрипт файл
- 9 Извикване на коментар на функция от команден ред
- 10 Смяна на показваната точност
- 11 Предаване на данни
- 12 Условни оператори
- 13 Въвеждане на стойности на функции в диалогов режим
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