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

Интерполяция функции по Ньютону - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 http://www.cyberforum.ru/cpp-beginners/thread168496.html
В С++ я ноль, помогите пожалуйста написать прогу Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1 Спасибо зарание :)
C++ С++ (циклические алгоритмы) Большая просьба помочь с кодом по задаче. Проста, но разбираться в этой теме времени не хватает, а результат срочно нужен. "В бригаде, работающей на уборке сена, имеется N сенокосилок. Первая сенокосилка работала m часов, а каждая следующая на 10 минут больше, чем предыдущая. Сколько часов проработала вся бригада?" http://www.cyberforum.ru/cpp-beginners/thread168489.html
Частотный анализ текста (символьный) C++
Частотный анализ текста (символьный). (Подсчитывается относительная частота встречаемости каждого символа в тексте.) Текст вводится из текстового файла произвольной длины; вывод результатов на экран, принтер или в файле по желанию пользователя. Желательно в Borland C++
Объясните как работают данные исходники C++
плиииз объясните мне работы исходников 1 #include <stdio.h> int x; int y; int main() { int n, i, j, u, v, count; scanf("%i", &n); for (i=0; i<n; i++) { scanf("%i%i", &u, &v);
C++ Поиск анаграмм во входном файле http://www.cyberforum.ru/cpp-beginners/thread168457.html
Условие. В заданном алфавите слов найти все анаграммы. Входные данные. Есть файл "input.txt" в нем список слов. Выходные данные. Вывести в "out.txt" те слова к который будут найдены анаграммы из исходного алфавита. У меня сейчас основная проблема состоит в чтении этого списка слов. т.к. не известно их кол-во да и длины тоже.
C++ Из Sin в Cos С++ Здраствуйте, мне нужно написать програму которая за рядами Тейлора выводит косинус . Проблема заключаеться в том ,что если програма добавляет елементы сумы Тейлора то (как у меня было в разных интерпретациях цыкла) то после 30 елемента или 70 выдает -1,#IND , а значения аргумента будут вводится от 100. Порывшись на американский сайтах нашел програму которая почти идеально решает задачу для... подробнее

Показать сообщение отдельно
T710MA
Сообщений: n/a
18.12.2010, 14:56     Интерполяция функции по Ньютону
может не совсем корректно, но я придумал вот такой код

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <conio.h>
#include <locale>
 
using namespace std;
///////////////////////////////////////////////////////////////////////////////
// Некоторые глобальные переменные
///////////////////////////////////////////////////////////////////////////////
const int maxN = 50;
int N;
double x[maxN]; // Точки на [A,B]
double yd[maxN],yt[maxN],Temp[maxN],fuctor[maxN]; // Коэфициенты при многочленах для Интерполяции
double mnog[maxN]; // Многочлен по теореме Виетта
double inter[maxN]; // Интерполяционный многочлен Ньютона
///////////////////////////////////////////////////////////////////////////////
// Структура для теоремы Виетта
struct kf
{
    int por;
    double zna4;
};
kf koef1[maxN*maxN];
kf koef2[maxN*maxN];
// 1/n!
double fuct_1(int q)
{
    double temp=1;
    for(int j=2;j<=q;j++)temp/=j;
    return (temp);
}
///////////////////////////////////////////////////////////////////////////////
// Свободная функция
double fFree(double x)
{
    return ( exp( 0.5*x ) );
}
///////////////////////////////////////////////////////////////////////////////
// Построение многочленов по теореме Виетта
///////////////////////////////////////////////////////////////////////////////
// Находим конечные разности
void dy()
{
    double yt[maxN], yk[maxN];
    for(int i = 0; i<=N; i++)yt[i] = Temp[i];
    for(int k=0;k<=N;k++)
    {
        yd[k] = yt[0];
        for(int i=0;i<N-k;i++)
        {
            yk[i] = yt[i+1] - yt[i];
            yt[i] = yk[i];
        }
    }
}
// Находим коэфициенты при многочленах
void Ci()
{
    dy();
    for(int i=0;i<=N;i++)yd[i]*=pow(h,-i)*fuctor[i];
}
// Находит сумму попарных произведений
double sum(int n,int q)
{
    double s=0;
    for(int ii=0;ii<=n;ii++)s+=koef1[ii].zna4;
    if( q%2 == 0 ) s = -s;
    return ( s );
}
// Коэфициенты многочлена по теореме Виетта
void TVietta(int w)
{
    for(int i=0; i <= N; i++)mnog[i] = 0;
    for(int i=0; i <= N-w; i++)
    {
        koef1[i].zna4 = x[i];
        koef1[i].por = i;
    }
    mnog[N-w+1] = 1;    
    for(int i=0; i<=N-w; i++)mnog[N-w]+=x[i];mnog[N-w]=-mnog[N-w];
    int l = N-w;
    int soka=1;
 
while( soka <= N-w )
{
    int m = l;
    l = -1;
    for(int i = 0; i <= m; i++)
    {
        for(int j = koef1[i].por+1; j <= N-w; j++)
        {
            l++;
            koef2[l].zna4 = koef1[i].zna4 * x[j];
            koef2[l].por = j;
        }
    }
    for(int i = 0; i <= l; i++)
    {
        koef1[i].zna4 = koef2[i].zna4;
        koef1[i].por = koef2[i].por;
    }
    mnog[N-w-soka] = sum(l,soka);
    soka++;
}
}
// Интерполяция по Ньютону, собственно строим сам многочлен
void Interpol_P(int r)
{
    Ci();
    for(int e = 0; e <= N; e++)inter[e] = 0;
    for(int e = 0; e <= N; e++)
    {
        TVietta( e+1 );
        for(int i = 0; i <= N-e; i++)inter[i] += yd[N-e]*mnog[i];
    }
    if(r != 0)for(int e = 0; e <= N; e++)printf("X^%1.1i:  %4.25f\n",e,inter[e]);
}
///////////////////////////////////////////////////////////////////////////////
// Интерполяция свободной функции
///////////////////////////////////////////////////////////////////////////////
void Interpol_fFree()
{
   for(int i=0;i<=N;i++)
   {
           Temp[i]=fFree(x[i]);
           fuctor[i]=fuct_1(i);
   }
   Interpol_P(1);
}
int main()
{
    N = 10;
    h = (2.0-1.0)/N;
    for(int i = 0; i <= N; i++)x[i] = 1 + i * h;
    Interpol_fFree();
    return (0);
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru