Решение систем линейных алгебраических уравнений методом исключения Гаусса
Методы вычислительной математики
Табулирование функций
Данная задача широко используется во многих дисциплинах. Обычно функции, описывающие какой-либо процесс, весьма громоздки и создание таблиц их значений требует большого объема вычислений.
Рассмотрим два случая табулирования функции:
1. С постоянным шагом изменения аргументов.
2. С произвольным набором значений аргумента.
Алгоритм реализуется путем организации какого-либо цикла.
Пример 1. Вычислить значения функции
при
Текст программы:
format short
clc
a=1.1;
disp(['Таблица значений функции'])
%Задается начальное значение x, шаг dx, конечное значение x
x=1; dx=0.5;
while x<=4+dx
if x<=2
y=3*x-3.87*sin(a)-log(2+x);
else
y=14-exp(x);
end
disp([x,y])
x=x+dx;
end
Результаты вычислений:
Таблица значений функции
1.0000 -1.5476
1.5000 -0.2017
2.0000 1.1647
2.5000 1.8175
3.0000 -6.0855
3.5000 -19.1155
4.0000 -40.5982
4.5000 -76.0171
Пример 2. Вычислить и вывести на экран значения функции
При
Цикл организуется для одномерного массива.
Текст программы:
format short
clc
a=1.35;b=0.98;
x(1)=12.8; x(2)=23.4; x(3)=27.2;
x(4)=17.8; x(5)=16.3; x(6)=14.9;
disp(['Таблица значений функции'])
for i=1:6
y(i)=(1+sin(b^2+x(i)^2)^2)/(a^2+x(i)^2)^(1/3);
disp([x(i) y(i)])
end
Результаты вычислений:
Таблица значений функции
12.8000 0.3609
23.4000 0.2327
27.2000 0.1473
17.8000 0.1800
16.3000 0.1771
14.9000 0.1658
Определение корней полинома
В MATLAB существует специальная функция которая возвращает вектор элементов, являющихся корнями заданного (в виде вектор - строки коэффициентов) полинома .
Если в полиноме отсутствует степень при неизвестном, то в векторе значений коэффициентов ставится 0.
Пример. Найти корни полинома:
Построим график функции
>> x=-2:0.1:1;
>> y=4*x.^4-7*x.^2+11*x-1 ;
>> plot(x,y)
>> grid on
Решение
>> p=[4 0 -7 11 -1];
>> roots(p)
ans =
-1.8253
0.8642 + 0.8169i
0.8642 - 0.8169i
0.0968
Отсюда видно, что эта функция определяет как вещественные, так и комплексные корни полиномов.
Исследование функций
Ряд функций системы MATLAB предназначен для работы с функциями. Под функциями понимаются как встроенные функции, например или так и функции пользователя, например задаваемые как M- файлы функции.
Может использоваться также класс анонимных функций, задаваемых с помощью символа @, например:
>> fe=@exp;
Такие функции вычисляются с помощью функции :
>> fe=@exp;
>> feval(fe,1.0)
ans =
2.7183
Методы отделения корней уравнений с одной переменной
Пример.Отделить корни трансцендентного уравнения графически.
Решение.
Создадим файл Func.m , содержащий описание функции .
Файл Func.m.
function z=Func(x)
z=x.^2-sin(x)-1;
end
Построим график функции в промежутке [-2; 2] выполнив в командном окне пакета MATLAB следующую последовательность операторов:
>> x=-2:0.1:2;
>> plot(x, Func(x)); grid on
Из рисунка видно, что функция имеет два корня: и .
Решение уравнений, нахождение максимума или минимума функции одной или нескольких переменных осуществляется вызовом встроенных функций MatLab. Число аргументов встроенных функций может быть различным, в зависимости от требуемого вида результата.
Для работы с ними необходимо предварительно написать собственную файл-функцию для вычисления исследуемой функции.
Решение уравнений
MATLAB можно использовать для решения алгебраических и трансцендентных уравнений и систем уравнений, заданных в виде массива символьных выражений.
Решение алгебраических и трансцендентных уравнений в среде MATLAB осуществляется с помощью следующих встроенных функций: ,
Решение уравнений при помощи функций , .
Функция предназначена для решения систем нелинейных уравнений вида , где
— вектор или матрица неизвестных,
— функция, значением которой является вектор или матрица,
- начальное значение или интервал поиска решения.
Пример:
>> fsolve('0.25*x+sin(x)-1',0:10 )
ans =
Columns 1 through 6
0.8905 0.8905 2.8500 2.8500 2.8500 5.8128
Columns 7 through 11
5.8128 5.8128 5.8128 10.7429 10.7429
Функция представляется в следующем виде:
где:
– решаемое уравнение, записанное в одиночных кавычках;
– искомое неизвестное.
Функция возвращает единственное символьное выражение, если уравнение (система уравнений) имеет единственное решение и вектор решений в противном случае. Если уравнение содержит периодические функции и может, поэтому иметь бесконечное число решение, функция ограничивается тем, что возвращает корни за один период в окрестности нуля.
Пример. Пусть необходимо решить следующее уравнение: .
Программа решения уравнения имеет вид:
>> solve('x^2-sin(x)-1=0')
После нажатия клавиши <Enter> получим следующее решение:
>> solve('x^2-sin(x)-1=0')
ans =
matrix([[-0.63673265080528201088799090383828]])
Решение уравнений при помощи функции .
Функция имеет следующую реализацию:
где:
– искомое неизвестное;
– значение невязки;
– переменная, знак которой свидетельствует о наличии корня на данном интервале ( например, – корень существует);
– содержит три поля с именами:
(количество итераций),
(количество обращений к функции ), и
(наименование алгоритма, использованного для нахождения корня;
– решаемое уравнение, записанное в одиночных кавычках;
– начальное приближение или интервал поиска решения.
ПримерНеобходимо найти корни уравнения ,если известно, что корни находятся в промежутках [-1, 0] и [1, 2].
Решение:
>> [x,f,e_flag,inform]=fzero('x^2-sin(x)-1',[-1, 0])
x =
-0.636732650805282
f =
e_flag =
inform =
intervaliterations: 0
iterations: 6
funcCount: 8
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [-1, 0]'
>> [x,f,e_flag,inform]=fzero('x^2-sin(x)-1',[1, 2])
x =
1.409624004002596
f =
-1.110223024625157e-016
e_flag =
inform =
intervaliterations: 0
iterations: 8
funcCount: 10
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [1, 2]'
>> x=fzero('x^2-sin(x)-1',[1, 2])
x =
1.409624004002596
Возникает вопрос, сколько в ответе точных значащих цифр, т. е. с какой точностью найдено решение. Использование с двумя аргументами приводит к нахождению корня с точностью где — встроенная функция MatLab, задающая точность вычислений, значение которой можно посмотреть так же, как и значения других переменных:
>> eps
ans =
2.220446049250313e-016
Решение систем линейных алгебраических уравнений методом исключения Гаусса
Пусть задана система линейных алгебраических уравнений с неизвестными:
Система уравнений в матричной форме представляется следующим образом:
,
где – квадратная матрица коэффициентов, размером строк и столбцов;
– вектор-столбец неизвестных;
– вектор-столбец правых частей.
Систему уравнений можно решить различными методами.
Один из наиболее простых и эффективных методов является метод исключения Гаусса и его модификации. Алгоритм метода основан на приведении матрицы к треугольному виду (прямой ход) и последовательном вычислении неизвестных (обратный ход). Эти процедуры можно выполнять над невыраженными матрицами, в противном случае метод Гаусса неприменим.
В MATLAB имеется обширный арсенал методов решения систем уравнений методом исключения Гаусса.
Для этого применяются следующие операторы
| − правое деление;
|
| − левое деление;
|
| − возведение в степень –1
|
| − обращение матрицы
| Выражения
дают решения ряда систем линейных уравнений ,
где – матрица размером , – матрица размером .
Для решения систем линейных алгебраических уравнений в системе MATLAB существует две уникальные по своему назначению операции:
\ -левое деление матриц;
/- правое деление матриц.
Операция левого деления матриц \ используется при решении уравнений вида
,
где – заданная квадратная матрица коэффициентов уравнений;
– вектор- столбец свободных членов;
– вектор-столбец искомых переменных.
Для решения этого уравнения достаточно выполнить следующую операцию:
Операция левого матричного деления эквивалентна следующей операции:
Пример.
Необходимо решить следующую систему уравнений:
Матрица коэффициентов A и вектор-столбец свободных членов в этой системе уравнений имеют следующий вид:
format short
clc
A=[3 4 6; 2 5 7; 1 8 3];
B=[-5;7;11];
y=A\B
inv(A)*B
Решение
y =
-8.2075
1.5660
2.2264
ans =
-8.2075
1.5660
2.2264
Здесь операция была выполнена для проверки правильности решения.
Операция правого деления матриц позволяет решать системы уравнений вида
где – вектор-строка неизвестных переменных;
– заданная квадратная матрица коэффициентов;
– вектор-строка свободных членов.
Для решения такого уравнения достаточно выполнить следующую операцию:
или эквивалентную ей операцию:
Пример. Решить систему уравнений:
Решение
format short
clc
A=[3 2 1; 4 5 8; 6 7 3];
B=[-5 7 11];
y=B/A
B*inv(A)
y =
-8.2075 1.5660 2.2264
ans =
-8.2075 1.5660 2.2264 -8.2075 1.5660 2.2264
Рассмотрим решение систем линейных уравнений с помощью встроенной функции
где:
– i-е уравнение системы, i=1, 2, …, n;
– i-е неизвестное, i=1, 2, …, n.
Перед функцией необходимо с помощью функции определить символьные переменные.
Пример. Пусть необходимо решить следующую систему уравнений:
Программа решения системы уравнений имеет вид:
>> syms x1 x2 x3;
>> Y=solve('1.23*x1-3.25*x2-8.69*x3=10.33', '7.03*x1+4.81*x2+0.27*x3=-6.43', '4.49*x1-7.55*x2+12.51*x3=41.53')
После нажатия клавиши <Enter> получим ответ в следующем виде:
Y =
x1: [1x1 sym]
x2: [1x1 sym]
x3: [1x1 sym]
Программа задачу решила, но не выдала значения неизвестных , , . Для их получения необходимо воспользоваться командой , где – имя неизвестного. В нашем случае решение будет иметь вид:
>> Y.x1
ans =
1.6467696870844978837212332256586
>> Y.x2
ans =
-3.7690989344414828576791743237764
>> Y.x3
ans =
.45398138688708304769095896660916
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|