34856

Матрицы (математика)

Лекция

Информатика, кибернетика и программирование

Для обработки наборов данных одного типа вводится понятие массива. Одномерные массивы Описание типа массива задается в разделе описаний TYPE следующим образом: имя типа =RRY [диапазон индексов] OF тип ; здесь имя типа правильный идентификатор; RRY OF зарезервированные слова массив из; диапазон индексов границы изменения индексов; тип любой тип ТурбоПаскаля. Здесь 12345 индексы элементов массива номера ячеек в которых они находятся; 5601029 элементы массива типа INTEGER. Тогда тип данного...

Русский

2013-09-08

93 KB

0 чел.

Матрицы  (математика)

Матрица, имеющая только одну строку, называется матрицей-строкой (или вектором-строкой).

А=[a1 a2an]

Матрица, имеющая только один столбец, называется матрицей-столбцом (или вектором-столбцом)

Если число строк = числу столбцов – матрица называется квадратной.

Главной диагональю квадратной матрицы называется диагональ, проходящая через верхний левый и нижний правый углы, т.е. совокупность элементов вида aii, где i=1,2,…n 

Квадратная матрица, у которой все элементы, расположенные вне главной диагонали, равны 0, называется диагональной. Эта матрица имеет вид:

A=

Диагональная матрица, у которой все элементы, стоящие на главной диагонали, равны единице, называется единичной. Обозначается

E=

Квадратная матрица, в которой все элементы расположены симметрично относительно главной диагонали, называется симметричной (имеет место равенство ai j=aj i, ij)

Например:  A=

           Матрица, все элементы которой равны 0, называется нулевой.

Если в матрице размера mxn заменить строки соответственными столбцами, то получится матрица размера nxm, которая называется транспонированной по отношению к матрице А.

А=         АТ=

Структурированные типы данных. Массивы.

Типы данных в языке ПАСКАЛЬ делятся на простые и структурированные (сложные). К простым типам относятся стандартные, перечислимые и ограниченные; к структурированным типам — массивы, множества, записи, файлы. Элементами сложных типов могут быть простые типы, а также, в свою очередь, структурированные типы.

В математике, экономике, информатике часто используются упорядоченные наборы данных, например последовательности чисел, таблицы, списки фамилий. Для обработки наборов данных одного типа вводится понятие массива.

        Массив фиксированное количество упорядоченных однотипных данных, хранящихся последовательно. Массив обозначается одним именем. Он обязтельно имеет размеры.

Одномерные массивы

Описание типа массива задается в разделе описаний TYPE следующим образом:

<имя типа>=ARRAY [диапазон индексов] OF <тип>;

здесь

<имя типа> - правильный идентификатор;

ARRAY, OF  – зарезервированные    слова (массив, из);

диапазон индексов – границы изменения индексов;

<тип> – любой тип Турбо-Паскаля.

Например:
         Дан массив А, состоящий из 5 целых чисел.

Здесь 1,2,3,4,5 – индексы элементов массива (номера ячеек, в которых они находятся);

          56,0,10,-2,9 – элементы массива типа INTEGER.

Тогда тип данного массива можно записать:

TYPE

        Mass = ARRAY [1..5] OF INTEGER;

Массив описывается следующим образом:

Если массив – константа, то в разделе описания  CONST:

CONST  

<имя массива>:<тип массива>=(элемент1,элемент2,…,элементN);

Для нашего примера:

TYPE   mass=array [1..5] of INTEGER;

CONST 

            A:mass=(56,0,10,-2,9);

Определить константу как массив можно и непосредственно при описании этой константы, без предварительного описания типа массива:

CONST  A:array [1..5] of INTEGER =(56,0,10,-2,9);

 Если массив – переменная величина, то он описывается в разделе описания переменных:

TYPE mass=array [1..5] of INTEGER;

VAR   A:mass;

Определить переменную как массив можно и непосредственно при описании этой переменной без предварительного описания типа массива:

VAR  A: array [ 1..5] of INTEGER;

Ссылка на конкретный элемент массива осуществляется путем указания имени массива и порядкового номера этого элемента.

Таким образом,

A[1]:=56;

A[2]:=0;

A[3]:=10;

A[4]:=-2;

A[5]:=9;

-----------------------------------------------------

          В качестве значений диапазона могут использоваться идентификаторы, если их значения определены выше.

              const

                        N=10; L=5;

              var

massiv1: array [1..N] of real;

massiv2: array [1..L] of integer;

      Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то допускается в описании объединять массивы в список, например

             var А, В, С : array [1..50] of real;

         Здесь объявлено списком три массива А, В, С действительных чисел, каждый из которых содержит по 50 элементов (от 1 до 50):

Нельзя путать понятия «индекс» и «тип индекса». Тип индекса используется только в разделе описания массива, а индекс указывается в разделе операторов для обозначения конкретных элементов массива.

В качестве индекса может быть выражение, частным случаем которого является константа или переменная. Элемент массива иначе называется переменной с индексом. В отличие от нее переменная без индекса называется простой переменной.

Элементы массива могут стоять как в левой части оператора присваивания, так и в выражениях. Над элементами массива можно производить те же операции, которые допустимы для данных его базового типа. Если базовый тип есть INTEGER, то допустимы все операции над данными целого типа, включая и стандартные функции.

Чтобы заполнить массив, нужно последовательно перебрать все его элементы и записать в них значения. Для этого используем оператор цикла со счетчиком.

Ввод массива

Если вы вводите значения элементов массива с клавиатуры, то получится следующая запись:

.

.

for i:=1 to 5 do

read(a[i]);

.

Можно заполнить массив с помощью генератора случайных чисел:

.

.

randomize;

for i:=1 to 5 do

a[i]:=random(50);

.

.

В этом случае массив заполнится случайными целыми числами от 0 до 49.

Если использовать запись a[i]:=random; массив заполнится случайными действительными числами от 0 до 1.

Вывод массива

Чтобы вывести массив, нужно также последовательно перебрать, вывести на печать все его элементы. Для этого используем оператор цикла со счетчиком.

вывод в одну строку –

.

.

for i:=1 to 5 do

write(a[i],’  ‘);

.

.

вывод в столбец

.

.

for i:=1 to 5 do

writeln(a[i]);

.

.

Примеры:

1. Вычислить сумму пятнадцати целых чисел. Для обозначения чисел введем имя массива x, элементы которого имеют индекс i. Сумму обозначим именем sum. Тогда sum=x[1] +x[2] + ••• +x[15].

----------------------------------------------

Program P1;

var

         x : array [1..15] of integer;

          sum, i: integer;

begin

      sum:=0;

             for  i:=1 to 15 do

              begin

                 read(x[i]);

                  sum:= sum + x[i];

                end;

        writeln(‘sum=’,sum);

  end.

Внутри цикла вводится значение одного элемента массива x[i] и оно прибавляется к значению текущей суммы sum. Цикл повторяется 15 раз. Элементы массива имеют целый тип (integer), а индекс — ограниченный тип 1..15.

Переменная i, с одной стороны, используется как параметр цикла, а с другой — в качестве индекса. В этом случае описать переменную i можно двояко:

а) в разделе переменных var указать переменную i как ограниченного типа, например

var

                           x : array [1..15] of integer;

   i :1..15;

б) учитывая, что элементами ограниченного типа являются целые числа, можно ввести описание integer, например

var

                         x : array [1..15] of integer;

 i : integer;

Так как в языке ПАСКАЛЬ требуется описание всех переменных, то необходимо описать еще и переменную sum. Естественно, что она имеет тип integer, так как все суммарные числа x[i] имеют целый тип

---------------------------------------------------------------------------------------

  1.  Рассчитать сумму элементов массива А из N элементов (7<N<10).

----------------------------------------------------------------------------------------

Program massiv;

var i,n:byte;

     s:integer;

     a:array [ 1..10] of integer;

       begin

         writeln(‘введите n от 7 до 10’);

            read(n);

                  s:=0;

                    for i:=1 to n do

                        begin

                          read(a[i]);

                            s:=s+a[i];

                        end;

                          writeln(‘s=‘,s);

            end.

-------------------------------------------------------------------

  1.  Вычислите произведение 10 элементов массива А вещественного типа.

-----------------------------------------------------------------------------------------------

Program  massiv1;

Var

       p : real;

        i : integer;

        a:array [1..10] of real;

          begin

              p := 1;

               writeln('Введите массив a');

                 for i: = 1 to 10 do

                   begin

                       read(a[i]);

                          p:=p*a[i];

                     end;

                               writeln('p=',p:10:4);

           end.

-------------------------------------------------------------------------------

  1.  Даны n натуральных чисел a1, a2, ... an. Определите среднее арифметическое членов последовательности, которые кратны 3 и не кратны 5.

--------------------------------------------------------------------------------

