Форум программистов, компьютерный форум CyberForum.ru

Вычисление функций с использованием их разложения в степенной ряд - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.76
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
25.01.2012, 17:03     Вычисление функций с использованием их разложения в степенной ряд #1
Помогите пожалуйста с задачей:
Постановка задачи:
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в трех случаях:
а) для заданного n;
y=-1/2*ln*(1-2*x*cosPi/3+x^2)
n=35.

ln-(логарифм натуральный);
Pi-(пи(3.14));
x^2-(икс в квадрате).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2012, 17:03     Вычисление функций с использованием их разложения в степенной ряд
Посмотрите здесь:

Вычисление функций с использованием их разложения в степенной ряд C++
C++ Вычисление функций с использованием их разложения в степенной ряд
Вычисление функций с использованием их разложения в степенной ряд ощибки исправте пожалуйста C++
C++ Вычисление функций с использованием их разложения в степенной ряд
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 17:24     Вычисление функций с использованием их разложения в степенной ряд #2
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
Помогите пожалуйста с задачей:
посмотри эти топики
Программирование циклов с неизвестным заранее числом повторений
Вычислить и вывести на экран в виде таблицы значения функции
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
25.01.2012, 21:10  [ТС]     Вычисление функций с использованием их разложения в степенной ряд #3
Помогите пожалуйста я сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdlib>
#include <iostream>
#include <math.h>
#define A 0.1
#define B 0.8
#define E 10e-4
using namespace std;
int main(int argc, char *argv[])
{
    float x,k=(B-A)/10.0,sn=0,se=0,t,y;
    int i,j,n=35,Pi=3.14,cos,log;
    for(x=A;x<=B;x+=k){
    sn=x;se=x;
    for(i=1;i<=n;i++){
    sn+=(pow(-1,i+1))*(pow(x,2*i))/(2*i)*(2*i-1);}
    j=1;
    do {(pow(-1,j+1))*(pow(x,2*j)/(2*j)*(2*j-1));
    j++;se+=t;}
    while(t>E);
    y=-1/2*log*(1-2*x*cos*Pi/3+pow(x,2));
    printf("x=%.2f SN=%f SE=%f Y=%f\n",x,sn,se,y);}
    system("PAUSE");
    return EXIT_SUCCESS;
}
(пытался переделать вот етот пример Программирование циклов с неизвестным заранее числом повторений
но ничего не получилось...
вот условие к заданию(ещё раз напишу):
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в трех случаях:
а) для заданного n;
б) для заданной точности e (e=0.0001);
с) для «точного» значения (по аналитической формуле).

-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 21:59     Вычисление функций с использованием их разложения в степенной ряд #4

Не по теме:

Сергейййййййй, эх Сергей Сергей, опять мне приходится выводить итератор самому, ну хоть бы попробовали вывести его самостоятельно...


