Численные методы решения нелинейных систем уравнений
Автор: Пользователь скрыл имя, 26 Марта 2012 в 14:21, лабораторная работа
Краткое описание
В данной лабораторной работе требуется решить систему нелинейных уравнений методом Ньютона и методом секущих. Решение необходимо реализовать на языке MatLab.
Оглавление
1. ПОСТАНОВКА ЗАДАЧИ
2. ОПИСАНИЕ АЛГОРИТМОВ
2.1 АЛГОРИТМ МЕТОДА НЬЮТОНА
2.2 АЛГОРИТМ МЕТОДА СЕКУЩИХ
3. ТЕСТИРОВАНИЕ
4. ВЫВОДЫ
Файлы: 1 файл
Отчёт 2.doc
— 105.00 Кб (Скачать)10
СОДЕРЖАНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
2. ОПИСАНИЕ АЛГОРИТМОВ
2.1 АЛГОРИТМ МЕТОДА НЬЮТОНА
2.2 АЛГОРИТМ МЕТОДА СЕКУЩИХ
3. ТЕСТИРОВАНИЕ
4. ВЫВОДЫ
ПРИЛОЖЕНИЕ 1
ПРИЛОЖЕНИЕ 2
1. ПОСТАНОВКА ЗАДАЧИ
В данной лабораторной работе требуется решить систему нелинейных уравнений методом Ньютона и методом секущих. Решение необходимо реализовать на языке MatLab.
Уравнения:
1.
2.
2. ОПИСАНИЕ АЛГОРИТМОВ
2.1 АЛГОРИТМ МЕТОДА НЬЮТОНА
1. Задать начальное приближение и малое положительное число (точность). Положить .
2. Найти значение выражения .
3. Вычислить следующее приближение: .
4. Если и , процесс закончить и положить . Иначе, положить и перейти к п.2.
2.2 АЛГОРИТМ МЕТОДА СЕКУЩИХ
1. Задать начальное приближение и малое положительное число
(точность). Положить .
2. Найти значение выражения:
3. Найти значение выражения:
4. Если и , процесс закончить и положить . Иначе, положить и перейти к п.2.
3. ТЕСТИРОВАНИЕ
Для первой системы:
Для второй системы:
4. ВЫВОДЫ
В ходе выполнения лабораторной работы нами были реализованы на языке MatLab два метода решения систем нелинейных уравнений: метод Ньютона и метод секущих. По полученным результатам мы определили, что наиболее точным методом вычисления оказался метод Ньютона.
ПРИЛОЖЕНИЕ 1
Метод Ньютона. Код программы
clc;
clear;
syms x1 x2 x3;
x=[x1, x2, x3];
k=0;
E=10^-5;
funcii = sprintf('1.\nF(1)= x(1)^2+x(2)^2+x(3)^2-1\nF(2)= 2*x(1)^2+x(2)^2-4*x(3)\nF(3)=
funcii2 = input(funcii);
t = input('Выберите систему: ');
if t~=1&&t~=2
t = input('Выбран невозможный вариант, попробуйте еще раз ');
end
if t==1
X=[0.5;0.5;0.5];
F(1)= x(1)^2+x(2)^2+x(3)^2-1;
F(2)= 2*x(1)^2+x(2)^2-4*x(3);
F(3)=3*x(1)^2-4*x(2)+x(3)^2;
end
if t==2
X=[0;1;0];
F(1)= x(1)+x(1)^2-2*x(2)*x(3)-0.1;
F(2)= x(2)-x(2)^2+3*x(1)*x(3)+0.2;
F(3)= x(3)+x(3)^2+2*x(1)*x(2)-0.3;
end
while norm(subs(F,x,X),'inf')>E
k=k+1;
dX=subs(-((jacobian(F,x))^(-1)
X=X+dX;
end
disp('Решение:')
X = X';
X1 = X(1)
X2 = X(2)
X3 = X(3)
disp('Количество итераций:')
k
disp('Точность:')
E
disp('Проверка решения:')
Y=solve(F(1),F(2),F(3),x1,x2,
x1 = Y.x1;
x1 = vpa(x1,15)
x2 = Y.x2;
x2 = vpa(x2,15)
x3 = Y.x3;
x3 = vpa(x3,15)
ПРИЛОЖЕНИЕ 2
Метод секущих. Код программы
clc;
clear;
syms x1 x2 x3;
x=[x1 x2 x3];
k=0;
e=10^-5;
funcii = sprintf('1.\nF(1)= x(1)^2+x(2)^2+x(3)^2-1\nF(2)= 2*x(1)^2+x(2)^2-4*x(3)\nF(3)=
funcii2 = input(funcii);
t = input('Выберите систему: ');
if t~=1&&t~=2
t = input('Выбран невозможный вариант, попробуйте еще раз ');
end
if t==1
X=[0.5;0.5;0.5];
X0=[1;1;1];
F(1)= x(1)^2+x(2)^2+x(3)^2-1;
F(2)= 2*x(1)^2+x(2)^2-4*x(3);
F(3)=3*x(1)^2-4*x(2)+x(3)^2;
end
if t==2
X=[0.5;1;0];
X0=[1;1.5;0.5];
F(1)= x(1)+x(1)^2-2*x(2)*x(3)-0.1;
F(2)= x(2)-x(2)^2+3*x(1)*x(3)+0.2;
F(3)= x(3)+x(3)^2+2*x(1)*x(2)-0.3;
end
while norm(subs(F,x,X),'inf')>e
k=k+1;
for m=1:size(x,2)
for n=1:size(x,2)
Buf=X;
Buf(n)=X0(n);
J(m,n)=(subs(F(m),x,Buf)-subs(
end
end
X0=X;
X=X-inv(J)*subs(F,x,X)';
end
disp('Решение:')
X = X';
X1 = X(1)
X2 = X(2)
X3 = X(3)
disp('Число итераций:')
k
disp('Точность:')
e
disp('Проверка решения:')
Y=solve(F(1),F(2),F(3),x1,x2,
x1 = Y.x1;
x1 = vpa(x1,15)
x2 = Y.x2;
x2 = vpa(x2,15)
x3 = Y.x3;
x3 = vpa(x3,15)