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

интерполяция по формуле в стирлинга - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
FromKremlin
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 9
07.03.2011, 20:42     интерполяция по формуле в стирлинга #1
Здравствуйте, у меня не получается создать программу с динамическим вводом данных. Вот программа со статическим вводом данных. Помогите ее переделать
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
# include <iostream.h>
# include <math.h>
# include <conio.h>
# include <stdlib.h>
const n=10;
double x[n+1] = {0.2930, 0.4690, 0.6450, 0.8210, 0.9970, 1.1730, 1.3490, 1.5250, 1.7010, 1.8770, 2.0530};
double y[n+1] = {-0.2540, -0.0630, 0.0150, 0.0130, -0.0360, -0.1010,        -0.1470, -0.1420, -0.0540, 0.1500, 0.5060};
 double delt(int, int);
 double Stirl(int, double);
void main()
{
  int i,j,d ; double mn,b,q;
    cout<<"Enter argyment(b)\n";
    cin>>b;
     cout<<"\n\n***Programma vi4islyet zna4enie v to4ke  x = "<<b<<" *** ";
     mn=10000;
     for (j=1;j<=n;j++)
     {
        if (fabs(x[j]-b)<mn)
        { mn=fabs(x[j]-b);
    d=j;
        }
     }
     if ((d>(n-4)/2) & (d<=(n+4)/2) & (mn/(x[2]=x[1])<0.25))
     {  q=fabs(b-x[d])/(x[1]-x[0]);
         cout<<"\n Ras4et po formyle stirlinga "
        <<"\n rezyltat: "<<Stirl(d,q);
     }
     else  cout<<"Formyly stirlinga primenit' nel'zy";
  getch();
}
double delt(int m, int k)
{
 double d;
 if (m==1) { d=y[k+1]-y[k]; }
 else { d=delt(m-1,k+1)-delt(m-1,k); }
 return d;
};
 double Stirl(int d, double q)
{
 double S,Q=1,p1=1, p2=1; int t,i;
 if (d>(n-d)) {t=n-d;} else {t=d;}
 S=y[d];
 for (i=1;i<=t;i++)
 {
  p1=p2*(2*i-1); p2=p1*2*i;
  S=S+(q*Q/p1)*(delt(2*i-1,t-i)+delt(2*i-1,t-i+1))/2;
  S=S+((q*q)*Q/p2)*delt(2*i,t-i);
  Q=Q*(q*q-i*i);
 }
 return S;
}
Добавлено через 18 часов 37 минут
ап (5 символов)

Добавлено через 7 часов 53 минуты
вот прога которая у меня получилась, но она выдает совсем не то что нужно =\, скажите где здесь ошибка ?
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
# include <iostream.h>
# include <math.h>
# include <conio.h>
# include <stdlib.h>
double delt(double *,int, int);
double Stirl(double *,int, double);
int n,i ;
void main()
{double *x = new double[n];
double *y = new double[n];
double z;
{cout<<"Enter n(Koli4estvo yzlov interpol9cii)\n";
cin>>n;
 cout<<"Enter mas Y\n";
for(i=0;i<=n;i++)
{cout<<"y["<<i<<"]=";
cin>>y[i]; }
cout<<"Enter mas X\n";
for(i=0;i<=n;i++)
{cout<<"x["<<i<<"]=";
cin>>x[i]; }
cout<<"Enter z(to4ka v kotoroi nyjno vi4islit'zna4enie fynkcii)\n";
cin>>z;
int j,d ; double mn,b,q;
b=z;
mn=10000;
for (j=1;j<=n;j++)
{if (fabs(x[j]-b)<mn)
{ mn=fabs(x[j]-b);
d=j;}}
if ((d>(n-4)/2) & (d<=(n+4)/2) & (mn/(x[2]=x[1])<0.25))
{q=fabs(b-x[d])/(x[1]-x[0]);
cout<<"\n Ras4et vedets9 po formyle stirlinga"<<"\n Rezyltat: "<<Stirl(y,d,q);
getch(); }
            else  cout<<"Formyly stirlinga primenit' nel'zy";
}}
 double delt(double *y, int m, int k)
{
 double d;
 if (m==1) { d=y[k+1]-y[k]; }
 else { d=delt(y,m-1,k+1)-delt(y,m-1,k); }
 return d;
}
 double Stirl(double *y,int d, double q)
{
 double S,Q=1,p1=1, p2=1; int t,i;
 if (d>(n-d)) {t=n-d;} else {t=d;}
 S=y[d];
 for (i=1;i<=t;i++)
 {
  p1=p2*(2*i-1); p2=p1*2*i;
  S=S+(q*Q/p1)*(delt(y,2*i-1,t-i)+delt(y,2*i-1,t-i+1))/2;
  S=S+((q*q)*Q/p2)*delt(y,2*i,t-i);
  Q=Q*(q*q-i*i);
 }
 return S;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2011, 20:42     интерполяция по формуле в стирлинга
Посмотрите здесь:

C++ Интерполяция Лагранжа
C++ интерполяция по Лагранжу
C++ Многомерная интерполяция
C++ Лагранжевая интерполяция
Интерполяция заданной функции второй формулой Ньютона (обратная интерполяция) C++
C++ линейная интерполяция
C++ Интерполяция Лагранжа
C++ Интерполяция Лагранжем
C++ Линейная интерполяция
C++ Квадратичная интерполяция
C++ Квадратичная интерполяция
Тригонометрическая интерполяция C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
07.03.2011, 22:30     интерполяция по формуле в стирлинга #2
т.е вы сначала выделяетте память под n=?? символов, а потом присваиваете n?
C++
1
2
3
4
5
double *x = new double[n];
double *y = new double[n];
double z;
{cout<<"Enter n(Koli4estvo yzlov interpol9cii)\n";
cin>>n;
Ничего не настораживает ?)
А компилятор думает иначе xD
FromKremlin
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 9
07.03.2011, 23:37  [ТС]     интерполяция по формуле в стирлинга #3
исправил ввод n ошибка в расчете осталась =\
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
07.03.2011, 23:54     интерполяция по формуле в стирлинга #4
Дело даже не в этом, ваш код УЖАСНО не удобно читать. Поэтому никто и не пытается Поразделяйте его, скобочки поставьте правильно, табом пользуйтесь, прокомментируйте участки кода, глядишь и сами исправите.
Для меня, к примеру, всегда было ужасом видеть:
C++
1
S=S+(q*Q/p1)*(delt(y,2*i-1,t-i)+delt(y,2*i-1,t-i+1))/2;
Что там что, черт ногу сломит И кроме автора, никто не знает что там
FromKremlin
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 9
08.03.2011, 00:32  [ТС]     интерполяция по формуле в стирлинга #5
Вот формула Стирлинга интерполяция  по формуле в стирлинга
В этом и проблема у меня не получается правильно вызвать функцию, но реализовать эту формулу иначе у меня не получается.
рс В 1 программе все работает отлично, так что в формуле ошибок нет 100%
Миниатюры
интерполяция  по формуле в стирлинга  
FromKremlin
0 / 0 / 0
Регистрация: 13.05.2010
Сообщений: 9
08.03.2011, 20:30  [ТС]     интерполяция по формуле в стирлинга #6
Тема актуальна
Yandex
Объявления
08.03.2011, 20:30     интерполяция по формуле в стирлинга
Ответ Создать тему
Опции темы

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