Для заданных [latex]a[/latex] и [latex]p[/latex] вычислить [latex]\sqrt[p]{a}[/latex], используя рекуррентную формулу:
[latex]x_{n+1}=\frac{x_{n}}{p^{2}}[(p^{2}-1)+\frac{1}{2}(p+1)\frac{a}{x_{n}^{p}}-\frac{1}{2}(p-1)\frac{x_{n}^{p}}{a}][/latex];Сколько итераций надо выполнить, чтобы для заданной погрешности [latex]\varepsilon[/latex] было справедливо соотношение [latex]\mid x_{n+1}-x_{n} \mid [/latex] [latex] \leq[/latex][latex]\varepsilon[/latex]?При каких начальных приближениях [latex]x_{0}[/latex] процесс сходится?
a | p | xz | eps | i | xn | x | Комментарий |
16 | 4 | 1 | 0.000001 | 5 | 4 | 4 | |
17 | 2 | 2 | 0.01 | 3 | 4.12311 | 4.12311 | |
26 | 4 | 12 | 0.1 | — | — | — | Превышено ограничение на время |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <math.h> using namespace std; int main () { double a,xz,eps; int p; cin>>a>>p>>xz>>eps; double x=pow(a,1.0/p); double xn=xz,x_prev=-10000000; int i=0; while (fabs(xn-x_prev)>=eps) { x_prev=xn; xn=(x_prev/(p*p))*((p*p-1)+0.5*(p+1)*a/(pow(x_prev,p))-0.5*(p-1)*pow(x_prev,p)/(a)); i++; } cout<<i<<' '<<xn<<' '<<x<<endl; return 0; } |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { Scanner in=new Scanner(System.in); double a=in.nextDouble(); int p=in.nextInt(); double xz=in.nextDouble(); double eps=in.nextDouble(); double x=Math.pow(a,1.0/p); double xn=xz,x_prev=-10000000; int i=0; while (Math.abs(xn-x_prev)>=eps) { x_prev=xn; xn=(x_prev/(p*p))*((p*p-1)+0.5*(p+1)*a/(Math.pow(x_prev,p))-0.5*(p-1)*Math.pow(x_prev,p)/(a)); i++; } System.out.print(i);System.out.print(" "); System.out.print(xn);System.out.print(" "); System.out.println(x); } } |
Вводим с клавиатуры [latex]a[/latex], [latex]p[/latex], [latex]xz[/latex], [latex]eps[/latex], где [latex]xz[/latex]- наше приближение [latex]x_{0}[/latex], а [latex]eps[/latex] заданная погрешность.
С помощью цикла и рекуррентно заданной формулы получаем [latex]xn[/latex].С помощью счетчика [latex]i[/latex] получаем количество итераций.
Если программа вычисляет слишком долго, то мы можем сказать, что процесс не сходится.
Код программы можно посмотреть тут
Код программы можно посмотреть тут
Чтобы хотя бы примерно ответить на вопрос «При каких начальных приближениях x_{0} процесс сходится?» Вам нужно для неизменных a, p и eps рассматривать разные начальные приближения xz. Например дополнить тест 16 4 1 0.000001 тестами с другим xz. Кстати, Вы запускали первый тест? И заодно, чему равен корень четвертой степени из 16? Что это за халтура с тестами?
Поставьте пробелы в тексте после знаков препинания и ответьте что-то на предыдущий комментарий.