Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект.pdf
Скачиваний:
51
Добавлен:
23.07.2020
Размер:
2.68 Mб
Скачать

Для решения этой системы сначала составим матрицу коэффициентов левой части - A и вектор правых частей B. Затем решим систему, подставив

Решим уравнение вида A*X=B:

>> A=[1, -3, 4; 2, 1 -7; 1, -6, -1]; % матрица коэффициентов левой части

>> B=[11; 8; -5]; % вектор столбец правых частей

>>X=A \ B

X=

9.6750

2.1250

1.9250

Проверим полученное решение, выполнив умножение A*X:

>> A*X

% проверка

ans =

 

11.0000

 

8.0000

 

-5.0000

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

Или по-другому:

Решение системы X=A-1*B

>> A=[1, -3, 4; 2, 1 -7; 1, -6, -1]; % матрица коэффициентов левой части

B=[11; 8; -5]; >> X=inv(A)*B

X=

9.6750

2.1250

1.9250

Численное интегрирование

В математике существуют различные численные методы вычисления

20

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

ML для вычисления определенных интегралов также существуют функции,

реализующие различные методы. Это: trapz (x, y) использует метод трапеций, quad() метод Симпсона, quadl() – метод квадратур Лобатто, quadgk() метод Гаусса-Кронрода и др. (quadv()dblquad()) quad2d()

вычисление двойного интеграла, triplequad() - вычисление тройного интеграла. Методы отличаются точностью вычислений. Наиболее используемая функция - quadl()

Самым простым численным методом нахождения определенных интегралов является метод трапеций, который реализован функцией trapz (x, y), где x и y – векторы, задающие значения аргумента и функции в пределах интегрирования. Для ее использования не требуется оформление подынтегральной функции в качестве файла-функции.

>> x=0:pi/100:pi; y=exp(-x.^2); z=trapz(x,y)

z = 0.886219032458507

Все остальные функции имеют одинаковый набор параметров:

[i, n]=quadl (fun, a, b, tol, trace),

21

fun имя файла-функции или символьное выражение, определяющее подынтегральную функцию (оно должно быть заключено в апострофы).

a, b – пределы интегрирования. tol – погрешность вычислений.

trace – признак вывода промежуточных результатов. Если его значение равно единице, то при выполнении функции выдается последовательность из 4-х

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

Последние два параметра являются необязательными.

Выходные значения:

i значение интеграла;

n – количество значений функции, которое потребовалось вычислить для нахождения значения интеграла.

При использовании этих численных методов можно задавать требуемую точность вычислений, а шаг подбирается автоматически (в отличие от функции trapz). По умолчанию точность равна 10-6.

Как мы уже знаем, функция может быть задана различными способами

(либо как символьная константа, либо как имя m-файла, в котором записана функция, либо как анонимная функция.).

Если функция задана одним оператором, то удобнее использовать вариант с указателем на функцию (анонимная функция). Например, будем использовать ту же функцию exp(-x^2)

Функцию можно описать ее отдельной командой f = @ (x) (exp(-x.^2)), а затем использовать это имя:

f = @ (x) (exp(-x.^2));

[i, n]= quadl (f, 0, pi, 1e-8,0) i = 0.886219059172834

n=

138

22

Или указать прямо в команде вычисления интеграла:

>> [i, n]= quadl (@ (x) (exp(-x.^2)), 0, pi, 1e-8, 1)

18 0.00000

1.5707963

0.88616

 

00000

3e+000

00099

23 0.00000

1.4412324

0.28045

 

00000

8e-001

85210

28 0.28824

2.9003417

0.41128

 

64966

9e-001

28181

33 0.28824

2.6611131

0.04819

 

64966

7e-002

00338

38 0.34146

5.3552343

0.09157

 

87600

7e-002

03542

43 0.44857

6.4853613

0.09958

 

34474

9e-002

47932

48 0.57828

6.4853613

0.08574

 

06752

9e-002

82019

53 0.70798

5.3552343

0.05998

 

79030

7e-002

02482

58 0.81509

2.6611131

0.02620

 

25903

7e-002

91868

63 0.86831

3.5124073

0.17115

 

48537

7e-001

91410

68 0.86831

3.2226938

0.02865

 

48537

0e-002

10329

73 0.93276

6.4853613

0.04801

 

87298

9e-002

02371

78 1.06247

7.8539816

0.04286

 

59576

3e-002

77948

83 1.21955

7.8539816

0.02926

 

55902

3e-002

97717

88 1.37663

6.4853613

0.01631

 

52229

9e-002

03789

93 1.50634

3.2226938

0.00604

 

24507

0e-002

99256

98 1.57079

3.5124073

0.02217

 

63268

7e-001

00092

10

1.57079

3.2226938

0.00494

3

63268

0e-002

16447

10

1.63525

6.4853613

0.00725

8

02029

9e-002

43988

11

1.76495

7.8539816

0.00531

3

74307

3e-002

28603

11

1.92203

7.8539816

0.00291

8

70633

3e-002

17921

12

2.07911

6.4853613

0.00132

3

66960

9e-002

32772

12

2.20882

3.2226938

0.00042

8

39238

0e-002

60361

13

2.27327

2.9003417

0.00110

3

77999

9e-001

80957

23

13 2.85334 1.4412324 0.00004

8 61570 8e-001 04741 i = 0.886219059172834

n=

138

Примерно такое же значение интеграла получим, если не укажем два необязательных параметра, но количество значений другое (т.к. другая точность вычислений):

[i, n]=quadl(f, 0, pi ) i = 0.886219059165851

n =

48

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

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

[i, n]= quad (f, 0, pi, 1e-8, 0) i = 0.886219059339376

n = 89

n=quadgk (f, 0, pi) i = 0.886219059172853

Если требуется проиллюстрировать графическую интерпретацию интеграла, а подынтегральная функция задана в виде функции, то

y=-1:0.01:5; plot(y,f(y)) hold on;

x=0:1:pi;% при использовании area шаг не имеет значения

%bar(х,f(х)) или area(х,f(х))

24