|
|
Опции темы | Опции просмотра |
09.01.2019, 20:16 | #1 (permalink) |
Новичок
Регистрация: 09.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Найти корни нелинейного уравнения методами половинного деления, и по Ньютону
1. Нелинейного уравнения lgx+x^2=0 - Методом половинного деления и 2. Системы двух нелинейных уравнений 2*y+x-1=0 - Методом Ньютона с точностью ε=0.001 заранее выполнив отделение корней уравнений. (см. скрин) |
09.01.2019, 20:16 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Не оставляйте без внимание схожие ссылки Решить уравнение методом половинного деления Паскаль. Метод половинного деления Решение нелинейного уравнения методом деления отрезка пополам Паскаль. Найти корни уравнения методом хорд |
10.01.2019, 12:02 | #2 (permalink) |
Новичок
Регистрация: 09.01.2019
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Я сделал все как в посте №2... но у меня вылетели почему-то не правильные ответы
Код:
Const e=0.0001; Var x_old, x_new, y, z:real; Function Fun_1(x:real):real; begin Fun_1:=(2*sqrt(5/(1-x)))+x-1; end; Function Fun_2(x:real):real; begin Fun_2:=(-2*sqrt(5/(1-x)))+x-1; end; Function Der_1(x:real):real; begin Der_1:=sqrt(5)*power((1/(1-x)), (3/2))+1; end; Function Der_2(x:real):real; begin Der_2:=1-sqrt(5)*power((1/(1-x)), (3/2)); end; Begin x_old:=-1.5; Repeat z:=x_old; x_new:=x_old-Fun_1(x_old)/Der_1(x_old); x_old:=x_new; Until Abs(x_old-z)<e; y:=-Sqrt(5*(1-x_old)); Writeln('x1= ',x_old:0:5); Writeln('y1= ',y:0:5); Writeln; x_old:=1.5; Repeat z:=x_old; x_new:=x_old-Fun_2(x_old)/Der_2(x_old); x_old:=x_new; Until Abs(x_old-z)<e; y:=Sqrt(5*(1-x_old)); Writeln('x2= ',x_old:0:5); Writeln('y2= ',y:0:5); Readln; End. |
11.01.2019, 12:19 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Уважаемый участник, тогда, почти 7 лет назад, я, должен признаться, несколько схалтурил: воспользовался простотой системы и свёл её к простому уравнению, каковое и решил методом Ньютона. В принципе, можно и здесь поступить также, но давайте всё же решим задачу, как положено.
Для этого нам понадобится вычислять: 1. Сами функции f1 = 2y + x -1 f2 = 0.2y² + x +1 2. Их частные производные по обеим переменным f1Dx = 1 f1Dy = 2 f2Dx = 1 f2Dy = 0.4y 3. Якобиан системы Jac. Это определитель второго порядка с элементами a11 = f1Dx a12 = f1Dy a21 = f2Dx a22 = f2Dy 4. X-определитель (Dx) с элементами a11 = f1 a12 = f1Dy a21 = f2 a22 = f2Dy 5. Y-определитель (Dy) с элементами a11 = f1Dx a12 = f1 a21 = f2Dx a22 = f2 Тогда решение системы находится с помощью итерационной процедуры Xk+1 = Xk - Dx(Xk,Yk)/Jac(Xk,Yk) Yk+1 = Yk - Dy(Xk,Yk)/Jac(Xk,Yk) где k – номер итерации. Теперь сама программа и результат: Код:
Const eps=0.001; Var XX,YY:real; function f1(x,y:real):real; begin f1:=y*2+x-1.0; end; function f2(x,y:real):real; begin f2:=0.2*y*y+x-1.0; end; function f1Dx(x,y:real):real; begin f1Dx:=1.0; end; function f1Dy(x,y:real):real; begin f1Dy:=2.0; end; function f2Dx(x,y:real):real; begin f2Dx:=1.0; end; function f2Dy(x,y:real):real; begin f2Dy:=0.4*y; end; function Det(a11,a12,a21,a22:real):real; begin Det:=a11*a22-a12*a21; end; function Jac(x,y:real):real; begin Jac:=Det(f1Dx(x,y),f1Dy(x,y),f2Dx(x,y),f2Dy(x,y)); end; function Dx(x,y:real):real; begin Dx:=Det(f1(x,y),f1Dy(x,y),f2(x,y),f2Dy(x,y)); end; function Dy(x,y:real):real; begin Dy:=Det(f1Dx(x,y),f1(x,y),f2Dx(x,y),f2(x,y)); end; Procedure Solve(x0,y0:real; var x1:real; var y1:real); Var Xold,Yold,Xnew,Ynew,DDx,DDy:real; begin Xold:=x0; Yold:=y0; repeat Xnew:=Xold-Dx(Xold,Yold)/Jac(Xold,Yold); Ynew:=Yold-Dy(Xold,Yold)/Jac(Xold,Yold); DDx:=Abs(Xnew-Xold); DDy:=Abs(Ynew-Yold); Xold:=Xnew; Yold:=Ynew; until (DDx<eps) and (DDy<eps); x1:=Xnew; y1:=Ynew; end; Begin Solve(-20.0,9.0,XX,YY); Writeln(' x1 = ',XX:7:3); Writeln(' y1 = ',YY:7:3); Writeln; Solve(0.0,1.0,XX,YY); Writeln(' x2 = ',XX:7:3); Writeln(' y2 = ',YY:7:3); Readln End. К вопросу о численном решении алгебраических уравнений Там всё расписано весьма подробно. |
11.01.2019, 16:05 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Обратите внимание (и в моём эссе по ссылке, и в других источниках), что численное решение уравнений или систем, в особенности методом Ньютона, должно начинаться с неких стартовых ожидаемых значений где-то поблизости от реальных корней. Вот это они и есть. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|