// PascalABC.NET 3.3, сборка 1579 от 18.11.2017 // Внимание! Если программа не работает, обновите версию!
1)
begin var (n,m):=ReadInteger2('Количество строк и столбцов в массиве:'); Writeln('*** Исходный массив [',n,',',m,'] ***'); var a:=MatrRandom(n,m,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); var b:=a.Rows.Select(r->r.Where(t->t.IsOdd).LastOrDefault); b.Println; end.
Метод Ньютона (метод Ньютона-Рафсона, метод касательных) требует для нахождения корня нелинейного уравнения выполнения достаточно большого количества условий. В качестве компенсации он (в общем случае) сходится быстрее любого другого численного метода нахождения корня уравнения F(x)=0. Для функции F(x) должен быть определен интервал изоляции корня [a;b], такой что на нем: а) F(a) и F(b) имеют разные знаки; б) F(x) определена и непрерывна; в) F'(x) ≠ 0 г) F"(x) определена всюду и имеет постоянный знак
1. Перепишем уравнение в более привычном виде и сделаем преобразования, необходимые для нахождения интервала изоляции корня [a;b], а также проверки выполнения на нем условий а) - г)
Степенная функция при натуральном основании и вещественном показателе степени всюду положительна, является непрерывной и монотонно возрастающей. Комбинация показательных функций будет также обладать этими свойствами. При х=0 (считать удобно) F(x) = 11+3-0.9 = 13.1 При х=-1 (тоже удобно) F(x) = 11/20 +3/5 - 9/10 = 1/4 (почти ноль!) При х=-2 F(x) = 11/400 + 3/25 - 9/10 = -301/400 ≈ - 0.7525 Условие а) выполнено, интервал изоляции корня найден, a=-2, b=-1. Прочие условия на этом интервале также выполняется в соответствии с написанным выше.
2. В качестве начального приближения выберем точку, находящуюся в середине интервала изоляции. х₀ = -1.5
4. Определим условие завершения поиска корня. В соответствии с известной формулой (например, см. стр. 41 в книге Гловацкая А.П. Методы и алгоритмы вычислительной математики. Учеб. пособие для вузов. - М.: Радио и связь, 1999), длина интервала изоляции корня связана с погрешностью следующим образом:
F'(a) = 11/400*ln(20)+3/25*ln(5) ≈ 0.275515187014827; F"(b) = 11/20*ln(20)²+3/5*ln(5)² ≈ 6.49010075653527 Величина интервала для х при ε=10⁻⁶ будет составлять приблизительно 0.0002914.
5. Составим программу на языке программирования PascalABC.NET 3.3. и найдем корень уравнения.
// PascalABC.NET 3.3, сборка 1579 от 18.11.2017 // Внимание! Если программа не работает, обновите версию!
begin var f:real->real:=x->11*Power(20,x)+3*Power(5,x)-0.9; var f1:real->real:=x->11*Power(20,x)*Ln(20)+3*Power(5,x)*Ln(5); var f2:real->real:=x->11*Power(20,x)*Sqr(Ln(20))+3*Power(5,x)*Sqr(Ln(5)); var (a,b,eps):=(-2.0,-1.0,1e-6); var d:=Sqrt(2*f1(a)*eps/f2(b)); var xn1:=(a+b)/2; var xn:real; repeat (xn,xn1):=(xn1,xn-f(xn)/f1(xn)); until Abs(xn-xn1)<=d; Writeln(xn1:0:6); end.
// Внимание! Если программа не работает, обновите версию!
1)
begin
var (n,m):=ReadInteger2('Количество строк и столбцов в массиве:');
Writeln('*** Исходный массив [',n,',',m,'] ***');
var a:=MatrRandom(n,m,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
var b:=a.Rows.Select(r->r.Where(t->t.IsOdd).LastOrDefault); b.Println;
end.
Пример
Количество строк и столбцов в массиве: 8 5
*** Исходный массив [8,5] ***
-41 36 -99 14 17
-22 12 71 -94 -42
-35 -40 26 2 24
39 17 20 11 84
-53 -18 97 -6 5
2 67 -54 -6 -3
95 -87 90 -13 -37
-81 -21 61 -90 -60
--------------------
17 71 -35 11 5 -3 -37 61
2)
begin
Writeln('*** Исходный массив ***');
var a:=MatrRandom(20,10,2,5);
a.Println(2); Writeln(2*a.ColCount*'-');
Writeln('Ср. 5-го ученика: ',a.Row(4).Average)
end.
Пример
*** Исходный массив ***
2 2 3 3 4 3 4 2 3 2
4 3 2 3 2 4 3 2 5 3
4 2 3 3 4 5 5 2 2 4
5 2 4 2 4 5 4 2 3 3
5 3 3 2 3 4 5 4 4 4
3 2 3 2 3 2 5 2 4 4
4 4 5 5 2 4 5 5 4 2
2 2 5 4 4 2 4 3 2 2
2 2 4 4 2 4 4 4 5 4
2 3 4 4 5 3 3 4 5 4
5 2 5 3 3 2 3 5 3 2
3 4 2 3 4 3 2 3 4 3
2 2 2 2 2 4 4 2 4 2
5 2 3 3 3 5 3 2 2 5
2 4 2 4 3 3 3 2 5 4
3 2 5 4 4 4 5 5 3 5
4 3 2 3 3 2 2 4 2 4
2 5 2 5 2 3 2 4 5 4
3 3 2 2 5 4 3 5 4 4
2 3 5 3 3 5 4 5 2 2
--------------------
Ср. 5-го ученика: 3.7