Program sr;

 Var  a : array [1..50] of integer;

     i, n, k : integer;

       s, sa : real;

   begin

    writeln('Bведите n');

         readln(n);

          writeln('Введите элементы массива a');

           for i:=l to n do

              read(a[i]);

             writeln;

               s:=0;

               k:=0;

                 for i:=1 to n do

                    begin

                      if (a[i] mod 3=0) and (a[i] mod 5<>0) then

                          begin

                                s:=s+a[i];   

                              k:=k+1;

                        end;   

                  end;

                      if k=0 then

                            writeln('Нет решения')

                        else

                                   begin

          sa:=s/k;

  writeln('sa=',sa:12:3);

                end;

             end.

---------------------------------------------------------------------------

Понятие многомерных массивов

До сих пор мы рассматривали массивы, каждый элемент которых содержал только один индекс. Такие массивы обычно называются одномерными. В математике часто используются многомерные массивы, т. е. массивы массивов. Особенно широкое распространение получили двухмерные массивы, иначе называемые матрицами. 

Описание двумерного массива: 

 Type

  <имя>=array[диапазон1,диапазон2] of <базовый тип>;

диапазон1, диапазон2 – диапазоны для двух индексов.

Например, изображение целых чисел последовательно в нескольких строках является матрицей:

                    5  4  3  6

                    2  8  1  7

                    4  3  9  5

Данная матрица имеет размер 3 на 4, т. е. она состоит из трех строк и четырех столбцов. Если всю матрицу обозначить одним именем, например А, то каждый элемент матрицы обозначается с двумя индексами, например A[I,J]. Здесь первый индекс I обозначает номер строки (I = 1, 2, 3), второй индекс J — номер столбца (J = 1, 2, 3, 4). Такую матрицу можно описать следующим образом (с использованием имени типа Т):

TYPE  

       Т=ARRAY [1..3, 1..4]  OF INTEGER;

VAR  А:Т;

ПРИМЕРЫ ПРОГРАММИРОВАНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕММАССИВОВ

Найти максимальный элемент массива В

а) массив – константа

Program m1;

 const

   B:array[1..2,1..5] of integer=((4,3,2,-1,0),(-7,0,13,2,8));

   var

     max,i,j:integer;

  begin

     max:=b[1,1];

     for i:=1 to 2 do

     for j:=1 to 5 do

      if b[i,j]>max then max:=b[i,j];

      writeln('max=',max);

      end.

--------------

Ответ

max=13

-----------------------------------------------------------

б) Массив – переменная величина; элементы массива задаются с клавиатуры.

Program m4;

  type

   mass=array[1..2,1..5] of integer;

   var

     B:mass;

     max,i,j:integer;

  begin

    writeln('введите массив В');

       for i:=1 to 2 do

       for j:=1 to 5 do

        read(b[i,j]);

         writeln;

         max:=b[1,1];

          for i:=1 to 2 do

          for j:=1 to 5 do

           if b[i,j]>max then max:=b[i,j];

            writeln('max=',max);

      end.

--------------------

Ответ

введите массив В

4 3 5 2 6

9 8 -4 67 2

max=67

--------------------------------------------------------------------------------

в) Массив – переменная величина; элементы массива задаются с помощью генератора случайных чисел RANDOMIZE.

Program m3;

  var

   B:array[1..2,1..5] of integer;

     max,i,j:integer;

  begin

   randomize;

    writeln('введите массив В');

       for i:=1 to 2 do begin

       for j:=1 to 5 do begin

        b[i,j]:=random(30)-10;

         write(b[i,j]:3,' ');

         end;

          writeln;

           end;

           writeln;

            max:=b[1,1];

             for i:=1 to 2 do

             for j:=1 to 5 do

              if  b[i,j]>max then max:=b[i,j];

               writeln('max=',max);

      end.

-----------------------------

Ответ

введите массив В

18  10  17  10  10

12  10   7   8  19

max=19

--------------------------------------------------------------------------------------------------

г) Описание типа массива задаётся в разделе описаний типа TYPE; массив – переменная величина; элементы массива вводятся  с клавиатуры.

Program m4;

  type

   mass=array[1..2,1..5] of integer;

   var

     B:mass;

     max,i,j:integer;

  begin

    writeln('введите массив В');

       for i:=1 to 2 do

       for j:=1 to 5 do

        read(b[i,j]);

         writeln;

         max:=b[1,1];

          for i:=1 to 2 do

          for j:=1 to 5 do

           if b[i,j]>max then  max:=b[i,j];

            writeln('max=',max);

      end.

------------------------------------

Ответ

введите массив В

5 6 7 8 4

9 8 7 6 -5

max=9

----------------------------------------------------------------------------------------------------

Пример (одномерные массивы)

Вычислить сумму действительных чисел.

Программу составим в трех вариантах: в варианте 1 массив не используется, в варианте 2 он описывается в разделе переменных, в варианте 3 массив определяется в разделе типов.

Для иллюстрации результата выполнения программы возьмем семь конкретных чисел 5.1, 6.4, 8,7, 1.9, 3.6, 2.0, 4,2

           PROGRAM АЗО;

               CONST N=7;                      (* КОЛИЧЕСТВО ЧИСЕЛ *) 

                  VAR

  A : REAL;            (* ВВОДИМОЕ ЧИСЛО *) 

        SUM : REAL;                 (* СУММА *)

       I: INTEGER;     (* ПАРАМЕТР ЦИКЛА *)

  BEGIN

  SUM:=0;

                       WRITELN('ВВЕДИТЕ ЧИСЛА ЧЕРЕЗ ПРОБЕЛЫ:');

             FOR 1:=1 TO N DO

               BEGIN

                 READ(A);

                   SUM:=SUM +A

                 END;

                     WRITELN('----------------------------------');

              WRITELN ('СУММА ЧИСЕЛ =', SUM:6:2 )

   END.

Здесь каждое число вводится внутри цикла и прибавляется к накапливаемой сумме SUM. Значение переменной А изменяется внутри цикла. После выполнения всего цикла значение А равно последнему введенному числу. Для А отведена одна ячейка памяти ЭВМ, если условно считать, что действительное число занимает одну ячейку.

    ВЫЧИСЛЕНИЕ СУММЫ,  2-й  ВАРИАНТ   

  

PROGRAM A31;

 CONST N=7;                                      (* КОЛИЧЕСТВО ЧИСЕЛ *) 

     VAR

        A : ARRAY[1..N] OF REAL;     (* МАССИВ ЧИСЕЛ *)

           SUM : REAL;                          (* СУММА  *)

    I : INTEGER;                            (* ПАРАМЕТР ЦИКЛА *)

       BEGIN

   WRITELN('ВВЕДИТЕ МАССИВ ЧИСЕЛ ЧЕРЕЗ ПРОБЕЛЫ:');

       FOR  I:=1 ТО  N DO

         RЕAD(А[i] ) ;

          SUM:=0;

               FOR  I:=1 ТО  N DO

                  SUM:=SUM +A[I] ;

                                WRITELN('----------------------------------'):

                WRITELN('СУММА ЧИСЕЛ = ‘, SUM:6:2 )

       END.

Здесь в разделе переменных VAR явно описан массив А. Для массива выделяется память в количестве семи ячеек, т. е. для каждого числа одна ячейка. В разделе операторов с помощью цикла сначала вводятся все значения элементов массива А. Затем организуется новый цикл для вычисления суммы. Применение массива приводит к увеличению используемой памяти ЭВМ - вместо одной ячейки (см. вариант 1) здесь выделено семь ячеек памяти. В то же время значения элементов массива сохраняются в памяти ЭВМ, и их можно использовать и после окончания выполнения циклической части.

Такой вариант программы целесообразно использовать в тех случаях, когда значения введенного массива многократно используются в программе.

ВЫЧИСЛЕНИЕ СУММЫ,     3-й ВАРИАНТ  

PROGRAM А32А;

      CONST N=7;                                      (* КОЛИЧЕСТВО ЧИСЕЛ *) 

   TYPE Т=ARRAY[1..N] OF REAL;      (* ТИП МАССИВА *)

VAR

А:Т;                                (* МАССИВ *)

 SUM:REAL;                (* СУММА *)

             I:INTEGER;        (* ПАРАМЕТР ЦИКЛА *)

     BEGIN

                   WR1TELN('ВВЕДИТЕ МАССИВ ЧИСЕЛ ЧЕРЕЗ ПРОБЕЛЫ:');

     FOR I:=1 ТО  N  DO

 READ(А[I]);

  SUM:=0;

       FOR I:=1TO N DO

          SUM:=SUM +A[I] ;

                         WRITELN('----------------------------------');

              WRITELN('СУММА ЧИСЕЛ = ', SUM:6:2 )

     END.

Вариант З отличается от предыдущего только введением типа массива, что делает программу более эффективной

PAGE  1


         

               1             2                3               4             5

6

10

-2

9

0


 

А также другие работы, которые могут Вас заинтересовать

36488. Українська мова. Відповіді на екзаменаційні питання 5.99 MB
  рикметники, у яких є закінчення, називаються повними: добрий, вільна, славне, зелені, батькового, материна. Ці форми є звичайними для сучасної української мови.У народній творчості та в поезії вживаються також нестягнені повні прикметники: вірная (замість: вірна), вечірнюю (замість: вечірню), синєє (замість: синє), молодії (замість: молоді).
36489. Співвідношення між ентропією та імовірністю, формула Больцмана 170.77 KB
  В теорії Дебая зміщення атомів представляється як система поздовжніх та поперечних хвиль суцільного однорідного твердого тіла. Система хвиль має широкий спектр частот. Всі хвилі з будьякими частотами малої швидкості відповідають поперечним і поздовжнім хвилям у твердому тілі тобто нехтуємо дисперсією хвиль. Система хвиль таким чином складається із поздовжніх та поперечних хвиль.
36490. Розподіли Гаусса і Пуассона як частинні випадки біноміального розподілу 210.63 KB
  Для кожного тіла можна записати термічне рівняння стану та його внутрішню енергію як функцію параметрів які визначають його стан наприклад . Як називається це рівняння Це калоричне рівняння. Обидва ці рівняння не можуть бути отримані методами формальної термодинаміки. Якщо відомо відоме термічне рівняння стану то теорема Карно дозволяє в загальному вигляді розвязати питання залежності внутрішньої енергії від обєму.
36491. Середня довжина вільного пробігу молекул, її залежність від тиску і температури 242.26 KB
  Середня довжина вільного пробігу молекул її залежність від тиску і температури. Розглянемо молекулу яка рухається із деякою середньою швидкістю і при зіткненнях не змінює швидкості. Будемо вважати що рухається тільки одна молекула за якою ми спостерігаємо а решта нерухомі. Виберемо проміжок часу рівний одній секунді тобто будемо розглядати шлях молекули за одиницю часу.
36492. Розподіл середньої кінетичної енергії за ступенями вільності для обертального руху 189.71 KB
  Кількість молекул всі вони незалежні. Кожна молекула характеризується у просторі кругових частот величинами . Імовірність потрапити молекулам у елементарний обєм має вигляд . Знайдемо середню кінетичну енергію обертального руху виділеної молекули що припадає на один ступінь вільності при обертанні навколо осі навіщо нам чіплятись до осі вісь нічим не гірша.
36493. Термічна ефузія 238 KB
  Кількість зіткнень з нею за одиницю часу становить за законом косинусу . Повна кількість молекул у такому обємі становить . Цей простір буде також необмежений тому ми можемо вважати кількість комірок у ньому нескінченною. Скористаємось формулою Больцмана де у нашому випадку у знаменнику немає обмеження оскільки кількість комірок є нескінченною .
36494. Основи вакуумної техніки 120.78 KB
  Мірою кількості газу що переміщується у системі є величина яка згідно із рівнянням стану ідеального газу може бути записана як . Вакуумники люди консервативні тому міра газу визначається у несистемних одиницях : лмм рт. або лтор а всі розрахунки кількості газу ми будемо вести на одиницю часу. Швидкістю відкачки насосу будемо називати такий обєм газу який входить за одиницю часу до насосу і виміряний при тискові який має місце біля його входу .
36495. Термічна дифузія 233.6 KB
  Перший доданок являє собою потік взаємної дифузії молекул 1 газу а другий термодифузійний потік. На рисунку вихідні сталі відносні концентрації змінились і набули вигляду концентрація молекул першого газу біля першої пластини; концентрація молекул першого газу біля другої пластини; концентрація молекул другого газу біля першої пластини; концентрація молекул другого газу біля другої пластини. В результаті такої конвекції нагріта частина газу рухається відносно холодної створюючи провиток. Очевидно що температура газу поблизу проволоки...
36496. Взаємна дифузія 175.31 KB
  Згідно із основним рівнянням переносу можна записати ; . Згідно із рівнянням Фіка яке справедливо і для суміші газів коефіцієнт дифузії першого газу у суміші двох газів . Рівняння політропного процесу робота при цьому процесі Ізотермічний і адіабатний процеси це процеси ідеалізовані. Запишемо для нього рівняння.