WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 3 | 4 || 6 | 7 |   ...   | 19 |

M = U · S · VT, где U и V ортогональные матрицы размером m m и n n соответственно, а S диагональная матрица, на диагонали которой расположены сингулярные числа матрицы M Ядро матрицы это множество векторов X. Поиск ядра матрицы сводится к решению однородной системы линейных уравнений AX = 0. Если при вызове функции X=kernel(A) матрица X окажется непустой, то действительно AX = 0.

52 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры Листинг 3.42. Использование функцииkernel -->A=[4 1 -3 -1;2 3 1 -5;1 -2 -2 3] A = 4. 1. - 3. - 1.

2. 3. 1. - 5.

1. - 2. - 2. 3.

-->X=kernel(A) X = 0.0.0.0.3.4 Символьные матрицы и операции над ними В Scilab можно задавать символьные матрицы, то есть матрицы, элементы которых имеют строковый тип. При этом необходимо помнить, что строковые элементы должны быть заключены в двойные или одинарные кавычки.

Листинг 3.43. Формирование символьных матриц -->M=[’a’ ’b’;’c’ ’d’] M = a b c d -->P=[’1’ ’2’;’3’ ’4’] P = 1 3 Символьные матрицы можно складывать (результат сложения конкатенация соответствующих строк) и транспонировать:

Листинг 3.44. Операции над символьными матрицами -->M+P ans = a1 bc3 d-->M’ ans = a c b d 3.5. Решение систем линейных алгебраических уравнений Кроме того, операции сложения и умножения можно проводить над отдельными элементами символьных матриц при помощи функцийaddf(a,b)и mulf(a,b):

Листинг 3.45. Использование функцийaddfиmulf -->addf(M(1,1),P(2,2)) ans = a+-->mulf(M(1,2),P(2,1)) ans = b*3.5 Решение систем линейных алгебраических уравнений Система m уравнений с n неизвестными вида:

a11x1 + a12x2 + · · · + a1nxn = b1, a21x1 + a22x2 + · · · + a2nxn = b2,..................................

am1x1 + am2x2 + · · · + amnxn = bm называется системой линейных алгебраических уравнений (СЛАУ), причем xj неизвестные, aij коэффициенты при неизвестных, bi свободные коэффициенты (i = 1... m, j = 1... n). Система из m линейных уравнений с n неизвестными может быть описана при помощи матриц: A · x = b, где x вектор неизвестных, A матрица коэффициентов при неизвестных или матрица системы, b вектор свободных членов системы или вектор правых частей. Совокупность всех решений системы (x1, x2,..., xn) называется множеством решений или просто решением системы.

Задача 3.1.

Решить СЛАУ при помощи правила Крамера:

2x1 + x2 - 5x3 + x4 = 8, x1 - 3x2 - 6x4 = 9, 2x2 - x3 + 2x4 = -5, x1 + 4x2 - 7x3 + 6x4 = 0.

Правило Крамера заключается в следующем. Если определитель = det A матрицы системы из n уравнений с n неизвестными A · x = b отличен от нуля, то система имеет единственное решение x1, x2,..., xn, определяемое по формулам Крамера: xi = i/, где i определитель матрицы, полученной из матрицы системы A заменой i-го столбца столбцом свободных членов b. Текст файласценария с решением задачи по формулам Крамера:

54 Глава 3. Массивы и матрицы в Scilab. Решение задач линейной алгебры Листинг 3.46. Текст файла-сценария решения СЛАУ методом Крамера //Матрица коэффициентов:

A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];

b=[8;9;-5;0]; //Вектор свободных коэффициентов A1=A;A1(:,1)=b; //Первая вспомогательная матрица A2=A;A2(:,2)=b; //Вторая вспомогательная матрица A3=A;A3(:,3)=b; //Третья вспомогательная матрица A4=A;A4(:,4)=b; //Четвертая вспомогательная матрица D=det(A); //Главный определитель //Определители вспомогательных матриц:

d(1)=det(A1); d(2)=det(A2); d(3)=det(A3); d(4)=det(A4);

x=d/D //Вектор неизвестных P=A*x-b //Проверка Результаты работы файла-сценария:

Листинг 3.47. Вызов файла-сценария решения СЛАУ методом Крамера -->exec(’C:\scilab-4.1.1\kramer.sce’);disp(’exec done’);

x = 3.

- 4.

- 1.

1.

P = 1.0D-14 * 0.0.

- 0.0.exec done Задача 3.2.

Решить СЛАУ из задачи 3.1 методом обратной матрицы.

Метод обратной матрицы: для системы из n линейных уравнений с n неизвестными A · x = b, при условии, что определитель матрицы A не равен нулю, единственное решение можно представить в виде x = A-1 · b.

Текст файла-сценария и результаты его работы:

Листинг 3.48. Решение СЛАУ с использованием функцииinv //Матрица и вектор свободных коэффициентов системы:

A=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];b=[8;9;-5;0];

3.5. Решение систем линейных алгебраических уравнений x=inv(A)*b //Решение системы //Результаты работы файла-сценария:

--> x = 3.

- 4.

- 1.

1.

Задача 3.3.

Решить систему линейных уравнений методом Гаусса:

2x1 - x2 + 5x3 = 0, 3x1 + 2x2 - 5x3 = 1, x1 + x2 - 2x3 = 4.

Решение системы линейных уравнений при помощи метода Гаусса основывается на том, что от заданной системы переходят к эквивалентной системе, которая решается проще, чем исходная система.

Метод Гаусса состоит из двух этапов. Первый этап это прямой ход, в результате которого расширенная матрица системы путем элементарных преобразований (перестановка уравнений системы, умножение уравнений на число, отличное от нуля, и сложение уравнений) приводится к ступенчатому виду. На втором этапе (обратный ход) ступенчатую матрицу преобразовывают так, чтобы в первых n столбцах получилась единичная матрица. Последний, n + 1 столбец этой матрицы содержит решение системы линейных уравнений. Далее приведен текст файла-сценария и результаты его работы:

Листинг 3.49. Использование функцииrrefдля решения СЛАУ //Матрица и вектор свободных коэффициентов системы:

A=[2 -1 1;3 2 -5;1 3 -2]; b=[0;1;4];

//Приведение расширенной матрицы к треугольному виду:

C=rref([A b]);



//Определение размерности расширенной матрицы:

[n,m]=size(C); //m- номер последнего столбца матрицы С //Выделение последнего столбца из матрицы С:

x=C(:,m) //x - решение системы //Результаты работы программы:

--> x = 0.1.0.Глава Построение двумерных графиков В этой главе читатель может познакомиться с графическим аппаратом Scilab для построения двумерных графиков. Двумерными будем считать такие графики, в которых положение каждой точки задается двумя величинами.

4.1 Функция plot Рассмотрение графиков начнем с простейших функций вида y = f(x), для построения которых в Scilab существует функцияplot. В предыдущих версиях Scilab (по третью версию Scilab включительно) функцияplotпредназначена для построения графика одной функции y = f(x). Обращение к ней имеет вид:

plot(x,y,[xcap,ycap,caption]) Здесьx массив абсцисс;y массив ординат;xcap, ycap, caption подписи осей X, Y и графика соответственно.

Задача 4.1.

Построить график функции y = sin(cos(x)) с помощью функцииplot.

Пусть x изменяется на интервале [-2; 2] с шагом 0,1. Сформируем массив X. Вычисляя значение функции y = sin(cos(x)) для каждого значения массива X, создадим массив Y. Затем воспользуемся функциейplot(x,y)для построения кривой и выведем с ее же помощью подписи координатных осей’X’,’Y’, а также имя графика’plot function y=sin(cos(x))’(см. листинг 4.1, рис. 4.1).

4.1. Функция plot Листинг 4.1. Построение графика функции y = sin(cos(x)) с помощью функцииplot x=-2*%pi:0.1:2*%pi;

y=sin(cos(x))’;

plot(x,y,’X’,’Y’,’plot function y=sin(cos(x))’);

Y plot function y=sin(cos(x)) 0.0.0.0.0.-0.-0.-0.-0.-0.9 X -7 -5 -3 -1 1 3 5 Рис. 4.1. График функции y = sin(cos(x)) В простейшем случае обращение к функции имеет видplot(y), в качестве массива х выступает массив номеров точек массива y. На листинге 4.2 и на рис. 4.2 представлен пример построения графика функции y = f(i).

Листинг 4.2. Построение графика функции вида y = f(i), гдеj номер точки в массивеy y=[1 2 3 -2 4 5 -1 6 9 11 0 -2 5];

plot(y);

Такой синтаксис функцииplotпозволяет строить графики нескольких функций.

Задача 4.2.

Построить графики функций y = sin(cos(x)), z = cos(sin(x)), v = esin(x), t = ecos(x) в одних координатных осях.

58 Глава 4. Построение двумерных графиков -1 3 5 7 9 11 Рис. 4.2. График функции y = f(i) Допустим, что x принадлежит интервалу [-2; 2] и изменяется с шагом 0,1.

Создадим массив X. Поскольку x является аргументом для всех четырех функций, его в обращении к функцииplotможно не указывать. Также необязательно формировать для каждой функции свой массив значений. Достаточно указать в квадратных скобках через точку с запятой их математические выражения, и эти массивы автоматически будут созданы как промежуточный этап построения кривых функций (см. листинг 4.3 и рис 4.3).

Листинг 4.3. Построение графиков нескольких функций в одних координатных осях с помощью командыplotв Scilab x=-2*%pi:0.1:2*%pi;

plot([sin(cos(x));cos(sin(x));exp(sin(x));exp(cos(x))]);

Как видно из рис. 4.3, функцияplotв Scilab 3 не позволяет построить полноценные графики нескольких функций. Поэтому в Scilab 4 она была значительно модифицирована, и ее возможности теперь значительно расширены. Простейшее же обращение к функцииplotв четвертой версии приложения осталось прежнимplot(x,y).

4.2. Построение нескольких графиков в одной системе координат 3.2.2.1.1.0.0.-0.-1.0 20 40 60 80 100 120 Рис. 4.3. Пример построения графиков нескольких функций в Scilab 4.2 Построение нескольких графиков в одной системе координат При простейшем обращении к функцииplot(x,y)создается окно с именем Scilab Graphic (0), в котором будет построен график функцииy(x)на заданном интервале. Если же повторно обратиться к функцииplot, будет создано новое графическое окно, и в нем будет построен новый график.

Для построения нескольких графиков в одной системе координат можно обратиться к функцииplotследующим образом:

plot(x1,y1,x2,y2,...xn,yn) гдеx1, y1 массивы абсцисс и ординат первого графика;

x2, y2 массивы абсцисс и ординат второго графика;

...

xn, yn массивы абсцисс и ординат n-ого графика.

Задача 4.3.

x Построить в одних координатных осях графики функций y = sin( ), z = cos(x) и v = exp(cos(x)).

60 Глава 4. Построение двумерных графиков Определим интервал изменения x [-6,28;6,28], шаг 0,02. Теперь сформируем массивы значений функций Y, Z, V.

Для построения заданных кривых в одних координатных осях необходимо в качестве аргументов функцииplotпопарно, через запятую, указать имя массива первого аргумента и имя массива первой функции, имя массива второго аргумента и имя массива второй функции и т. д. В нашем случае обращение к функцииplotбудет иметь видplot(x,y,x,z,x,v)(листинг 4.4 и рис. 4.4).

Листинг 4.4. Построение графиков нескольких функций в одних координатных осях с помощью командыplotв Scilab x=-6.28:0.02:6.28;y=sin(x/2);

z=cos(x);v=exp(cos(x));

plot(x,y,x,z,x,v);

3.2.2.1.1.0.0.-0.-1.-8 -6 -4 -2 0 2 4 6 Рис. 4.4. Построение графиков нескольких функций с помощью функцииplot Построить несколько графиков в одном окне можно и с помощью короткой записи функции plot(x,y), но перед обращением к функциям plot(x2,y2), plot(x3,y3),..., plot(xn,yn)вызвать командуmtlb_hold(’on’), она заблокирует режим создания нового окна.

Задача 4.4.

x Построить в одних координатных осях графики функций y = sin( ), z = cos(x) и v = exp(cos(x)), используя командуmtlb_hold(’on’).

4.2. Построение нескольких графиков в одной системе координат Как и в предыдущей задаче, прежде всего определяем интервал и шаг изменения x [-6,28;6,28], 0,02 и формируем массивы значений функций Y, Z, V. Однако применять будем краткую форму обращения к функцииplot plot(x,y), которая поочередно создаст первый, второй и третий график.





Для того, чтобы каждый раз при выполнении функцииplotне создавалось новое графическое окно, перед ней будем выполнять командуmtlb_hold(’on’) (листинг 4.5 и рис. 4.5).

Листинг 4.5. Построение графиков нескольких функций в одних координатных осях с помощью командыmtlb_hold(’on’) x=-6.28:0.02:6.28;

y=sin(x/2); z=cos(x); v=exp(cos(x));

plot(x,y);

mtlb_hold(’ on’);

plot(x,z);

mtlb_hold(’ on’);

mtlb_hold(’ on’);

plot(x,v);

3.2.2.1.1.0.0.-0.-1.-8 -6 -4 -2 0 2 4 6 Рис. 4.5. Пример использования командыmtlb_hold(’on’) Обратите внимание, что при построении графиков первым способом (см. задачу 4.3) Scilab автоматически изменяет цвета кривых, изображаемых в одной системе координат.

62 Глава 4. Построение двумерных графиков 4.3 Построение нескольких графиков в одном графическом окне В Scilab 4 можно выводить несколько графиков в одном окне, не совмещая их в одних координатных осях. Например, если графическое окно должно содержать 4 самостоятельных графика, все окно разбивается на 4 области, а затем в каждую из них выводится график функции.

