Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 29.10.2014, 11:55   #1 (permalink)
Женек
Member
 
Регистрация: 16.03.2013
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Решить систему методом Ньютона

Помогите разобраться с системой:
x^2+Y^2-1=0
sin(x+y)=1,5x+0,2
Беру производные 2x 2y ) Правильно?
cos-1,5 cosy

И еще можете объяснить как правильно подобрать x0 и y0?
Женек вне форума   Ответить с цитированием

Старый 29.10.2014, 11:55
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

По этим ссылкам размещены темы которые имеют сходства с вашей

Решить систему дифференциальных уравнений
Ошибка в методе Ньютона
Решить систему линейных уравнений методом Зейделя

Старый 29.10.2014, 12:17   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Зачем так сложно? Просто из первого уравнения выражаете у через х, подставляете во второе и полученное уравнение решаете. Метод описан здесь: К вопросу о численном решении алгебраических уравнений.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.10.2014, 15:40   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ладно уж, распишу решение.
Из первого уравнения находим:

y = ±Sqrt(1-x²)

Отсюда сразу видим, что область допустимых значений х есть

-1 ≤ х ≤ +1

Подстановка у во второе уравнение даёт:

1.5*x + 0.2 - Sin(x ± Sqrt(1-x²)) = 0

Рассмотрим два случая: со знаком "+" и со знаком "-".

1. Со знаком "+".
Для определения приближенного значения корня построим график функции

f(x) = 1.5*x + 0.2 - Sin(x + Sqrt(1-x²))

Он выглядит так:
grf_1.jpg
поэтому в качестве исходного значения выберем х = 0.5.
Программа на Турбо Паскале:
Код:
Const
 Eps=0.0001;
Var
 x,y:Real;

Function F(z:real):Real;
begin
 F:=z*1.5+0.2-Sin(z+Sqrt(1-z*z));
end;

Function G(z:real):Real;
begin
 G:=1.5-Cos(z+Sqrt(1-z*z))*(1-z/Sqrt(1-z*z));
end;

Procedure EQRoot(e:real; var R:real);
var
 x1,x2,d:real;
begin
 x1:=0.5;
 Repeat
  x2:=x1-F(x1)/G(x1);
  d:=abs(x1-x2);
  x1:=x2;
 Until d<e;
 R:=x2;
end;

Begin
 EQRoot(Eps,x);
 y:=Sqrt(1-x*x);
 Writeln('x = ',x:6:4);
 Writeln('y = ',y:6:4);
 Readln
End.
Результат:

х = 0.5205
у = 0.8539

2. Со знаком "-".
График:
grf_2.jpg
Исходное значение х = -0.8
Программа:
Код:
Const
 Eps=0.0001;
Var
 x,y:Real;

Function F(z:real):Real;
begin
 F:=z*1.5+0.2-Sin(z-Sqrt(1-z*z));
end;

Function G(z:real):Real;
begin
 G:=1.5-Cos(z-Sqrt(1-z*z))*(1+z/Sqrt(1-z*z));
end;

Procedure EQRoot(e:real; var R:real);
var
 x1,x2,d:real;
begin
 x1:=-0.8;
 Repeat
  x2:=x1-F(x1)/G(x1);
  d:=abs(x1-x2);
  x1:=x2;
 Until d<e;
 R:=x2;
end;

Begin
 EQRoot(Eps,x);
 y:=-Sqrt(1-x*x);
 Writeln('x = ',x:6:4);
 Writeln('y = ',y:6:4);
 Readln
End.
Результат:

х = -0.7906
у = -0.6123

Всё!!!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:40.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.