Вернусь к задаче
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{{x}^{n}*cos(\frac{n*\pi}{3})}{n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{{x}^{(n + 1)}*cos(\frac{(n + 1)*\pi}{3})}{n + 1}
Теперь определяем итератор
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{{x}^{(n + 1)}*cos(\frac{(n + 1)*\pi}{3})}{n + 1}*\frac{n}{{x}^{n}*cos(\frac{n*\pi}{3})}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = x*\frac{n}{n + 1}*\frac{cos(\frac{(n + 1)*\pi}{3})}{cos(\frac{n*\pi}{3})}
Возможно частное от деления косинусов можно преобразовать, но к сожалению знания тригонометрии подводят, так что оставляю итератор как есть
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 22:16     Вычисление функций с использованием их разложения в степенной ряд #5
Вот рабочий код - это гибрид тех двух постов на которые давал ссылки
C++
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
30
31
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
double S(double x, long n)//как я понял из скрина задания 
//нужно суммировать n = 35 первых членов ряда
{
    double pi = 2*asin(1.0);
    double ak = x*cos(pi/3);
    double sum = 0;
    for(long k = 0; k < n; k++)
    {
        sum += ak;
        ak  *= k*x*(cos(pi*(k + 1)/3.0)/cos(pi*k/3.0))/(k + 1);
    }
    return sum;
}
 
int main()
{
    double x, xn, xk, dx;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<"|  x  |  Sum  |\n";
    for(x = xn; x < xk; x += dx)
        cout<<setw(4)<<setprecision(2)<<x<<" | "<<S(x, 35)<<"\n";
    system("pause");//Для CodeBlocks добавить в инклуды <cstdlib>
    return 0;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
26.01.2012, 17:52  [ТС]     Вычисление функций с использованием их разложения в степенной ряд #6
СПАСИБО ОГРОМНОЕ!!!вы супер)

Добавлено через 19 часов 13 минут
мне сказали что функция есть, а пересенная-массив отсутствует...
-=ЮрА=-
Заблокирован
Автор FAQ
26.01.2012, 18:30     Вычисление функций с использованием их разложения в степенной ряд #7
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
а пересенная-массив отсутствует...
- это что значит???
Перенесение в массив м.б???На счёт массива в задании ни слова не было...Пишите, поправим!
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
27.01.2012, 15:20  [ТС]     Вычисление функций с использованием их разложения в степенной ряд #8
вот Методические указания(если надо)

1. Алгоритм решения задачи сводится к циклу по переменной х. В теле цикла вызываются три функции – две пользовательские и комбинация библиотечных (результат их работы считается условно точным значением). Необходимо спроектировать и реализовать пользовательские функции расчета F(x) = S по двум указанным выше алгоритмам.

2. Результаты расчетов отпечатать в следующем виде:

Вычисление функции
X=...... Y=...... SN=...... SE=..... о_погрSN о_погрSE
X=...... Y=...... SN=...... SE=..... о_погрSN о_погрSE

..........

X=...... Y=...... SN=...... SE=..... о_погрSN о_погрSE

Здесь X- значение параметра; SN- значение суммы для заданного n; SE- значение суммы для заданной точности; Y-точное значение функции; о_погрSN, о_погрSE – относительные погрешности приближенных вычислений.
Так как я понял эту задачу нужно решить с применением массива.

Добавлено через 20 часов 4 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- это что значит???
Перенесение в массив м.б???На счёт массива в задании ни слова не было...Пишите, поправим!

Добавлено через 15 секунд
- это что значит???
Перенесение в массив м.б???На счёт массива в задании ни слова не было...Пишите, поправим!
ну так что поможете перенести в массив?
-=ЮрА=-
Заблокирован
Автор FAQ
27.01.2012, 15:39     Вычисление функций с использованием их разложения в степенной ряд #9
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
ну так что поможете перенести в массив?
- да помогу, ближе к вечеру будет (сейчас занят пока не до вас простите).
PS:Вчитавшись в задание скажу что массив там не нужен, необходимо лишь сравнить наше расчётное значение функции с эталлонным
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
y=-1/2*ln*(1-2*x*cosPi/3+x^2)
+ определить погрешность....

Добавлено через 2 минуты

Не по теме:

Сергейййййййй, я сделаю!

-=ЮрА=-
Заблокирован
Автор FAQ
27.01.2012, 17:06     Вычисление функций с использованием их разложения в степенной ряд #10
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
езультаты расчетов отпечатать в следующем виде:
Вычисление функции
X=...... Y=...... SN=...... SE=..... о_погрSN о_погрSE
C++
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
//ГЌГ*ГёГ* ГЅГІГ*ëîГ*Г*Г*Гї ГґГіГ*êöèÿ
double f(double x)
{
    double pi = 2*asin(1.0);
    double y  = -log(1 - 2*x*cos(pi/3) + pow(x,2))/2;
    return y;
}
 
double S(double x, long n)//ГЄГ*ГЄ Гї ГЇГ®Г*ГїГ« ГЁГ§ ñêðèГ*Г* Г§Г*Г¤Г*Г*ГЁГї 
//Г*ГіГ¦Г*Г® ñóììèðîâГ*ГІГј n = 35 ïåðâûõ ÷ëåГ*îâ ðÿäГ*
{
    double pi = 2*asin(1.0);
    double ak = x*cos(pi/3);
    double sum = 0;
    for(long k = 0; k < n; k++)
    {
        sum += ak;
        ak  *= k*x*(cos(pi*(k + 1)/3.0)/cos(pi*k/3.0))/(k + 1);
    }
    return sum;
}
 
int main()
{
    double x, xn, xk, dx, y, s;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<"|  x  |  Sum  |  f(x)  | err, % |\n";
    for(x = xn; x < xk; x += dx)
    {
        y = f(x);
        s = S(x, 35);
        cout<<setw(5)<<setprecision(3)<<x<<" | "
            <<setw(5)<<setprecision(3)<<s<<" | "
            <<setw(5)<<setprecision(3)<<y<<" | "
            <<100.0*fabs(y - s)/y
            <<endl;
    }
    system("pause");//Äëÿ CodeBlocks äîáГ*ГўГЁГІГј Гў ГЁГ*êëóäû <cstdlib>
    return 0;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
Сергейййййййй
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
30.01.2012, 18:59  [ТС]     Вычисление функций с использованием их разложения в степенной ряд #11
мне написали что функция есть, а переМенная-массив отсутствует
и дали ссылкуhttp://programmersclub.ru/16/

Добавлено через 20 часов 50 минут
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
мне написали что функция есть, а переМенная-массив отсутствует
и дали ссылкуhttp://programmersclub.ru/16/
что ето значит? и как его решить?
-=ЮрА=-
30.01.2012, 22:25
  #12

Не по теме:

Цитата Сообщение от Сергейййййййй Посмотреть сообщение
что ето значит? и как его решить?
- Сергей да там память под масив показано как выделять. Завтра сделаю. Сейчас очень занят поэтому не совсем оперативно с вами работаю...

-=ЮрА=-
Заблокирован
Автор FAQ
30.01.2012, 23:14     Вычисление функций с использованием их разложения в степенной ряд #13
Сергейййййййй, вот с массивами
C++
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
//Наша эталонная функция
double f(double x)
{
    double pi = 2*asin(1.0);
    double y  = -log(1 - 2*x*cos(pi/3) + pow(x,2))/2;
    return y;
}
 
double S(double x, long n)//как я понял из скрина задания 
//нужно суммировать n = 35 первых членов ряда
{
    double pi = 2*asin(1.0);
    double ak = x*cos(pi/3);
    double sum = 0;
    for(long k = 0; k < n; k++)
    {
        sum += ak;
        ak  *= k*x*(cos(pi*(k + 1)/3.0)/cos(pi*k/3.0))/(k + 1);
    }
    return sum;
}
 
int main()
{
    double xn, xk, dx, s;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    int i = 0;
    int n = 1 + int((xk - xn)/dx);//Число чисел в массивах
    //Динамическая память под элементы массивов
    double * x = new double[n];
    double * y = new double[n];
    cout<<"|  x  |  Sum  |  f(x)  | err, % |\n";
    x[i] = xn;
    while(x[i] < xk)
    {
        y[i] = f(x[i]);
        s = S(x[i], 35);
        cout<<setw(5)<<setprecision(3)<<x[i]<<" | "
            <<setw(5)<<setprecision(3)<<s<<" | "
            <<setw(5)<<setprecision(3)<<y[i]<<" | "
            <<100.0*fabs(y[i] - s)/y[i]
            <<endl;
        i    = i + 1;//Я специально показал инкремент полностью для лучшего понимания
        x[i] = x[i - 1] + dx;
    }
    system("pause");//Для CodeBlocks добавить в инклуды <cstdlib>
    //Чистим память
    delete [] x;
    delete [] y;
    return 0;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 143
24.12.2012, 12:47     Вычисление функций с использованием их разложения в степенной ряд #14
а если y=sinX ; n=10 ; 0,1 < x < 1 ; S= x-x3/3! + ... + (-1)n*x2n+1/(2n+1)!
как тогда будет выглядеть?
-=ЮрА=-
Заблокирован
Автор FAQ
03.01.2013, 01:02     Вычисление функций с использованием их разложения в степенной ряд #15
Цитата Сообщение от Zakat Посмотреть сообщение
а если y=sinX ; n=10 ; 0,1 < x < 1 ; S= x-x3/3! + ... + (-1)n*x2n+1/(2n+1)!
как тогда будет выглядеть?
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = {(-1)}^{n}*\frac{{x}^{2*n + 1}}{(2*n + 1)!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = {(-1)}^{n + 1}*\frac{{x}^{2*(n + 1) + 1}}{(2*(n + 1) + 1)!} = {(-1)}^{n + 1}*\frac{{x}^{2*n + 3}}{(2*n + 3)!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{{(-1)}^{n + 1}*\frac{{x}^{2*n + 3}}{(2*n + 3)!}}{{(-1)}^{n}*\frac{{x}^{2*n + 1}}{(2*n + 1)!}} = (-1)*{x}^{2}*\frac{(2*n + 1)!}{(2*n + 1)!*(2*n + 2)*(2*n + 3)}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = (-1)*\frac{{x}^{2}}{(2*n + 2)*(2*n + 3)}

Сам код
C++
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
30
31
32
33
34
35
36
37
38
39
40
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double S(double x, long n)//как я понял из скрина задания 
//нужно суммировать n = 10 первых членов ряда
{
    double ak  = x;
    double sum = 0;
    for(long k = 0; k < n; k++)
    {
        sum += ak;
        ak  *= (-1)*x*x/((2*k + 2)*(2*k + 3));
    }
    return sum;
}
 
int main()
{
    double xn, xk, dx, s;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<"|  x  |  Sum  | sin(x)| err, % |\n";
    for(double x = xn; x <= xk; x = x + dx)
    {
        s = S(x, 10);
        cout<<setw(5)<<setprecision(3)<<x<<" | "
            <<setw(5)<<setprecision(3)<<s<<" | "
            <<setw(5)<<setprecision(3)<<sin(x)<<" | ";
        if(!sin(x))
            cout<<"sin(x) == 0!";
        else
            cout<<100.0*fabs(sin(x) - s)/sin(x);
        cout<<endl;
    }
    system("pause");//Для CodeBlocks добавить в инклуды <cstdlib>
    return 0;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
Zakat
6 / 6 / 0
Регистрация: 24.12.2012
Сообщений: 143
04.01.2013, 17:04     Вычисление функций с использованием их разложения в степенной ряд #16
Спасибо большое.
Вот так посмотришь - вроде легко, делать начинаешь дак мозг кипит))
-=ЮрА=-
04.01.2013, 17:34
  #17

Не по теме:

Zakat, основная задача вывести итератор(рекуррентное соотношение), а дальше по накактанной.
Кстати код из поста 18 может быть использован для любого разложения в ряд Тэйлора, единственное нужно будет соответвующим образом заменить

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ak *= x;
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
*= (-1)*x*x/((2*k + 2)*(2*k + 3));
и всё

Scronheim
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 22
22.01.2013, 21:38     Вычисление функций с использованием их разложения в степенной ряд #18
http://www.cyberforum.ru/attachment....1&d=1358876236
Помогите пожалуйста составить такую же программу только с этими значениями
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
-=ЮрА=-
Заблокирован
Автор FAQ
23.01.2013, 11:41     Вычисление функций с использованием их разложения в степенной ряд #19
Цитата Сообщение от Scronheim Посмотреть сообщение
Помогите пожалуйста составить такую же программу только с этими значениями
- как всегда вначале следует найти рекуррентное соотношение между соседними членами ряда
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{{ln(3)}^{n}}{n!} * {x}^{n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{{ln(3)}^{n + 1}}{(n + 1)!} * {x}^{n + 1}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{\frac{{ln(3)}^{n + 1}}{(n + 1)!} * {x}^{n + 1}}{\frac{{ln(3)}^{n}}{n!} * {x}^{n}} = ln(3)*\frac{n!}{(n + 1)*n!}*x = \frac{ln(3)}{n + 1}*x
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2013, 11:44     Вычисление функций с использованием их разложения в степенной ряд
Еще ссылки по теме:

Вычисление функций с использованием их разложения в степенной ряд! C++
C++ "Вычисление функций с использованием их разложения в степенной ряд"
C++ Вычисление функций с использованием их разложения в степенной ряд

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
23.01.2013, 11:44     Вычисление функций с использованием их разложения в степенной ряд #20
Вот код для заданной точности е, по числу членов разложения код в посте 10 данной темы
C++
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
//ГЌГ*ГёГ* ГЅГІГ*ëîГ*Г*Г*Гї ГґГіГ*êöèÿ
double f(double x);
double S(double x, double e);
 
int main()
{
    double xn, xk, dx;//äèГ*ГЇГ*çîГ* ГЁ ГёГ*ГЈ
    double x, y, s;//Г§Г*Г*Г·ГҐГ*ГЁГҐ Г*ðãóìåГ*ГІГ* ГґГіГ*êöèè ГЁ Г°Г*çëîæåГ*ГЁГї
    double e;//Г§Г*Г*Г·ГҐГ*ГЁГҐ ïîãðåøГ*îñòè
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"e  = ";cin>>e;
    dx = (xk - xn) / 10;
    cout<<"|  x  |  Sum  | f(x)  |\n";
    for(x = xn; x <= xk; x += dx)
    {
        y = f(x);
        s = S(x, e);
        cout<<setw(5)<<setprecision(4)<<x<<" | "
            <<setw(5)<<setprecision(4)<<s<<" | "
            <<setw(5)<<setprecision(4)<<y<<" | "
            <<endl;
    }
    return 0;
}
 
double f(double x)
{
    return pow(3.0,x);
}
 
double S(double x, double e)//Г°Г*çëîæåГ*ГЁГҐ Г± Г§Г*Г¤Г*Г*Г*îé òî÷Г*îñòüþ
{
    double sum = 1;
    double an  = x*log(3) / 1;
    for(double n = 1; e < fabs(an); n = n + 1)
    {
        sum += an;
        an  *= x*log(3) / (n + 1);
    }
    return sum;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
Yandex
Объявления
23.01.2013, 11:44     Вычисление функций с использованием их разложения в степенной ряд
Закрытая тема Создать тему
Опции темы

Текущее время: 00:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru