c++ Рекуррентные отношения
У меня есть программа, я хочу заменить pow на цикл ( чтобы все работало также ). Я хочу сделать так , чтобы определенный элемент в цикле ( j1, к примеру) вызывался только вместе с i1 ( а не так , что вначале проработает j весь, а потом весь i( использовав всю j). Или посоветуйте другой способ реализации моей идеи ( замены pow).
#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;
void fun(int n, int x0, int xm, double dx)
{
double y = 0;
int a = 1;
for (double x = x0; x <= xm; x += dx)
{
for (int j = n; j >= 0; --j) // вместо этого цикла и a была функция pow
{
a *= x0;
}
y = 0;
for (int i = n; i >= 0; --i)
{
y += (2 * i + 1) * a;
}
cout << " x =" << x << '\t' << "y=" << y << endl;
}
}
int main()
{
int n, x0 = 2, xm = 4;
double dx = 0.25;
cin >> n;
fun(n, x0, xm, dx);
}
Ответы (2 шт):
Посмотрим что выполняет цикл
for (int i = n; i >= 0; --i)
{
y += (2 * i + 1) * a;
}
это
(n + 1) * a + a * ( 0 + 2 * 1 + 2 * 2 + ... + 2 * n). И, так как ряд является простой арифметической прогрессией c количеством членов n + 1 с нулевым первым членом, то из формулы
Sn = (a1 + d * (n-1) /2) * n, где разность прогрессии d == 2, и с учетом того, что вместо n имеем n + 1, то получим
Sn = (a1 + n ) * (n + 1) = n * (n + 1)
и, соответственно
y = (n + 1) * a + a * n(n + 1), и упростив получим результат работы всего цикла простой формулой:
y = a *(n + 1) * (n + 1)
Так что ваш цикл вовсе не нужен
#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;
void fun(int n, int x0, int xm, double dx)
{
double y = 0;
for (double x = x0; x <= xm; x += dx)
{
y = 0;
for (int i = n; i >= 0; --i)
{
double var = 1;
for(int j = 0;j < i; j++)
{
var *= x;
}
y += (2 * i + 1) * var;
}
cout << " x =" << x << '\t' << "y=" << y << endl;
}
}
int main()
{
int n, x0 = 2, xm = 4;
double dx = 0.25;
cin >> n;
fun(n, x0, xm, dx);
}
Суть моего ответа заключается в поиске аналога функции pow ( что я и сделал , заменил на цикл ) . В принципе все.