Для формирования области в графическом окне служит командаplotframe:

plotframe(rect, tics [,grid, title, x-leg, y-leg, x, y, w, h]) гдеrect вектор[xmin, ymin, xmax, ymax], который определяет границы изменения x и y-координат области;

tics вектор[nx, mx, ny, my], который определяет количество линий сетки по оси X (mx) и Y (my), величиныnxиnyдолжны определять число подинтервалов по осям X и Y ;

grid логическая переменная, которая определяет наличие (%t)либо отсутствие координатной сетки(%f). Этот параметр следует указывать для обеих осей, например,[%t,%t];

bound логическая переменная, которая при значенииtrueпозволяет игнорировать параметрыtics(2)иtics(4).

title заголовок, который будет выводится над графической областью;

x-leg,y-leg подписи осей графика X и Y ;

x,y координаты верхнего левого угла области в графическом окне,w ширина,h высота окна. Значенияx,y,w,hизмеряются в относительных единицах и лежат в диапазоне [0, 1].

После определения области в нее можно вывести график функции с помощью командыplot.

Задача 4.5.

Построить графики функций y = sin(2x), z = cos(3x), u = cos(sin(2x)), v = sin(cos(3x)) в одном графическом окне, каждый в своей системе координат.

Допустим, что x изменяется на интервале [-10 : 10] с шагом 0,01. Сформируем массивы значений функций Y, Z, U, V.

Используя параметрrectкак самостоятельную команду, задаем шаблон размера координатных осей каждой области построения кривой. Теперь ось X будет ограничена минимальным и максимальным значением x (зависит от конкретной функции), а ось Y для всех областей ограничивается значениями y -1 и 1.

4.3. Построение нескольких графиков в одном графическом окне Командойticsуказываем, что на всех выводимых графиках, во всех областях на оси абсцисс, должно быть 11 основных и по 2 промежуточных деления, на оси ординат 5 основных и по 10 промежуточных делений.

Для создания областей внутри графического окна используем функцию plotframeсо всеми параметрами: прорисовыванием сетки комбинацией значений(%t)и(%f), выводом подписи графика и координатных осей, а также разметкой каждой из областей массив, в котором первые два числа координаты верхнего левого угла, а последние два ширина и высота области.

Для формирования нового графика после каждого вызова функции plotframeвыполняем функциюplot(x,y)(листинг 4.6 и рис. 4.6).

Листинг 4.6. Построение графиков нескольких функций в одном графическом окне, но каждого в своих координатных осях с помощью командыplotframe x=[-10:0.01:10];

y=sin(2*x); z=cos(3*x); u=cos(sin(2*x)); v=sin(cos(3*x));

rect=[min(x),-1,max(x),1];

tics=[2,11,10,5];

plotframe(rect,tics,[%t,%t],["Function y=sin(2x)",...

"X","Y"], [0,0,0.5,0.5]);

plot(x,y);

plotframe(rect,tics,[%f,%f],["Function y=cos(3x)",...

"X","Y"], [0.5,0,0.5,0.5]);

plot(x,z);

plotframe(rect,tics,[%f,%f],["Function y=cos(sin(2x))",...

X","Y"], [0,0.5,0.5,0.5]);

plot(x,u);

plotframe(rect,tics,[%t,%t],["Function y=sin(cos(3x))",...

"X","Y"], [0.5,0.5,0.5,0.5]);

plot(x,v);

Еще одним способом изображения нескольких графиков в одном окне является использование функцииsubplot. Она также разделяет графическое окно на несколько отдельных областей, однако, по мнению авторов, имеет более простой синтаксис. Обращение к ней имеет вид:

subplot(m,n,p)илиsubplot(mnp) Выполнение функции приводит к тому, что графическое окно разбивается на m окон по вертикали и n окон по горизонтали, текущим окном становится окно с номером p.

64 Глава 4. Построение двумерных графиков Рис. 4.6. Графики четырех функций в одном графическом окне Задача 4.6.

Построить графики функций y = sin(x), z = cos(x), u = cos(sin(x)), v = sin(cos(x)), w = exp(sin(x)) и r = exp(cos(x)) в одном графическом окне, каждый в своей системе координат, используя командуsubplot.

Пусть x изменяется на интервале [-10 : 10] с шагом 0,01. Сформируем массивы значений функций Y, Z, U, V, W, R.

C помощью функцииsubplotразбиваем графическое окно на заданное количество областей. Определимся, что в каждом столбце по вертикали должно быть 3, а по горизонтали 2 области для вывода графиков.

Pages:     | 1 |   ...   | 3 | 4 || 6 | 7 |   ...   | 19 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.