Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Informatika_met_ukazania

.pdf
Скачиваний:
11
Добавлен:
11.03.2016
Размер:
1.34 Mб
Скачать

 

 

 

 

 

a11

a12

...

a1n

 

 

 

 

 

 

A

a21 a22

...

a2n

 

 

 

 

 

 

. . . . . . . . . . . . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

an1

an2

...

ann

 

 

называется

основной матрицей

системы, b a1n 1 a2n 1 . . . ann 1

T

 

вектор-столбцом свободных членов

или правых частей системы, а

x x x

2

... x T

− искомым вектор-столбцом неизвестных системы.

1

 

n

 

 

 

 

 

 

 

Решением СЛАУ является всякий вектор-столбец x, обращающий все уравнения системы в тождества.

Справедливо следующее утверждение. Если определитель det A основной матрицы СЛАУ Ax b отличен от нуля, то система имеет единственное решение.

Рассмотрим порядок решения СЛАУ в MatLab на конкретном примере. Найти решение СЛАУ вида

7.9x1 5.6x2 5.7x3 7.2x4 6.68, 8.5x1 4.8x2 0.8x3 3.5x4 9.95, 4.3x1 4.2x2 3.2x3 9.3x4 8.6, 3.2x1 1.4x2 8.9x3 3.3x4 1.

Процесс решения будет выглядеть следующим образом:

>> A=[7.9 5.6 5.7 -7.2;8.5 -4.8 0.8 3.5;4.3 4.2 -3.2 9.3;3.2 -1.4 -8.9 3.3]

A=

7.9000 5.6000 5.7000 -7.2000

8.5000 -4.8000 0.8000 3.5000

4.3000 4.2000 -3.2000 9.3000

3.2000 -1.4000

-8.9000 3.3000

>> det(A)

 

ans =

 

-1.0178e+004

% det А не равен нулю − решение единственное

>> b=[6.68;9.95;8.6;1]

b=

6.6800

9.9500

21

8.6000

1.0000

>>x=A\b

x = 0.9671 0.1248 0.4263 0.5679

>>A*x-b % вычисление невязки (несоответствие между левой и

ans = % правой частями СЛАУ)

1.0e-014 * -0.0888 0.1776 0.1776 0.0444

Символ «\» является оператором решения системы линейных уравнений.

Решение нелинейного уравнения. Нелинейным уравнением на-

зывается выражение вида f (x) 0 , где f (x) – некоторая нелинейная

функция. Корнем или решением уравнения называется всякое значение , обращающее уравнение в тождество, т. е. f ( ) 0 . В дальнейшем

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

Функция f (x) , определенная и непрерывная на некотором конеч-

ном или бесконечном интервале a x

b , называется алгебраической,

если она имеет вид f (x) a xn

a xn 1

... a

x a

, где a – некото-

0

1

n 1

n

i

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

К численным методам решения нелинейных уравнений приходится обращаться в случае отсутствия у них аналитических выражений для решений или в случае, если выполнение вычислений по ним является крайне трудоемким делом.

Приближенное нахождение изолированных действительных корней обычно складывается из двух этапов:

22

 

 

1) отделение корней, т. е. нахождение возможно узких промежут-

ков [

i ,

i ] , в которых содержится один и только один корень уравне-

ния

i

[

i ,

i ] , i = 1, 2, …;

 

 

 

 

 

 

 

 

 

 

 

 

 

2) уточнение приближенных корней, т. е. нахождение их положе-

ния с заданной степенью абсолютной точности

0 . Под этим может

 

 

 

 

 

 

 

 

 

 

 

пониматься

выполнение

одного

из двух

условий:

 

i

i

 

или

 

f (

i )

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для отделения корней полезна известная теорема существования

корней нелинейного уравнения из математического анализа.

 

 

 

 

 

Теорема.

Если непрерывная функция

f (x)

принимает значения

разных знаков на концах отрезка

[ i ,

i ] , т.

е.

f (

i ) f (

i ) 0 , то

найдется хотя бы одно число i

[

i ,

i ] такое, что f ( i )

 

0 .

 

 

Корень

i [ i , i ] заведомо будет единственным,

если производ-

ная

f

(x) существует и сохраняет постоянный знак внутри интервала

( i ,

i ) , т. е. если f '(x)

0 (или

f '(x)

0 ) при

i

x

i .

 

 

 

 

 

Пример 1. Отделить корни уравнения

x3

6x

2

0

на отрезке

[–10, +10].

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Решение.

 

 

 

 

 

 

 

 

 

 

 

 

 

>>x=[-10:0.01:10]; % шаг 0.01 выбран исходя из структуры функции

>>f=x.^3-6*x+2;

>>plot(x,f)

>>grid on % вызов функции grid с аргументом on приводит

%к появлению сетки на графике

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

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

(Zoom In) и (Zoom Out), расположенные в графическом окне. Ими следует выделить интересующую прямоугольную область графика. В итоге получаем более удобное графическое представление (рис. 9,б), из которого следует, что корни уравнения находятся где-то внутри от-

резков [–3, –2], [0, 1] и [2, 3].

23

а б Рис. 9. Отделение корней нелинейного уравнения

Для реализации второго этапа решения нелинейного уравнения вида f (x) 0 в системе MatLab имеется функция fzero, записываемая в

различных видах:

− fzero(‘fun’,x) − возвращает уточненное значение для х, при котором достигается нуль функции fun − имя М-файла, представленной строкой. Оно должно совпадать с именем М-файл функции. Значение х, стоящее вторым аргументом при вызове fzero, является начальным приближением к искомому корню.

Примеры:

>> fzero('cos',1) % поиск корня стандартной функции в окрестностях 1 ans =

1.5708

>> fzero('ff',-3) % поиск корня функции ff (рис. 10) в окрестностях –3 ans =

-2.6017

Рис. 10. Окно редактора М-файлов с функцией ff

24

− fzero(‘fun’,[x1 x2]) − возвращает уточненное значение для х, находящееся внутри интервала (х1, х2). Должно выполняться условие fun(x1) fun(x2) < 0.

Примеры:

>>fzero('ff',[-3 -2]) ans =

-2.6017

>>fzero('ff',[0,1]) ans =

0.3399

fzero(‘fun’,x,tol), fzero(‘fun’,[x1 x2], tol) − выполняют те же дейст-

вия, что и выше, но с заданной относительной точностью tol. Примеры:

>>format long

>>fzero('ff',-3,1e-15)

ans = -2.601679131883155

>> fzero('ff',[0,1],1e-10) ans =

0.339876886623182

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

Порядок выполнения работы

1. Решить СЛАУ в соответствии с вариантом. Вычислить невяз-

ку.

2. Установить числовой формат long e. Решить нелинейное уравнение на заданном отрезке [a, b] (т. е. сначала отделить корни, а затем уточнить их положение) в соответствии с вариантом, используя для уточнения положения каждого корня обе формы функции fzero. Срав-

нить формы функции fzero по величине невязки f (xn ) .

25

Контрольные вопросы и задания

1.Поясните на примере порядок создания М-файл функции.

2.Сформулируйте постановку задачи решения СЛАУ.

3.Какие уравнения называются нелинейными, алгебраическими и трансцендентными?

4.Что называется решением нелинейного уравнения?

5.В чем содержание этапов нахождения корней нелинейного уравнения?

6.Сформулируйте теорему существования корней нелинейного уравнения.

7.Какие методы поиска решения нелинейного уравнения реализо-

ваны в MatLab?

Лабораторная работа № 2

ОСНОВЫ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ MATLAB

Цель работы – ознакомление с основными приемами программирования в среде MatLab и получение навыков их использования.

Пояснения к работе Линейные алгоритмы. Типичным примером линейного алгоритма

является алгоритм вычисления значения функции f (x)

5x2 2

,

cos e 4.8 x

реализованный в предыдущей лабораторной работе. Кроме М-файл функций, которые имеют входные и выходные параметры, в MatLab определены М-файл программы, не имеющие входных и выходных параметров. Создаются они так же, как и М-файл функции, но их содержимым является, по сути, последовательность команд MatLab (см., например, М-файл программу ex1.m на рис. 1 − текст взят из предыдущей лабораторной работы). Для вызова М-файл программы достаточно набрать ее имя в командной строке (и нажать на клавишу <Enter>). Создание из команд М-файл программы, очевидно, разумно, если записанная в нем последовательность команд будет неоднократно использоваться впоследствии.

26

Рис. 1. Окно редактора М-файла с программой

Переменные, определенные в одной М-файл программе, можно использовать в других М-файл программах и в командах, выполняемых из командной строки.

После ввода команды MatLab выполняет следующие действия.

1.Проверяет, является ли введенная команда именем переменной из рабочей среды. Если является, то MatLab выводит ее значение.

2.Если введенная команда не является именем переменной, то MatLab ищет введенную команду среди встроенных функций. При положительном решении выполняется вызов встроенной функции.

3.Если не выполняются два предыдущих условия, то MatLab начинает поиск М-файла с названием введенной команды и расширением m. Поиск начинается с текущего каталога и продолжается в каталогах, указанных в пункте Set Path… меню File.

Рассмотрим несколько подробнее М-файл функции. Кроме уже описанной ранее М-файл функции с одним входным и одним выходным аргументом допустимо конструировать и М-файл функции со многими входными и выходными параметрами, как показано ниже и на рис. 2.

Рис. 2. Окно редактора М-файла с функцией

27

>>a=[1:1:10];

>>x=[0:2:18];

>>[Y,Z]=tre(a(3),a,x) Y =

9 Z =

0 4 12 24 40 60 84 112 144 180

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

f (x, y)

x2

cos y , если 15 x

5,

.

0

в остальных случаях.

 

 

 

 

Вычисления f(x, y) могут быть выполнены, как показано на рис. 3.

Рис. 3. Окно редактора М-файла с функцией f(x, y)

В системе MatLab условный оператор if имеет две формы (см. таблицу). Примером использования сложной формы оператора if является функция, представленная на рис. 4, а вызвать ее можно так:

>> ifdemo(5)

а не равно нулю, единице или двум

Функции disp используются для вывода сообщения на дисплей.

28

 

Простая

Сложная

 

 

 

if

условие

if условие1

 

операторы

операторы

end

elseif условие2

if

условие

операторы

 

операторы

elseif условие3

else

операторы

 

операторы

. . . . . . . . . . . .

end

else

 

 

операторы

 

 

end

Рис. 4. Окно редактора М-файла с функцией ifdemo(a)

Другим оператором ветвления является switch. У него следующий синтаксис:

switch выражение

case значение выражения1

операторы1

case {значение выражения2, значение выражения3, ...}

операторы2

. . . . . . . . . . . . . . . . .

otherwise

операторыN

end

29

Работает оператор switch следующим образом.

1.Находится значение выражения.

2.Если оно совпадает со значением выражения1, то выполняются

операторы1.

3.Если оно совпадает с одним из результатов списка {значение выражения2, значение выражения3, ...}, то выполняются операторы2.

4.Если оно не совпадает ни с одним из значений выражений, то выполняются операторыN.

Пример. Рассмотренный выше пример с использованием оператора switch будет иметь вид, показанный на рис. 5, а результат ее вызова показан ниже:

>>switchdemo(2)

а равно двум или трtм

Рис. 5. Окно редактора М-файла с функцией switchdemo(a)

Для конструирования условных выражений в MatLab используются следующие операции сравнения: «==» − равно, «~=» − не равно, «>» − больше, «<» − меньше, «>=» − больше или равно, «<=» − меньше или

равно. К логическим операциям относятся: A&B

and(A,B) − логиче-

ское И, A|B or(A,B) − логическое ИЛИ, ~A

not(A) − логическое

НЕТ, xor(A) − исключающее ИЛИ.

 

30

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]