Вычисление суммы и произведения элементов массива (матрицы)
Рассмотрим алгоритм нахождения суммы, который заключается в следующем: вначале сумма равна 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)
Популярное: Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (640)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |