Для заданных [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] получаем количество итераций.
Если программа вычисляет слишком долго, то мы можем сказать, что процесс не сходится.
Код программы можно посмотреть тут
Код программы можно посмотреть тут
Related Images: