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

задачка по вычислению интерполянта - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ разбор ошибок http://www.cyberforum.ru/cpp-beginners/thread376753.html
всем доброго времени суток! написал прогу которая работаес с базой данных. в студии все прекрасно работало, но нада на Борланд С++ 3.1 . начала переписывать, столкнулся с некоторыми проблемами: 1. программа плохо реагирует на двузначный ввод комманд (тоесть, например если я ввожу команду "1", то все ок, если "12", то воспринимает это как две команды - "1" и "2") 2. непонятно ведет себя команда...
C++ Просьба уточнить часть кода. Доброго дна. Хотел бы уточнить что выполняет строка: Ranch->Fly(); Код функции: for(i=0;i<NumberHorses;i++) { Ranch->Fly(); delete Ranch; http://www.cyberforum.ru/cpp-beginners/thread376749.html
Помогите расписать программу C++
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int main(void) { char s,*s2; char *ptr,*ptr2; char nextsymb;
C++ Примеры на Тurbo C++
Кто умеет решать, помогите..
C++ С++ Задачи на двумерный массив. http://www.cyberforum.ru/cpp-beginners/thread376732.html
Задача на двумерный массив. Дана целочисленная прямоугольная матрица. Определить сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
C++ Найти минимальное значение положительных элементов, расположенных правее первого элемента, равного нулю. Задан целочисленный одномерный массив a из n элементов. Найти минимальное значение положительных элементов, расположенных правее первого элемента, равного нулю. подробнее

Показать сообщение отдельно
anton-mix
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 68
02.11.2011, 17:57     задачка по вычислению интерполянта
вообщем есть задачка
1.Найти значения функции F(x) в указанных точках x(j) и сравнить с точными значениями f(x(j))-F(x(j))
2. Вывести на экран графики f(x),F(x)
f(x)=1/x
a=0.1
b=1.1
x(j) меняется от 0,1 до 1,5 с шагом 0,04
Это все нужно сделать по формуле Бесселя
число n варьировать от 4 до 10

Вот код
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
#include <iostream>
#include<cmath>
using namespace std;
double f(double x)
{
    double fn=pow(x,-1);
    return fn;
}
double F (double x, int n) //функция подсчета приближенного значения функции в точке.
 
    // построение таблицы разностей
 
{
    double a=0.1, b=1.1; // аргумент первого и последнего узла интерполяции
    // n -колличество узлов интерполяции
    double h=(b-a)/(2*n); //шаг между узлами интерполяции
    double * x_arg = new double [n+n+1]; //массив аргументов функции в узлах интерполяции
    //cout<<"seredina: "<<xp[0]<<" "<<endl<<"h: "<<h<<endl;
    int s=0;//тут введена х чтоб умножать h на положит
    for (int i=-n; i<=n; ++i) 
    {
 
        x_arg[i]=a+s*h; s++;// заполнение массива аргументов от -n до n
        //cout<<x_arg[i]<<" ";
    }
    //cout<<endl<<"___________________"<<endl;
    //cout<<endl<<endl;
 
    //-------------------------------------------------------------------------------------------------------------------
    int smin=0;
    double min=fabs(x-x_arg[0]);
    for (int i=-(n-1);i<n;i++)
    {
        if (fabs(x-x_arg[i])<min)
        {
            smin=i;min=fabs(x-x_arg[i]);
        }
 
    }
    //cout<<" blizhe vseh k : "<<x_arg[smin]<<endl;
    x_arg[0]=x_arg[smin];
    if((x_arg[0]-a)<(b-x_arg[0]))b=2*(x_arg[0]-a);//cout<<" B: "<<b<<endl;}
    else a=b-2*(b-x_arg[0]);
    h=(b-a)/(2*n); //шаг между узлами интерполяции
    s=0;//тут введена х чтоб умножать h на положит
    for (int i=-n; i<=n; ++i) 
    {
 
        x_arg[i]=a+s*h; s++;// заполнение массива аргументов от -n до n
        //cout<<x_arg[i]<<" ";
    }
    //cout<<endl<<"___________________"<<endl;
    //cout<<endl<<endl; 
 
    //--------------------------------------------------------------------------------------------------------------------
    double ** razn= new double *[n+n+1]; //создание динамического массива для таблицы конечных разностей
    // [n+n+1]столько у нас строк в таблице
    int k=0;
    for (int i=-n;i<=n;++i)
    {
        razn[i] = new double [n+n+1+k];
        --k;// выделяем память для каждой строки определенное кол столбцов [n+n+1+k] 
        //к- уменьшает число столбцов в строчке на 1, т.к.
        //таблица разностей имеет диагональный вид
    }
    for ( int i=-n;i<=n;++i)// заполняем нулевой столбец массива значениями функции в узлах
    {
        razn [i][0]=f(x_arg[i]);
        //cout<<razn[i][0]<<" "<<endl;
    }
    //cout<<endl<<"----------------"<<endl;
    int r=n;
 
    for (int j=1;j<=n+n;++j)
    {
        for(int i=-n;i<r;++i)
        {
            int s=-i;
            razn[i][j]=razn[-(s-1)][j-1]-razn[i][j-1];//получаем таблицу разностей
            //cout<<razn[i][j]<<" "<<endl;
        }
        //cout<<endl<<"----------------"<<endl;
        r--;//это чтоб уменьшать число столбцов, в строке, приводить к диагональному виду таблицу разности
        //cout<<endl<<"----------------"<<endl;
    }
 
    // Считаем приближенное значение функции в точке
 
    double q,w1,w2,w;
    w=0;w1=1;w2=1;
    q=(x-x_arg[0])/h;
    //cout<<"q: "<<q<<" x_arg[0]: "<<x_arg[0]<<endl<<endl;
    //if(q<0.25&&q>0.75){}
    for(int i=1;i<n;i++)
    {
        w1*=(q+i-1)*(q-i)/(2*i);//cout<<endl<<" i : "<<i<<endl;
        w2*=(q-0.5)*(q-i)*(q+i-1)/(2*i+1);//умножение с присваиванием 
        w+=w1*(razn[-i][2*i]+razn[-i+1][2*i])*0.5+w2*razn[-i][2*i+1];//сложение с присваиванием
        //cout<<endl<<w<<" "<<endl;
    }
    double fn=(razn[0][0]+razn[1][0])*0.5+(q-0.5)*razn[0][1]+w;//
    return fn;
    delete [] x_arg;
    delete [] razn;
}
void main()
{
    double x;
    int n;
    n=5;
    //k=8;
    x=1;
    //cout<<F(x,n);
    for(x=0.1;x<=1.5;x+=0.04)
    {
        cout<<"x "<<x<<" \t"<<"  f(x)  "<<f(x)<<" \t"<<"  F(x)  "<<F(x,n)<<"  \t"<<"  raznost  "<<fabs(F(x,n)-f(x))<<endl;
    }
}
Использовать нужно интерполяционную формулу Бесселя
При n=5 прога не тянет, не знаю почему((
при 2, 3, 4 работает
Ребят помогите пожалуйста парюсь с этой задачей уже какую неделю((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru