Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
1

Ряд Тейлора: Вычислить значение функции

01.10.2012, 17:31. Просмотров 4937. Ответов 16
Метки нет (Все метки)

Здраствуйте.Всю жизнь программировал на Паскале и вдруг си...помогите пожалуйста с заданиями,желательно с объяснением,ибо чайник полный..
1.Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от Хнач до Хкон с шагом dx с e точностью . Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.

http://www.cyberforum.ru/cgi-bin/latex.cgi?\ln (x + 1) = \sum \limits_{n=0}^{\infty} \frac{\left(-1\right)^n \cdot x^{n+1}}{n + 1} = x - \frac{x^2}{2} + \frac{x^3}{3} - \frac{x^4}{4} + \ldots, \quad -1 < x < 1<br />

К первой задаче нашел решение,правда на C#,а надо на обычном С
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2012, 17:31
Ответы с готовыми решениями:

Вычислить значение функции разложением в ряд Тейлора
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) точностью (є) Близость...

Вычислить значение функции разложением в ряд Тейлора
Здравствуйте. Помогите пожалуйста решить задачку: Редактор формул внизу страницы...

Вычислить значение функции разложением в ряд Тейлора
2. Используя рекуррентное соотношение вычислить сумму с точностью =10^-6, x вводится с клавиатуры....

Вычислить с помощью рядов тейлора значение функции косинус х
Добрый вечер. Задание: вычислить с помощью рядов тейлора значение функции косинус х. Написал...

Вычислить и вывести на экран в виде таблицы значение функции с помощью ряда Тейлора
Вычислить и вывести на экран в виде таблицы значение функции с помощью ряда Тейлора float...

16
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
01.10.2012, 17:43 2
Цитата Сообщение от isu Посмотреть сообщение
ln(x+1)=∑(от n=0 до бесконечности)((-1)^n*x^(n+1))/(n+1)=x-x^2/2+x^3/3-x^4/4+..., -1<x<1
А если воспользоваться редактором формул.

Не по теме:

Вы случайно с эти товарищем не из одного вуза?

0
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
01.10.2012, 18:26  [ТС] 3
можно поподробнее,насчет редактора
не уверен,первый курс ТвГУ

Добавлено через 5 минут
спасибо за исправление)
0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
02.10.2012, 09:45 4
Под последним сообщением первая синяя полоска с надписью "Редактор формул".
0
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
02.10.2012, 21:01  [ТС] 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
 
#define E 0.001
#define DX 0.1
#define A 0
#define B 1
 
 
double F(double x, double eps, int * i);
 
int main() {
 
    char * funcname = "Ln(x+1)";
    int iters = 0;
    double x = 0.0;
 
    printf("Рассчет функции: %s \nС точностью %4.3f и шагом %4.1f\nВ диапазоне [%d,%d]\n\n", funcname, E, DX, A, B);
 
    printf("Приближенное значение\t\tТочное значение\t\t\tСлагаемых\n");
 
    for (x = A; x < B; x += DX) {
 
        double rr = F(x, E, & iters);
        printf("%4.13f\t\t\t\t %4.13f\t\t\t\t %d\n", rr, log(x + 1), iters);
 
    }
    return (EXIT_SUCCESS);
 
}
 
double F(double x, double eps, int * i) {
 
            double result = 0, lastresult = DBL_MIN, multipler = x;
            *i = 0;
            if ( fabs(x - 0) < DBL_MIN ) return 0;
            do
            {
                lastresult = result;
                (*i)++;
                result += multipler / (*i);
                multipler *= -x;
            } while ( fabs(result - lastresult) >= eps );
            return result;
}
вот попытка,но не уверен,что правильно...

Добавлено через 1 час 36 минут
актуально,попробовал проверить-где-то накосячил,помогите пожалуйста
0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
03.10.2012, 10:51 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Как-то так:
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
double func(double x, double eps, int *iter);
 
int main(int argc, char **argv) {
 
    double x;           /* аргумент функции */
    double rr = 0;      /* результат вычисления функции */
    double x1 = -1;     /* начало интервала */
    double x2 = 1;      /* конец интервала */
    double dx = 0.1;    /* шаг */
    double eps = 0.001; /* точность */
    int iter = 0;       /* итерации -- количество слогаемых */
 
 
    printf("| Аргумент X |     ln(x + 1)    | Кол-во членов |\n");
    /* циклом проходим по всему заданному диапазону */
    for (x = x1; x <= x2; x += dx) {
        rr = func(x, eps, &iter);
        printf("|   %5.2f    | %16.13f |     %5d     |\n", x, rr, iter);
    }
 
    return EXIT_SUCCESS;
}
 
 
double func(double x, double eps, int *i) {
 
    double lastresult, result;
 
    lastresult = 0;
 
    do {
        result = lastresult;
        lastresult = (pow(-1, *i) * pow(x, *i + 1)) / (*i + 1);
        (*i)++;
        /* вычисляем пока разница не станет меньше точности */
    } while (fabs(lastresult - result) >= eps);
 
    return lastresult;
}
2
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
03.10.2012, 12:42  [ТС] 7
Спасибо большое)

Добавлено через 1 час 35 минут
а как можно выполнить это задание,только без использования возведения в степень?
0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
03.10.2012, 13:53 8
Вы имеете ввиду не использовать библиотечную функцию pow()? Или вообще без операции "возведение в степень"?
Если первое, то попробую догадаться, что у вас не получается слинковать программу. Если второе, то можно число, которое необходимо возвести в степень, умножать само на себя нужное количество раз, благо у нас степень -- натуральное число. Но опять таки, этот код удобно сгруппировать в отдельную функцию и назвать её по-своему: power():
C
1
2
3
4
5
6
7
8
9
10
11
12
/* возводит число x в степень n, */
/* где n -- натуральное число */
double power(double x, int n) {
 
    int i;
    double rez = 1;
 
    for(i = 1; i <= n; ++i) {
        rez *= x;
    }
    return rez;
}
В основной программе замените функцию pow() на power().
Кстати, можно пойти дальше и не использовать вовсе заголовочный файл math.h, если заменить функцию fabs() на свой код.
1
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
03.10.2012, 14:33  [ТС] 9
да,полностью без возведения в степень
0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
03.10.2012, 14:34 10
Тогда приведённый выше код.

Откуда такое требование?
0
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
03.10.2012, 14:48  [ТС] 11
прихоть преподавателя((

Добавлено через 10 секунд
спасибо,ещё раз)

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

Не по теме:

Посоветуйте толковые учебники по С на русском,пожалуйста

0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
03.10.2012, 14:51 12
Цитата Сообщение от isu Посмотреть сообщение
да,полностью без возведения в степень
Цитата Сообщение от isu Посмотреть сообщение
прихоть преподавателя((
Если преподаватель всё же просил не использовать стандартную функцию pow(), то я это понимаю.
А если он просил вообще не использовать возведение в степень, то это бредятина; ряд Тейлора предполагает возведение в степень, даже если вы будите сводить эту операцию к умножению.
0
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
03.10.2012, 15:11  [ТС] 13
увы,именно без возведения в степень((
как-никак,споры с преподавателями чреваты последствиями...
может быть вот этот пример немного пояснит ситуацию,т.к. разбирали его до задания сверху и должны были делать на его манер
C
1
2
3
4
void func (float xn,float xk, float dx,double eps)
{ 
for (float x=xn;x<=xk;x+=dx)
printf ("%5.2   %5.2f/n",x,f(x,eps);
как-то так

Добавлено через 4 минуты
http://www.cyberforum.ru/cgi-bin/latex.cgi?cosx=1-\frac{{x}^{2}}{2!}+\frac{{x}^{4}}{4!}-....+{-1}^{n}\frac{{x}^{2n}}{(2n)!}
вот для такого примера
0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
03.10.2012, 15:31 14
Цитата Сообщение от isu Посмотреть сообщение
multipler = x
result += multipler / (*i);
multipler *= -x;
x делится на единицу, далее x умножается на multipler, который в первой итерации равен x и т.д. Всё равно приходим к возведению в степень, впрочем, об этом я уже говорил.
0
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
03.10.2012, 15:52  [ТС] 15
можете объяснить поподробнее,что значит "multipler"

Не по теме:

не посоветуете учебники или самоучители по С достойные,на русском желательно

0
UriahHeep
222 / 217 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
03.10.2012, 16:04 16
Это переменная типа double в приведённом вами коде. В самом начале выполнения функции F() ей (переменной multipler) присваивают значение переданного в функцию значения x. multipler служит для накопления умножения числа на само себя, т.е. опять приходим к степени!

Достойнейшая книга.
1
isu
6 / 0 / 1
Регистрация: 01.10.2012
Сообщений: 64
03.10.2012, 16:31  [ТС] 17
спасибо,понял теперь)
0
03.10.2012, 16:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2012, 16:31

Вычислить значение функции Sin(x) разложением в ряд
Дан y=x-x^3/3!+x^5/5!... Мы вводим только x и n. Программа работает неправильно помогите...

Вычислить значение функции через разложение в ряд
Помогите решить задачу и желательно с описанием. Зарание спасибо)

Функции ряд Тейлора
Не могу разобраться .


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru