Автор: Пользователь скрыл имя, 26 Марта 2012 в 14:21, лабораторная работа
В данной лабораторной работе требуется решить систему нелинейных уравнений методом Ньютона и методом секущих. Решение необходимо реализовать на языке MatLab.
1. ПОСТАНОВКА ЗАДАЧИ
2. ОПИСАНИЕ АЛГОРИТМОВ
2.1 АЛГОРИТМ МЕТОДА НЬЮТОНА
2.2 АЛГОРИТМ МЕТОДА СЕКУЩИХ
3. ТЕСТИРОВАНИЕ
4. ВЫВОДЫ
10
СОДЕРЖАНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
2. ОПИСАНИЕ АЛГОРИТМОВ
2.1 АЛГОРИТМ МЕТОДА НЬЮТОНА
2.2 АЛГОРИТМ МЕТОДА СЕКУЩИХ
3. ТЕСТИРОВАНИЕ
4. ВЫВОДЫ
ПРИЛОЖЕНИЕ 1
ПРИЛОЖЕНИЕ 2
В данной лабораторной работе требуется решить систему нелинейных уравнений методом Ньютона и методом секущих. Решение необходимо реализовать на языке MatLab.
Уравнения:
1.
2.
1. Задать начальное приближение и малое положительное число (точность). Положить .
2. Найти значение выражения .
3. Вычислить следующее приближение: .
4. Если и , процесс закончить и положить . Иначе, положить и перейти к п.2.
1. Задать начальное приближение и малое положительное число
(точность). Положить .
2. Найти значение выражения:
3. Найти значение выражения:
4. Если и , процесс закончить и положить . Иначе, положить и перейти к п.2.
Для первой системы:
Для второй системы:
В ходе выполнения лабораторной работы нами были реализованы на языке MatLab два метода решения систем нелинейных уравнений: метод Ньютона и метод секущих. По полученным результатам мы определили, что наиболее точным методом вычисления оказался метод Ньютона.
Метод Ньютона. Код программы
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)
Метод секущих. Код программы
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)
Информация о работе Численные методы решения нелинейных систем уравнений