ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Вычисление суммы и произведения элементов массива (матрицы)

Рассмотрим алгоритм нахождения суммы, который заключается в следующем: вначале сумма равна 0 (s=0), затем к s добавляем первый элемент массива и результат записываем опять в переменную s, далее к переменной s добавляем второй элемент массива и результат записываем в s и далее аналогично добавляем к s остальные элементы массива. При нахождении суммы элементов матрицы последовательно суммируем элементы всех строк.

Алгоритм нахождения произведения следующий: на первом начальное значение произведения равно 1 (p=1), затем последовательно умножаем p на очередной элемент, и результат записываем в p и т.д.

Программа вычисления суммы элементов массива

//Записываем в переменную s число 0.

s=0;

//Перебираем все элементы массива

for i=1:length(x)

//накопление суммы

s=s+x(i);

end

Программа вычисления произведения элементов массива

p=1;

for i=1:length(x)

p=p*x(i);

end

Программа вычисления суммы элементов матрицы

s=0;

//Вычисляем количество строк n и столбцов m матрицы a.

[n,m]=size(a);

for i=1:n

for j=1:m

s=s+a(i,j);

end

end

disp(s);

Программа вычисления произведения элементов матрицы

//Начальное значение произведение (p) равно 1.

p=1;

//Вычисляем количество строк N и столбцов M матрицы a.

[N,M]=size(a);

//Перебираем все строки матрицы.

for i=1:N

//Перебираем все столбцы матрицы.

for j=1:M

Умножаем значение p на текущий элемент матрицы.

p=p*a(i,j);

end

end

 

Поиск максимального (минимального) элемента массива (матрицы)

Алгоритм решения задачи поиска максимума и его номера в массиве следующий. Пусть в переменной с именем Max хранится значение максимального элемента массива, а в переменной с именем Nmax - его номер. Предположим, что первый элемент массива является максимальным и запишем его в переменную Max, а в Nmax - его номер (1). Затем все элементы, начиная со второго, сравниваем в цикле с максимальным. Если текущий элемент массива оказывается больше максимального, то записываем его в переменную Max, а в переменную Nmax - текущее значение индекса i. Фрагмент программы поиска максимума:

Реализация алгоритма поиска максимума

//Записываем в Max значение первого элемента массива.

Max=a(1);

//Записываем в Nmax номер максимального элемента

//массива, сейчас это число 1.

Nmax=1;

//Перебираем все элементы массива, начиная со второго.

for i=2:N

//Если текущий элемент массива больше Max,

if x(i)>Max

//то текущий элемент массива объявляем максимальным,

Max=x(i);

//а его номер равен i.

Nmax=i;

end;

end;

Алгоритм поиска минимального элемента в массиве будет отличаться от приведенного выше лишь тем, что в операторе if знак поменяется с > на <.

Программа поиска минимального элемента матрицы и его индексов: Nmin - номер строки , min - номер столбца минимального элемента.

Обратите внимание, что при поиске минимального (максимального) элемента матрицы циклы по i и j начинаются с 1. Если написать с двух, то при обработке элементов будет пропущена первая строка или первый столбец при сравнении a(i , j) с min.

Программа поиска минимального элемента матрицы и его индексов

//Записываем в Min a(1,1), в Nmin и Lmin число 1.

Min=a(1,1); Nmin=1; Lmin=1;

for i=1:N

for j=1:M

//Если текущий элемент матрицы меньше Min,

if a(i,j)<Min

//то текущий элемент массива объявляем минимальным,

Min=a(i,j);

//а его индексы равны i и j.

Nmin=i;

Lmin=j;

end;

end;

end;

 

Другие примеры.

Пример: вычислить количество отрицательных элементов вектора x=(-2, 5, -7, 9, -15).

Решение.

x=[-2, 5, -7, 9, -15];

n=length(x);

k=0;

for i=1:n

if x(i)<0 then

k=k+1;

end

end

t= k

 

Пример: вычислить произведение положительных элементов матрицы

 

Решение.

a=[1 3 5 7

9 -2 0 5];

[n, m]=size(a);

s=1;

for i=1:n

for j=1:m

if a(i, j)>0 then

s=s*a(i, j);

end

end

end

s

Структура функций

В пакете есть возможность использовать функции. Функции играют роль подпрограмм. Это позволяет создавать интегрированные в Scilab специализированные программы и использовать библиотеки. Рекомендуемое расширение для файлов подпрограмм sce, а для библиотечных функций sci.

Существуют два типа sci-файлов: файл-сценарий и файл-функция.

Файл-сценарий (Script-файл) представляет собой последовательность команд без входных и выходных параметров. Он имеет следующую структуру:

// Kомментарий

Тело файла с любыми выражениями

Пример:

//Plot with color red

// Строит график синусоиды линией красного цвета

// в интервале [0, pi]

x=0: .1: %pi; plot(x, sin(x), 'r')

Файл-функция имеет следующую структуру:

function[y1,...,yn]=fun(x1,...,xm)

Тело функции

Endfunction

Здесь

fun - имя функции,

xi - входные аргументы функции (их m штук),

yi - выходные аргументы функции (их n штук).

 

Пример.

Вычисление факториала.

function [x]=fact(k)

k=int(k)

if k<1 then k=1, end

x=1;

for j=1:k,x=x*j;end

endfunction

Наберем этот текст в любом текстовом редакторе и сохраним его в файле с именем fact.sci. Расширение *.sci является для Sclab "родным", но не обязательным. Затем следует вызвать эти файлы из Scilab c помощью команд getf(filename) или exec(filename,-1); Те же операции можно произвести с помощью команд меню File-getf или File-exec.

До вызова функции желательно проверить, не была ли уже загружена такая функция ранее. Для этого:

exists('fact')

Результат:

ans =

0.

После загрузки файла

-->exec('C:\fact');

набираем

-->x=fact(5)

x =

120

Пример:

function z=fun(x, y)

// Определение функции

z=x.^2 + y.^2;

endfunction

Сохраним эту функцию под именем fun.sci. После загрузки функции в Scilab мы можем обратиться к ней:

-->fun(1,2)

ans =

5.

Пример. Даны два массива X и Y. Вывести в командное окно имя массива, содержащего наибольшее число элементов, кратных числу три.

Решение. Составим программу и сохраним ее под именем t.sci в каталоге C:\DOCUME~1\user\.

function g=t(v)

s=0; n=length(v);

for i=1:n

if modulo(v(i), 3)==0 then

s=s+1;

end

end

g=s;

endfunction

Далее сохраним в корневом каталоге C:\ под именем tot, а затем выполним программу

x=[1 2 3 5 7 6 12]; y=[5 7 24 15]; d1=t(x), d2=t(y)

if d1>d2 then

disp('x')

elseif d1==d2 then

disp('в обоих массивах это число одинаково')

else

disp('y')

end

Получим ответ:

d1 =

3.

d2 =

2.

x

Запуск файла на выполнение осуществляется так:

-->scipad('C:\DOCUME~1\user\t.sci');

-->scipad('C:\tot');

-->exec('C:\tot');

Файл-функция был сохранен в 'C:\DOCUME~1\user\t.sci', файл-сценарий – в 'C:\tot'

Это эквивалентно выполнению следующих операций: запускаем Scilab.

Далее: открываем файл-функцию File/Open… Далее Execute/Load into Scilab; Открываем файл-сценарий (выполняемый файл) File/Open…Далее File/Exec …

Открываются файлы в окне Scilab.

Если выходных параметров несколько, то их надо указать в квадратных скобках после слова function.

function [var1, var2, …] = fname(список_параметров)

// Основной комментарий

// Дополнительный комментарий

Тело файла с любыми выражениями

var1=выражение

var2=выражение

endfunction

 

Пример. Задан вектор . Вычислить и

.

Решение. Набираем и сохраняем в редакторе под именем statv.sci файл

function[mean, stdev] = statv(x)

n=length(x);

mean=sum(x)/n;

stdev=sqrt(sum((x-mean).^2)/n);

endfunction

Далее в командном окне набираем

--> v=[1, 2, 3, 4, 5];

--> [a, m]=statv(v)

В строках вывода получаем:

m =

1.4142136

a =

3.

-->

Краткий комментарий к программе.

Во второй строке файла statv.sci вычисляется количество элементов в массиве x; sum(x) – суммируются все элементы массива x; mean – вычисляется ; stdev – вычисляется . В итоге получаем среднее значение , .

Для создания временной задержки выполнения программы служит команда xpause, которая приостанавливает текущий процесс на число микросекунд, указанных в скобках

· хpause(microsecs)

 

Пример:

xbasc();

xset("color",12);

xstring(1,1,"Blue");

xpause(5.e6); // временная задержка на 5 секунд

xbasc();

xset("color",5);

xstring(0,1,"Red");

 

В результате мы видим в графическом окне вначале надпись "Blue", а затем она исчезает и мы видим сдвинутую по горизонтали надпись "Red".

Некоторые полезные функции Scilab для вычисления целой части числа:

int(1.9999)=1=int(1.1) int(-1.9999)=-1=int(-0.00001)

floor(1.5)=1=floor(1.9)=floor(1.1) floor(-1.1)=-2=floor(-1.8)

ceil(1.1)=ceil(1.9)=2 ceil(-1.9)=-1=ceil(-1.2)

fix(-1.2)=-1=fix(-1.7) fix(1.7)=1=fix(1.2)

 

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти