- •Оглавление
- •Введение
- •Краткий обзор системы
- •Знакомство с интерфейсом Scilab
- •Функции, определяемые пользователем и процедуры
- •Циклы
- •Погрешность результата численного решения задачи
- •Приближенные вычисления определенных интегралов
- •Методы прямоугольников
- •Метод трапеций
- •Метод Симпсона
- •Квадратуры Гаусса
- •Методы Монте-Карло
- •Вычисление определенных интегралов в системе Scilab
- •Решение систем линейных алгебраических уравнений
- •Метод Гаусса
- •Формула Крамера
- •Метод простых итераций
- •Метод Зейделя
- •Метод отражений
- •Метод LU-разложений
- •Решение нелинейных алгебраических уравнений
- •Метод половинного деления
- •Метод секущих
- •Метод секущих (с изменяемым углом)
- •Метод Ньютона (касательных)
- •Метод Бернулли
- •Аппроксимация и интерполирование функций
- •Интерполяционный многочлен Лагранжа
- •Интерполяционная формула Ньютона
- •Интерполяционные формулы Гаусса
- •Линейная аппроксимация по методу наименьших квадратов
- •Кусочно-кубические сплайны
- •Анимация на плоскости
- •Анимация в пространстве
- •Метод Рунге-Кутта
- •Метод Эйлера
- •Метод Прогонки
- •Метод Пикара
- •Возможности Scilab для решения ОДУ
- •Список Литературы
42
while i > 0 z = 0.0; j = k;
while j > i
z = z + a(i,j)*x(j); j = j-1;
end
x(i) = (a(i,m)-z)/a(i,i); i = i-1;
end
disp('Вектор искомых неизвестных:') x
Рис.3.2. Метод Гаусса
2) ФОРМУЛА КРАМЕРА
xi = DDi , где
D −определительматрицысистемы, а Di −определитель, получающийсяиз D заменой i − тогостолбца матрицысистемы на столбецсвободных членов.
Давайте теперь на конкретном примере разберем этот метод.
Решим следующую систему уравнений:
x1 − x2 = −12x1 + x2 = 7
43
D |
|
= |
|
1 |
−1 |
|
=3 ; |
|
|
|
||||||||
|
|
|
|
|
|
|||||||||||||
|
|
|
|
2 |
1 |
|
|
|
|
|
|
|
|
|
||||
D |
|
= |
|
|
−1 −1 |
|
= 6 ; |
|
|
|||||||||
|
|
|
|
|||||||||||||||
1 |
|
|
|
|
7 |
1 |
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||
D |
2 |
= |
|
1 |
−1 |
|
=9 ; |
|
|
|||||||||
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
2 |
7 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
x |
|
= |
D1 |
= 2, x |
= |
D2 |
=3 ; |
|||||||||||
|
|
|
||||||||||||||||
1 |
|
|
|
D |
1 |
|
D |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
• Теперь представим решение в системе Scilab.
Листинг3.2 (Крамер)
//читаем матрицу из файла f = mopen('C:\Matrix.txt','r'); n = mfscanf(f,'%d');
m = mfscanf(f,'%d'); for i = 1:n
for j = 1:m
a(i,j) = mfscanf(f,'%g'); end
end mclose(f);
//формируем матрицу системы for i = 1:n
for j = 1:n d(i,j) = a(i,j);
end end
//формируем столбец свободных членов for j = 1:n
v(j) = a(j,m); end
temp = d;
D = det(d); // определитель системы
for i = 1:n for j = 1:n
// меняем i-ый столбец матрицы на столбец свободных членов d(j,i) = v(j);
end
vector_ans(i) = det(d)/D; d = temp;
end
disp('вектор ответов:'); vector_ans
44
Рис.3.3. Формула Крамера
3) МЕТОД ПРОСТЫХ ИТЕРАЦИЙ
Дано уравнение:
5x1 − 2x2 + x3 =11
(1) x1 −3x2 + x3 =5
− 4x1 + 2x2 − 7x3 = −17
Чтобы данную систему можно было решить итерационным методом, требуется выполнение системы условий:
|
|
A |
|
|
|
|
|
≥ |
|
|
|
A |
|
|
|
+ |
|
|
|
A |
|
; |
||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
11 |
|
|
|
|
|
|
12 |
|
|
|
|
|
|
13 |
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
A22 |
|
|
|
≥ |
|
A21 |
|
|
|
+ |
|
A23 |
|
; |
||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
A |
|
|
|
≥ |
|
|
|
A |
|
+ |
|
|
|
|
|
A |
|
; |
||||||||||||
|
|
|
|
|
|
|||||||||||||||||||||||||||
|
|
33 |
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
|
|
|
32 |
|
|
|
|
|
|
||||
5 ≥ − 2 + 1 =3; // выполняется
−3 ≥ 1 + 1 =3; // выполняется
−7 ≥ − 4 + 2 = 6; // выполняется
x = |
11 + 2x2 − x3 |
, |
x |
2 |
= |
5 − x1 − x3 |
, |
x |
3 |
= −17 + 4x1 − 2x2 ; (*) |
||||||||||
|
|
|
|
|||||||||||||||||
1 |
5 |
|
|
|
|
−3 |
|
|
|
|
|
|
|
− 7 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
Зададим точность нашего решения системы уравнений e = 0.0001; |
||||||||||||||||||||
Зададим начальные значения x1 = 0, |
x2 |
= 0, |
|
x3 = 0; (начальное |
||||||||||||||||
приближение вектора ответов). |
|
|
|
|
|
|
|
|
||||||||||||
Тогда, из (*) имеем: |
|
x = |
11 |
, |
x |
|
= − |
5 |
, x |
|
= |
17 |
; Теперь подставляем |
|||||||
|
|
2 |
|
3 |
|
|||||||||||||||
|
|
|
|
|
1 |
5 |
|
|
|
|
|
3 |
|
7 |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
эти значения в формулы (*), получаем новые x1 , x2 , x3 ; продолжаем этот процесс до тех пор, пока при заданных x1 , x2 , x3 не выполнится система условий:
45
|
|
11 − (5x1 − 2x2 + x3 ) |
|
≤ e; |
|||||||
|
|
||||||||||
|
|
5 − (x1 −3x2 |
+ x3 ) |
|
≤ e; |
|
|
|
|||
|
|
|
|
|
|
||||||
|
|
−17 − (−4x + 2x |
2 |
|
− 7x |
) |
|
≤ e; |
|||
|
|
||||||||||
|
|
1 |
|
3 |
|
|
|
||||
(см. таблицу3.1)
№ |
x1 |
x2 |
x3 |
11 − (5x1 − 2x2 + x3 ) |
5 −(x1 −3x2 + x3 ) |
−17−(−4x1 +2x2 −7x3) |
0 |
2,2 |
-1,66667 |
2,428571 |
5,761905 |
-4,62857 |
12,13333 |
1 |
1,047619 |
-0,12381 |
0,695238 |
-4,81905 |
2,885714 |
-7,69524 |
2 |
2,011429 |
-1,08571 |
1,794558 |
3,023129 |
-2,06313 |
5,779048 |
3 |
1,406803 |
-0,398 |
0,96898 |
-2,201 |
1,430204 |
-3,79392 |
4 |
1,847002 |
-0,87474 |
1,510969 |
1,495458 |
-0,98219 |
2,714268 |
5 |
1,547911 |
-0,54734 |
1,123216 |
-1,04254 |
0,686844 |
-1,85116 |
6 |
1,75642 |
-0,77629 |
1,387667 |
0,722347 |
-0,47296 |
1,291932 |
7 |
1,61195 |
-0,61864 |
1,203106 |
-0,49987 |
0,329031 |
-0,89318 |
8 |
1,711924 |
-0,72831 |
1,330703 |
0,346952 |
-0,22757 |
0,619249 |
9 |
1,642533 |
-0,65246 |
1,242239 |
-0,24018 |
0,157855 |
-0,42928 |
10 |
1,690569 |
-0,70508 |
1,303564 |
0,166561 |
-0,10936 |
0,297379 |
11 |
1,657257 |
-0,66862 |
1,261082 |
-0,11539 |
0,075795 |
-0,20616 |
12 |
1,680335 |
-0,69389 |
1,290533 |
0,079981 |
-0,05253 |
0,142842 |
13 |
1,664339 |
-0,67638 |
1,270127 |
-0,05543 |
0,036402 |
-0,099 |
14 |
1,675424 |
-0,68851 |
1,28427 |
0,038412 |
-0,02523 |
0,068608 |
15 |
1,667741 |
-0,6801 |
1,274469 |
-0,02662 |
0,017484 |
-0,04755 |
16 |
1,673065 |
-0,68593 |
1,281261 |
0,018448 |
-0,01212 |
0,032952 |
17 |
1,669376 |
-0,68189 |
1,276554 |
-0,01279 |
0,008397 |
-0,02284 |
18 |
1,671933 |
-0,68469 |
1,279816 |
0,00886 |
-0,00582 |
0,015826 |
19 |
1,670161 |
-0,68275 |
1,277556 |
-0,00614 |
0,004033 |
-0,01097 |
20 |
1,671389 |
-0,68409 |
1,279122 |
0,004255 |
-0,00279 |
0,007601 |
21 |
1,670538 |
-0,68316 |
1,278037 |
-0,00295 |
0,001937 |
-0,00527 |
22 |
1,671128 |
-0,68381 |
1,278789 |
0,002044 |
-0,00134 |
0,003651 |
23 |
1,670719 |
-0,68336 |
1,278268 |
-0,00142 |
0,00093 |
-0,00253 |
24 |
1,671002 |
-0,68367 |
1,278629 |
0,000982 |
-0,00064 |
0,001753 |
25 |
1,670806 |
-0,68346 |
1,278378 |
-0,00068 |
0,000447 |
-0,00122 |
26 |
1,670942 |
-0,68361 |
1,278552 |
0,000471 |
-0,00031 |
0,000842 |
27 |
1,670847 |
-0,6835 |
1,278432 |
-0,00033 |
0,000215 |
-0,00058 |
28 |
1,670913 |
-0,68357 |
1,278515 |
0,000226 |
-0,00015 |
0,000404 |
29 |
1,670868 |
-0,68352 |
1,278457 |
-0,00016 |
0,000103 |
-0,00028 |
30 |
1,670899 |
-0,68356 |
1,278497 |
0,000109 |
-7,1E-05 |
0,000194 |
31 |
1,670877 |
-0,68353 |
1,27847 |
-7,5E-05 |
4,95E-05 |
-0,00013 |
32 |
1,670892 |
-0,68355 |
1,278489 |
5,22E-05 |
-3,4E-05 |
9,33E-05 |
Таблица.3.1. Итерации Таким образом, вектор ответов:
x1x2
x3
=1,670892
=−0.68355 ;
=1.278489
• Теперь представим решение в системе Scilab.
46
Листинг 3.3.
e = 0.0001; // установим точность z_prev = 1000000; // фиктивное значение
f = mopen('C:\Matrix.txt','r'); n = mfscanf(f,'%d');
m = mfscanf(f,'%d'); for i = 1:n
for j = 1:m
a(i,j) = mfscanf(f,'%g'); end
end mclose(f);
//проверка на сходимость for i = 1:n
for j = 1:n
if abs(a(i,j)) > abs(a(i,i)) disp('Система расходится'); return;
end end
end
//будущий вектор ответов
for i = 1:n x(i) = 0.0;
end
while 5 < 7 for i = 1:n
x_1(i) = 0.0; end
z = 0; z_1 = 0; z_2 = 0; for i = 1:n
z = z + a(1,i)*x(i);
z_1 = z_1 + a(2,i)*x(i); z_2 = z_2 + a(3,i)*x(i);
end
z = a(1,m)-z;
z_1 = a(2,m)-z_1; z_3 = a(3,m)-z_2;
if abs(z) < e & abs(z_1) < e & abs(z_1) < e disp('Вектор ответов');
x return;
end
// реализуем формулу (*) for i = 1:n
