Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/91: Рейтинг темы: голосов - 91, средняя оценка - 4.78
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
1

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

25.01.2012, 17:03. Показов 18866. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста с задачей:
Постановка задачи:
Для х изменяющегося от 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-(икс в квадрате).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2012, 17:03
Ответы с готовыми решениями:

Вычисление функций с использованием их разложения в степенной ряд - C++
http://https://www.cyberforum.ru/cpp-beginners/thread435049.html#post2443082 В этой теме при...

Вычисление функций с использованием их разложения в степенной ряд
Здравствуйте!Бьюсь над задачей который день, подскажите что не так Для х изменяющегося от a до b с...

Вычисление функций с использованием их разложения в степенной ряд
помогите пожалуйста закончить лабу, не правильно получается цикл SE и, если несложно, помогите с...

Вычисление функций с использованием их разложения в степенной ряд
Помогите пожалуйста исправить прогрограмму (С++) Для х изменяющегося от a до b с шагом (b-a)/k,...

21
Заблокирован
Автор FAQ
25.01.2012, 17:24 2
Цитата Сообщение от Сергейййййййй Посмотреть сообщение
Помогите пожалуйста с задачей:
посмотри эти топики
Программирование циклов с неизвестным заранее числом повторений
Вычислить и вывести на экран в виде таблицы значения функции
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);
с) для «точного» значения (по аналитической формуле).

0
Заблокирован
Автор FAQ
25.01.2012, 21:59 4

Не по теме:

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


Вернусь к задаче
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{{x}^{n}*cos(\frac{n*\pi}{3})}{n}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{{x}^{(n + 1)}*cos(\frac{(n + 1)*\pi}{3})}{n + 1}
Теперь определяем итератор
https://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})}
https://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})}
Возможно частное от деления косинусов можно преобразовать, но к сожалению знания тригонометрии подводят, так что оставляю итератор как есть
1
Заблокирован
Автор 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;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
2
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
26.01.2012, 17:52  [ТС] 6
СПАСИБО ОГРОМНОЕ!!!вы супер)

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

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

Не по теме:

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

1
Заблокирован
Автор 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;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
3
4 / 2 / 0
Регистрация: 12.01.2012
Сообщений: 30
30.01.2012, 18:59  [ТС] 11
мне написали что функция есть, а переМенная-массив отсутствует
и дали ссылкуhttp://programmersclub.ru/16/

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

Не по теме:

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

1
Заблокирован
Автор 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;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
3
6 / 6 / 1
Регистрация: 24.12.2012
Сообщений: 153
24.12.2012, 12:47 14
а если y=sinX ; n=10 ; 0,1 < x < 1 ; S= x-x3/3! + ... + (-1)n*x2n+1/(2n+1)!
как тогда будет выглядеть?
0
Заблокирован
Автор 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)!
как тогда будет выглядеть?
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = {(-1)}^{n}*\frac{{x}^{2*n + 1}}{(2*n + 1)!}
https://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)!}
https://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)}
https://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;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
3
6 / 6 / 1
Регистрация: 24.12.2012
Сообщений: 153
04.01.2013, 17:04 16
Спасибо большое.
Вот так посмотришь - вроде легко, делать начинаешь дак мозг кипит))
0
-=ЮрА=-
04.01.2013, 17:34
  #17

Не по теме:

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

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

1
3 / 3 / 0
Регистрация: 22.01.2013
Сообщений: 26
22.01.2013, 21:38 18
https://www.cyberforum.ru/atta... 1358876236
Помогите пожалуйста составить такую же программу только с этими значениями
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
0
Заблокирован
Автор FAQ
23.01.2013, 11:41 19
Цитата Сообщение от Scronheim Посмотреть сообщение
Помогите пожалуйста составить такую же программу только с этими значениями
- как всегда вначале следует найти рекуррентное соотношение между соседними членами ряда
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = \frac{{ln(3)}^{n}}{n!} * {x}^{n}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = \frac{{ln(3)}^{n + 1}}{(n + 1)!} * {x}^{n + 1}
https://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
1
Заблокирован
Автор 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;
}
Миниатюры
Вычисление функций с использованием их разложения в степенной ряд  
1
23.01.2013, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2013, 11:44
Помогаю со студенческими работами здесь

Вычисление функций с использованием их разложения в степенной ряд!
Условие: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x),...

Вычисление функций с использованием их разложения в степенной ряд
Вычисление функций с использованием их разложения в степенной ряд. Вычислить функцию S= f(x),...

Вычисление функций с использованием их разложения в степенной ряд
Для х, изменяющегося от a до b (интервал целиком лежит внутри интервала, указанного в третьей...

Вычисление функций с использованием их разложения в степенной ряд
&quot;Вычисление функций с использованием их разложения в степенной ряд&quot; Цель: Практика в...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru