0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
1

Ошибка в программе интерполяция функции методом Ньютона

04.06.2015, 17:07. Показов 1969. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
выдает ошибку, не пойму в чем проблема
[C++ Error] Unit1.cpp(12): E2313 Constant expression required
[C++ Error] Unit1.cpp(14): E2313 Constant expression required


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
#include<iostream>
#include<stdio.h>
#include<iomanip>
using namespace std;
float factorial(int i);
int main(void)
{
setlocale(LC_ALL,"Russian");
int n=12;// buduthee ogranishenie dlia postoyannogo shaga
float arrx[n];// massiv znashenii X
float arry[]={5.61543,5.46693,5.32634,5.19304,5.06649,4.94619,4.83170,4.72261,4.61855,4.51919,4.42422,4.33337};//?????? ???????? Y
float *dy[n];// masiv wichislennich rasnostei
float X[]={0.1817,0.2275,0.175,0.2375};// masiv znashenii dlya Y(X)
float Res[4];
float h=0.005;
cout<<"Kursovaya robota interpoliaziya metodom Newtona."<<endl;
//zapolnaem masiv znashenii X ?znasheniyami iz tablizy
float x=0.18;
for(int i=0;i<n;i++)//zadaem postoyanniy shag uwelicheniya znacheniy X
{ 
arrx[i]=x;
x+=0.005;
}
//wichislyaem raznosti
for (int i=0;i<n;i++)
    {
        dy[i]=new float[n-i];
    }
    for (int i=0;i<n;i++)
    {
        dy[0][i]=arry[i];
    }
    for (int i=1;i<n;i++)
    {
        for (int j=0;j<n-i;j++)
        {
            dy[i][j]=dy[i-1][j+1]-dy[i-1][j];
        }
    } 
//vivodim vse poluchenie znacheniya na ekran.
cout<<"Znachenia X,Y i vichislennih raznostey"<<endl;
//zykly sozdani dlya poshagovogo vivoda znacheniy na ekran
cout<<"X ";
for(int i=0;i<n;i++)
{
cout<<""<<fixed<<setprecision(6)<<arrx[i]<<" ";
}
cout<<endl;
cout<<"Y ";
for(int i=0;i<n;i++)
{
cout<<arry[i]<<" ";
}
cout<<endl;
cout<<"????????:"<<endl;
for(int i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
cout<<dy[i][j]<<" ";
}
cout<<endl;
}
//Wichislyaem Y(X) opyrayas na metod Newtona
float tl[4],tr[4];;
for (int i=0; i<4; i++)
 {tl[i]=(X[i]-arrx[0])/h;}
for (int i=0; i<4; i++)
 {tr[i]=(X[i]-arrx[n-1])/h;}
for (int k=0; k<4; k++)
{
Res[k]=0;
float temp=1;
if(X[k] < arrx[6])
{
for (int i=0; i<n; i++)
{
Res[k]+=dy[i][0]*(temp/factorial(i));
temp*=(tl[k]-i);
}
}
else
{
for (int i=0; i<n-1; i++)
{
Res[k]+=dy[i][n-i-1]*(temp/factorial(i));
temp*=(tr[k]+i);
}
}
}
for(int i=0;i<4;i++)
{cout<<"Y"<<i<<" :"<<Res[i]<<endl;}
getchar();
getchar();
return 0;
}
float factorial(int k)
{
    if(k==0) return 1;
    return factorial(k-1)*k;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 17:07
Ответы с готовыми решениями:

Интерполяция функции одной переменной методом Ньютона (Pascal -> C++)
program interpol; uses crt,graph; const MAXCOUNT=30; type

Интерполяция заданной функции второй формулой Ньютона (обратная интерполяция)
Программа накапливает ошибку, да и первые значения совсем уже &quot;приближённые&quot;. Явно что-то упустил....

Интерполяция функции методом Ньютона: Undefined symbol 'Series1'
выдает ошибки Unit1.cpp(25): E2451 Undefined symbol 'Series1' Unit1.cpp(32): E2451 Undefined...

Интерполяция методом Ньютона
Скажите, пожалуйста, в чем ошибка? И правильно ли я вообще делаю? Делаю по примеру...

3
14 / 14 / 13
Регистрация: 04.06.2015
Сообщений: 85
04.06.2015, 17:19 2
C++
1
const int n = 12;// buduthee ogranishenie dlia postoyannogo shaga
0
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 11
04.06.2015, 17:30  [ТС] 3
ArtFeather, тепер выдает ошибки
[Linker Error] Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
[Linker Error] Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\CP32MTI.LIB|crtlvcl
как их исправить?
0
14 / 14 / 13
Регистрация: 04.06.2015
Сообщений: 85
04.06.2015, 18:08 4
У меня всё прекрасно работает, ошибок в синтакисе нет:

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
#include<iostream>
#include<stdio.h>
#include<iomanip>
using namespace std;
float factorial(int i);
int main(void)
{
    setlocale(LC_ALL, "Russian");
    const int n = 12;// buduthee ogranishenie dlia postoyannogo shaga
    float arrx[n];// massiv znashenii X
    float arry[] = { 5.61543, 5.46693, 5.32634, 5.19304, 5.06649, 4.94619, 4.83170, 4.72261, 4.61855, 4.51919, 4.42422, 4.33337 };//?????? ???????? Y
    float *dy[n];// masiv wichislennich rasnostei
    float X[] = { 0.1817, 0.2275, 0.175, 0.2375 };// masiv znashenii dlya Y(X)
    float Res[4];
    float h = 0.005;
    cout << "Kursovaya robota interpoliaziya metodom Newtona." << endl;
    //zapolnaem masiv znashenii X ?znasheniyami iz tablizy
    float x = 0.18;
    for (int i = 0; i<n; i++)//zadaem postoyanniy shag uwelicheniya znacheniy X
    {
        arrx[i] = x;
        x += 0.005;
    }
    //wichislyaem raznosti
    for (int i = 0; i<n; i++)
    {
        dy[i] = new float[n - i];
    }
    for (int i = 0; i<n; i++)
    {
        dy[0][i] = arry[i];
    }
    for (int i = 1; i<n; i++)
    {
        for (int j = 0; j<n - i; j++)
        {
            dy[i][j] = dy[i - 1][j + 1] - dy[i - 1][j];
        }
    }
    //vivodim vse poluchenie znacheniya na ekran.
    cout << "Znachenia X,Y i vichislennih raznostey" << endl;
    //zykly sozdani dlya poshagovogo vivoda znacheniy na ekran
    cout << "X ";
    for (int i = 0; i<n; i++)
    {
        cout << "" << fixed << setprecision(6) << arrx[i] << " ";
    }
    cout << endl;
    cout << "Y ";
    for (int i = 0; i<n; i++)
    {
        cout << arry[i] << " ";
    }
    cout << endl;
    cout << "????????:" << endl;
    for (int i = 1; i<n; i++)
    {
        for (int j = 0; j<n - i; j++)
        {
            cout << dy[i][j] << " ";
        }
        cout << endl;
    }
    //Wichislyaem Y(X) opyrayas na metod Newtona
    float tl[4], tr[4];;
    for (int i = 0; i<4; i++)
    {
        tl[i] = (X[i] - arrx[0]) / h;
    }
    for (int i = 0; i<4; i++)
    {
        tr[i] = (X[i] - arrx[n - 1]) / h;
    }
    for (int k = 0; k<4; k++)
    {
        Res[k] = 0;
        float temp = 1;
        if (X[k] < arrx[6])
        {
            for (int i = 0; i<n; i++)
            {
                Res[k] += dy[i][0] * (temp / factorial(i));
                temp *= (tl[k] - i);
            }
        }
        else
        {
            for (int i = 0; i<n - 1; i++)
            {
                Res[k] += dy[i][n - i - 1] * (temp / factorial(i));
                temp *= (tr[k] + i);
            }
        }
    }
    for (int i = 0; i<4; i++)
    {
        cout << "Y" << i << " :" << Res[i] << endl;
    }
    getchar();
    getchar();
    return 0;
}
float factorial(int k)
{
    if (k == 0) return 1;
    return factorial(k - 1)*k;
}
Добавлено через 7 минут
На крайний случай попробуйте так:

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
#include<iostream>
#include <vcl.h>
#pragma hdrstop
#include<stdio.h>
#include<iomanip>
using namespace std;
float factorial(int i);
#pragma argsused
int main(void)
{
    setlocale(LC_ALL, "Russian");
    const int n = 12;// buduthee ogranishenie dlia postoyannogo shaga
    float arrx[n];// massiv znashenii X
    float arry[] = { 5.61543, 5.46693, 5.32634, 5.19304, 5.06649, 4.94619, 4.83170, 4.72261, 4.61855, 4.51919, 4.42422, 4.33337 };//?????? ???????? Y
    float *dy[n];// masiv wichislennich rasnostei
    float X[] = { 0.1817, 0.2275, 0.175, 0.2375 };// masiv znashenii dlya Y(X)
    float Res[4];
    float h = 0.005;
    cout << "Kursovaya robota interpoliaziya metodom Newtona." << endl;
    //zapolnaem masiv znashenii X ?znasheniyami iz tablizy
    float x = 0.18;
    for (int i = 0; i<n; i++)//zadaem postoyanniy shag uwelicheniya znacheniy X
    {
        arrx[i] = x;
        x += 0.005;
    }
    //wichislyaem raznosti
    for (int i = 0; i<n; i++)
    {
        dy[i] = new float[n - i];
    }
    for (int i = 0; i<n; i++)
    {
        dy[0][i] = arry[i];
    }
    for (int i = 1; i<n; i++)
    {
        for (int j = 0; j<n - i; j++)
        {
            dy[i][j] = dy[i - 1][j + 1] - dy[i - 1][j];
        }
    }
    //vivodim vse poluchenie znacheniya na ekran.
    cout << "Znachenia X,Y i vichislennih raznostey" << endl;
    //zykly sozdani dlya poshagovogo vivoda znacheniy na ekran
    cout << "X ";
    for (int i = 0; i<n; i++)
    {
        cout << "" << fixed << setprecision(6) << arrx[i] << " ";
    }
    cout << endl;
    cout << "Y ";
    for (int i = 0; i<n; i++)
    {
        cout << arry[i] << " ";
    }
    cout << endl;
    cout << "????????:" << endl;
    for (int i = 1; i<n; i++)
    {
        for (int j = 0; j<n - i; j++)
        {
            cout << dy[i][j] << " ";
        }
        cout << endl;
    }
    //Wichislyaem Y(X) opyrayas na metod Newtona
    float tl[4], tr[4];;
    for (int i = 0; i<4; i++)
    {
        tl[i] = (X[i] - arrx[0]) / h;
    }
    for (int i = 0; i<4; i++)
    {
        tr[i] = (X[i] - arrx[n - 1]) / h;
    }
    for (int k = 0; k<4; k++)
    {
        Res[k] = 0;
        float temp = 1;
        if (X[k] < arrx[6])
        {
            for (int i = 0; i<n; i++)
            {
                Res[k] += dy[i][0] * (temp / factorial(i));
                temp *= (tl[k] - i);
            }
        }
        else
        {
            for (int i = 0; i<n - 1; i++)
            {
                Res[k] += dy[i][n - i - 1] * (temp / factorial(i));
                temp *= (tr[k] + i);
            }
        }
    }
    for (int i = 0; i<4; i++)
    {
        cout << "Y" << i << " :" << Res[i] << endl;
    }
    getchar();
    getchar();
    return 0;
}
float factorial(int k)
{
    if (k == 0) return 1;
    return factorial(k - 1)*k;
}
1
04.06.2015, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 18:08
Помогаю со студенческими работами здесь

Интерполяция методом Ньютона
Здравствуйте x=(0.15;0.20;0.25;0.30;0.35;0.40;0.45;0.50;0.55;0.60;0.65)...

Интерполяция методом Ньютона
Помогите ребята

Интерполяция методом Ньютона
program interpol; uses crt,graph; const MAXCOUNT=30; type per = array of real; var X,y...

Интерполяция методом ньютона
Дан массив данных x0=1,3 ,x1=1,25 ,x2=1,2 ,x3=1,15 ,x4=1,1 и их значения функции y0=3,379 ,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru