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

Вторая интерпол.ф-ла. Ньютона - C++

Восстановить пароль Регистрация
 
Happy_Gilmar
Сообщений: n/a
27.03.2012, 23:20     Вторая интерпол.ф-ла. Ньютона #1
Уважаемые форумчане
взгляните пожалуйста на творение и дайте пару советов по оптимизации
данного кода желательно наглядно))

Вычислить значение для 550 с помощью второй интер.ф-лы.Ньютона
Таблица 1
x 300 400 500 600
Y 52.88 65.61 78.07 99.24

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
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <locale.h>
#include <math.h>
using namespace std;
int factorial (int f);
 
int   main ()
{
    setlocale(LC_CTYPE,"Russian");
    
            float X[]={ 300,400,500,600 };
            float Y[]={52.88,65.61,78.07,99.24};
            
            int n=3;
 
    
            float testX;
            cout<<"Вводим проверяемый Х\n";
            cin>>testX;
            if(testX>X[3]||testX<X[0])
            {cout<<"Недопустимое значение\n";return 0;}
 
 
        float ** razn= new float *[n+n+1]; /*создание динамического массива для таблицы конечных разностей
                                          [n+n+1]столько у нас строк в таблице*/
        int k=0;
        for (int i=0;i<=n;++i)
        {
                razn[i] = new float [n+1+k];
                --k;// выделяем память для каждой строки определенное кол столбцов [n+n+1+k] 
                //к- уменьшает число столбцов в строчке на 1, т.к.
                //таблица разностей имеет диагональный вид
        }
        for ( int i=0;i<=n;++i)// заполняем нулевой столбец массива значениями функции в узлах
        {
                razn [i][0]=Y[i];
                cout<<razn[i][0]<<" "<<endl;
        }
        cout<<endl<<"----------------"<<endl;
        int r=n;
 
        for (int j=1;j<=n+n;++j)
        {
                for(int i=0;i<r;++i)
                {
                        int s=-i;
                        razn[i][j]=razn[-(s-1)][j-1]-razn[i][j-1];//получаем таблицу разностей
                        cout<<"r[ "<<i<<"][ "<<j<<"]"<<razn[i][j]<<" "<<endl;
                }
                cout<<endl<<"----------------"<<endl;
                r--;//это чтобы уменьшать число столбцов, в строке, приводить к диагональному виду таблицу разности
               if(r==0)break; 
        }
 
float sum,sum1,sum3,sum2;
float st=X[1]-X[0];
 
float *q = new float;
float tmp=1;
 
sum=Y[n];int p=1,u=n;
for(int i=0;i<=n;i++)
 
    {
            q[i]=(testX-X[u]);
            tmp*=q[i];
            sum1=razn[u-1][i+1]*tmp;
            sum2=pow(st,p)*factorial(p);
            sum3=sum1/sum2;
            sum=sum+sum3;
            cout<<"sum= "<<sum<<"\n";
            p++;u--;
            if(u-1<0)break;//чтобы не выйти за границы таблицы конечн.разностей
    }   
 
    cout<<"Результата вычислений Р("<<testX<<")= "<<sum<<endl;
    return 0;
}
    
int factorial (int f)
{
int product = 1;
while (f> 0) {product = f *product;f--;}
return product;
}
Добавлено через 24 минуты
инклуд иострим всем в печень

Добавлено через 22 минуты
Ну помощники..................

Добавлено через 1 час 34 минуты
на коднет люди активнее(((((

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i=0;i<=n;++i)
         {
                 razn[i] = new float [n+1+k];
                 --k;// выделяем память для каждой строки определенное кол столбцов [n+n+1+k] 
                 //к- уменьшает число столбцов в строчке на 1, т.к.
                 //таблица разностей имеет диагональный вид
         }
         for ( int i=0;i<=n;++i)// заполняем нулевой столбец массива значениями функции в узлах
         {
                 razn [i][0]=Y[i];
                 cout<<razn[i][0]<<" "<<endl;
         }

уже объединил в один цикл
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2012, 23:20     Вторая интерпол.ф-ла. Ньютона
Посмотрите здесь:

C++ определить содержится ли вторая строка в конце первой
вторая производная C++
C++ вторая производная в С
C++ Алгоритмы замещения страниц(STL, вторая попытка)
C++ Интерполяция и вторая производная
Выяснить, совпадают ли первая и вторая половины последовательности C++
Проверить, является ли вторая строка аббревиатурой первой C++
C++ Заменить символы, вторая часть

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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