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

ЭВМ_Семестр3_МетодПособие

.pdf
Скачиваний:
24
Добавлен:
05.06.2015
Размер:
2.99 Mб
Скачать

 

 

 

 

 

 

 

 

 

 

 

−2

 

 

 

 

 

 

 

 

 

 

 

 

 

< <0

(1.11)

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

cos + −

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

Для поиска корня в интервале [0,5;1,5], выбираем начальное при-

ближение x =

 

≈ 1,05 и подставляем его в формулу (1.11). Получа-

3

 

 

 

−2

 

 

 

 

 

 

ем

 

 

 

< <0 или -1,94< <0. Для вычисления

корня методом

 

 

 

 

 

 

 

1

 

3

 

1

 

 

 

 

 

 

 

 

 

 

 

 

+

 

 

 

 

 

 

 

 

 

2

2

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

итераций назначим значение =-1,3, которое лежит на отрезке [-1,94 ; 0].

Для корня, лежащего на отрезке [-2;-1], выберем начальное приближение x =-2, Так как производная f '(-2) отрицательная получим 0 < < 1,662 или 0< <1,2. Для расчета можно назначить значение

= 0,9. Ниже приведен текст макроса на языке VBA вычисления корня уравнения лежащего на отрезке [0,5;1,5] методом простой итерации. В программе комментарием (оператором «REM») помечены строки, которые следует изменить для поиска корня на отрезке [-2; -1]. Оператором «Rem Ньютон» помечены строки, которые следует использовать, для вычисления корней методом Ньютона.

Sub main_Iter()

Dim a As Single, b As Single, delta As Single Dim x1 As Single, k1 As Integer

delta = 0.0001 ' заданная точность вычисления

x1 = 1.05 ' начальное приближения для вычисления ' корня в интервале [0,5; 1]

Rem x1 = -2.0 ' начальное приближения для вычисления ' корня в интервале [-2; -1]

Call iter_1(delta, 100, x1, k1)

Debug.Print "Ответ: Метод итераций x1="; x1, "k1="; k1

End Sub

Function fi(x) ' функция для вычисления итерационной формулы fi = x - 1.3*(Sin(x) - Cos(x) - x / 3) ' для корня на отрезке [0,5;1,5]

Rem fi = x + 0.9 *(Sin(x) - . . . для корня на отрезке [-2;-1] 31

Rem Ньютон fi = x - (Sin(x) - Cos(x) - x / 3)/(Cos(x)+Sin(x) 1/3)

End Function

Sub iter_1(eps As Single, limit As Integer, x As Single, n As Integer) n = 0

Debug.Print " Метод итераций x= "; x

Do

x1 = fi(x)

Debug.Print "n="; n," x1="; x1, "Delta=";Abs(x-x1)

If Abs(x - x1) < eps Then Exit Sub x = x1

n = n + 1

If n >= limit Then

Debug.Print "Превышено предельное число итераций"

Exit Sub End If

Loop End Sub

Результаты расчета макроса:

Метод итераций x= 1,05

 

 

n= 0

x1= 1,0241921981691

Delta= 2,58077541471815E-02

n= 1

x1= 1,03315175987991

Delta= 8,95954586776093E-03

n= 2

x1= 1,03000694509424

Delta= 3,14480070196588E-03

n= 3

x1= 1,03110673303375

Delta= 1,09984750518666E-03

n= 4

x1= 1,03072159268933

Delta= 3,851177446339E-04

n= 5

x1= 1,03085640517607

Delta= 1,34859956651301E-04

Метод итераций

x1=

1,030856 k1=

6

32

Вычисление наименьшего корня методом деления отрезка пополам с относительной погрешностью, не превышающей Eps=0.0005, и с включѐнной вспомогательной печатью (KP=1):

Sub MainDOP() ' с хранением x, f в ячейках A1, B1 с именами "x", "f" ActiveWorkbook.Names.Add Name:="x", RefersToR1C1:="=Лист1!R1C1" ActiveWorkbook.Names.Add Name:="f", RefersToR1C1:="=Лист1!R1C2" Range("f") = "=SIN(x)-COS(x)-x/3" ' формулу в ячейку с именем «f» Debug.Print DOP("f", "x", -3, -1, Eps:=0.0005, KP:=1) , Range("x")

End Sub

Iter= 1

X=-2

Iter= 2

X=-1,5

Iter= 3

X=-1,75

Iter= 4

X=-1,875

Iter= 5

X=-1,9375

Iter= 6

X=-1,90625

Iter= 7

X=-1,890625

Iter= 8

X=-1,8984375

Iter= 9

X=-1,89453125

Iter= 10

X=-1,892578125

Iter= 11

X=-1,8935546875

True -1,8935546875

Интерфейс функции DOP (см. литературу [5]) представлен ниже:

Function DOP(Fch As String, Xch As String, a As Double, b As Double, _ Optional Eps As Double = 0.0001, Optional KP As Integer = -1, _

Optional Iter As Integer) As Boolean

' Fch, Xch - имена ячеек с функцией и аргументом,

'a, b - левая и правая границы отрезка, содержащего корень,

'Eps - относительная погрешность корня |X* - X|/max(|a|,|b|)<Eps,

'KP - код вспомогательной печати: KP<0 - нет вывода,

'

KP>=0 - вывод в окно отладки,

'

Iter - число выполненных приближений (выходной параметр).

33

Пример 1.4

Используя электронные таблицы Excel, найти корень уравнения sin x cos x 3x 0 с точностью =0.0001 методом простых итераций и методом касательных.

Решение данной задачи средствами Excel может быть выполнено:

с использованием циклических ссылок;

­с помощью специальных средств Excel – «подбор параметра», либо «поиск решения»;

­с использованием стандартных возможностей Excel.

Использование в Excel циклических ссылок для решения нелинейных уравнений является достаточно экзотической возможностью и, при желании, можно найти соответствующую статью в Интернет. Работа по подбору параметра и поиску решения описано в справке Excel, поэтому рассматривать этот способ не будем.

Вариант решения выше приведенного уравнения методом итераций представлен на рисунке 1.15. Значение параметра λ задается в ячейке D1 и используется в формуле ячейки В3 в абсолютной адресации. Диапазон ячеек A3:C3, с помощью маркера «Автозаполнения», затем «протягивается» вниз до тех пор, пока число с столбце «С» не станет меньше 0.0001.

Рисунок 1.15 – Фрагмент таблицы Excel реализующий метод простой итерации для решения уравнения sin x cos x 3x 0

На рисунках 1.16 и 1.17, в режиме отображения значений, представлены фрагменты таблицы Excel для нахождения двух корней

уравнения sin x cos x 3x 0 .

34

Рисунок 1.16 – Фрагмент таблицы Exсel для вычисления корня уравнения в интервале [0,5;1,5]

Рисунок 1.17 - Фрагмент таблицы Exсel для вычисления корня уравнения на отрезке [-2 ; -1] методом итераций

Вариант решения этого уравнения методом касательных представлен на рисунке 1.18 в режиме отображения формул, а на рисунке 1.19 в режиме отображения значений. Можно отметить, что методу Ньютона для вычисления корня с точностью 0,001 понадобилось все-

35

го две итерации, а методу простых итераций необходимо было сделать семь итераций.

Рисунок 1.18 - Фрагмент таблицы Exсel для вычисления корня уравнения на отрезке [0,5 ; 1,5] методом касательных

Рисунок 1.19 - Фрагмент таблицы Exсel для вычисления корня уравнения методом Ньютона в интервале [0,5 ; 1,5]

Пример 1.5

Используя встроенную функцию roots пакета MATLAB, найти корни алгебраического уравнения x3-7x+6 = 0. В квадратных скобках задаются коэффициенты многочлена, в порядке убывания степеней х.

f=inline('x^3-7*x+6') figure;

fplot(f,[-3 3]); grid;

x=roots([1 0 -7 6])

Корни уравнения

x = -3.0000

2.0000

1.0000

36

1.2 Задание к расчетно-графической работе №1

Вычислить минимальный положительный корень уравнения f(x)=0 своего варианта, представленного в таблице 1.1. Вычисления выполнить:

­средствами электронной таблицы Excel;

­с использованием макроса на языке VBA;

­средствами пакета MatLab.

Точность вычисления δ= 0.0001. Метод вычисления корня указан в таблице 1.1.

Таблица 1.1 Варианты заданий для РГР №1

Функция

f(x)

Метод вычисления

вар.

уравнения f(x)=0

 

 

 

 

 

 

 

 

1

2

 

3

 

 

 

 

 

 

1.

Ln(x) - e-x – 0,9

 

Метод деления отрезка пополам

 

 

 

 

 

 

2.

Ln(x) - Sin2(x)

 

Метод простой итерации

 

 

 

 

 

 

3.

Cos(x)-2Cos(3x)

 

Метод Ньютона

 

 

 

 

 

 

4.

xSin(x)-Cos(x-1)

 

Модифицированный метод Ньютона

 

 

 

 

 

 

5.

1 - x + Sin(x) - lg(1+x)

 

Метод деления отрезка пополам

 

 

 

 

 

 

6.

Sin(x+π/4) - x/3

 

Метод простой итерации

 

 

 

 

 

 

7.

e-x-Sin(x- π/4)

 

Метод Ньютона

 

 

 

 

8.

 

 

 

 

 

Cos(x) +0,5

 

Модифицированный метод Ньютона

 

 

 

 

9.

Lg(x)-e-x-0,5

 

Метод деления отрезка пополам

 

 

 

 

10.

Sin(x)+5Sin(3x)+0,5

 

Метод простой итерации

 

 

 

 

11.

(1-2/x)e-x

 

Метод Ньютона

 

 

 

 

 

 

37

Продолжение Таблицы 1.1

1

2

 

3

 

 

 

 

 

12.

Ln(1+x)/(ex-1) – 0,3

Модифицированный метод Ньютона

 

 

 

 

 

13.

Cos(x)-Ln(x)

Метод деления отрезка пополам

 

 

 

 

 

14.

Ln2(x+1)-Cos(x+1)

Метод простой итерации

 

 

 

 

 

15.

ex - e-x -5

Метод Ньютона

 

 

 

 

 

16.

Ln(x) - Sin(x)

Модифицированный метод Ньютона

 

 

 

 

 

17.

3Cos(x)-1/x

Метод деления отрезка пополам

 

 

 

 

 

18.

Sin(x) - 1/x

Метод простой итерации

 

 

 

 

 

19.

Ln(1+x)/x - 2/ π

Метод Ньютона

 

 

 

 

 

20.

e(1-x)Ln(1+x2)-0,4

Модифицированный метод Ньютона

 

 

 

 

 

21.

Cos(x+π/4)-Ln(2+x)+2

Метод деления отрезка пополам

 

 

 

 

 

22.

Ln(x) - 1/x

Метод простой итерации

 

 

 

 

 

23.

Lnx)xe-x

Метод Ньютона

 

 

 

 

 

24.

1+Ln(x) - π/x

Модифицированный метод Ньютона

 

 

 

 

 

25.

x3-3x-5

Метод деления отрезка пополам

 

 

 

 

 

26.

Ln(x) - 1/x2

Метод простой итерации

 

 

 

 

Cos(x-3 π/4)/

 

 

Метод Ньютона

27.

 

 

 

 

 

28.

Lg(x)-πCos(x)2

Модифицированный метод Ньютона

 

 

 

29.

e2-x - x2

Метод деления отрезка пополам

30.

Cos(x+π/4) - Ln(2+x)+2

Метод простой итерации

 

 

 

 

 

38

2 РАСЧЕТНО-ГРАФИЧЕСКАЯ РАБОТА №2 Решение систем линейных алгебраических уравнений

методом (прямые методы)

2.1 Краткие теоретические сведения

2.1.1 Формулировка задачи

Во многих инженерных и научных расчетах приходится решать системы линейных алгебраических уравнений (СЛАУ)

a11x1 a12x2

... a1n xn

b1

 

 

 

a22x2

... a2n xn

b2

 

a21x1

 

 

 

 

 

 

 

,

(2.1)

 

 

 

 

 

 

 

 

 

 

 

 

a

x a

n 2

x

... a

nn

x

b

 

 

n1 1

 

2

 

n

n

 

когда число неизвестных

x1 , x2 , , xn равно числу n уравнений.

В матричной форме эта задача записывается следующим образом:

 

 

 

 

 

 

 

?

(2.2)

 

 

 

Ax

b,

x

где A - (n n) - матрица коэффициентов,

b - n-компонентный вектор правых частей уравнений (столбец свободных членов),

x - искомый n-компонентный вектор неизвестных, выражающиеся через свои компоненты:

a

a

...

a

 

 

b

 

11

12

 

1n

 

 

1

 

a21

a22

...

a2n

b2

 

A ... ...

...

...

;

b ...

;

 

 

 

 

 

 

 

 

 

an2

...

 

 

 

 

 

an1

ann

 

bn

 

 

x

 

 

 

 

1

 

 

 

 

x2

 

?

 

x

 

 

(2.3)

 

 

 

...

 

 

 

 

 

 

 

 

 

xn

 

 

 

Из курса линейной алгебры известно, что система (2.1) имеет единственное решение (единственный набор значений x1, x2 , , xn , обращающий уравнения в тождества), если определительdet(A) матрицы A не равен нулю. Этот случай иллюстрируется рисунком 2.1 для системы двух линейных уравнений (i)-(ii).

39

a11x1 a12 x2

b1

(i)

 

a22 x2

b2

(ii)

a21x1

Рисунок 2.1 – Случай единственного решения.

 

 

Рисунок 2.2 – Случай

Рисунок 2.3 – Случай

 

 

отсутствия решения.

бесконечного числа решений.

 

Точке пересечения прямых,

 

соответствующих уравнениям,

отвечает единственное решение

,

 

системы.

 

1

2

 

 

Если определитель det(A) матрицы A равен нулю, то система уравнений вырожденная, и она, либо не имеет решения, либо имеет бесконечно много решений (в зависимости от значений правых частей). Вырожденные случаи для системы для системы (i)-(ii) показаны на рисунках 2.2 и 2.3.

Сразу же отметим, что при численном решении задачи (2.2) не применяется (при n > 4) традиционный в линейной алгебре способ решения систем по формулам Крамера (через определители, вычисляемые как произведения коэффициентов матрицы А) из-за большого объема вычислений уже при сравнительно малых n .

Численные методы решения систем уравнений делятся на прямые и итерационные. Прямые методы позволяют получить неиз-

40