Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
Мастер кустарных методов
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
1

Метод кубической интерполяции

21.05.2012, 22:27. Показов 3603. Ответов 3
Метки нет (Все метки)

Доброго времени суток! Метод описан во вложении. Написал программу, но она зацикливается. Не могу понять в чём дело. Помогите пожалуйста разобраться.
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
#include <iostream>
#include <cmath>
using namespace std;
void Coeff_11(double a, double b, double *f_x, double *c, double *d);
void kub (double a, double b, double *f_x, double *c, double *d, double *z);
double F(double x);
double F_D(double x);
 
int main () {
    double a=0,b=5;// Начало и конец отрезка
    double f_x[2], c[2], d[2], z[2];  // f_x - значение функции на границах отрезка; c - коэффициенты; d - значение производной на концах отрезка; z - экстремумы построенного многочлена
    kub (a,b,f_x,c,d,z); 
}
 
void kub (double a, double b, double *f_x, double *c, double *d, double *z){
    double min;
    f_x[0] = F(a); f_x[1] = F(b); // Заполняю массивы
    d[0] = F_D(a); d[1] = F_D(b);
    if (F_D(a)<=0 && F_D(b)>=0){ // Проверяю условие применимости метода
        Coeff_11(a,b,f_x,c,d); // Вызываю функцию вычисления 
        z[0] = (-c[2] + sqrt (c[2]*c[2] - 3*c[3]*c[1]))/(3*c[3]); // Вычисляю нули производной 
        z[1] = (-c[2] - sqrt (c[2]*c[2] - 3*c[3]*c[1]))/(3*c[3]);
        if (z[0]>=a && z[0]<=b) min = z[0]; // Если нуль входит в наш отрезок, то он является минимумом
        else min = z[1];
        if (fabs(F_D(min))<0.001) {cout<<(a + b)/2<<endl; return;} //Если значение производной исходной функции в точке найденного минимума достаточно мало, то мы нашли отрезок, в котором находится минимум исходной функции
        if (F_D(min)>0) {kub (a,min,f_x,c,d,z);} // Если значение производной исходной функции в точке найденного минимума больше нуля, то отрезком локализации минимума является отрезок (a,min)
        if (F_D(min)<0) {kub (min,b,f_x,c,d,z);} // Если значение производной исходной функции в точке найденного минимума меньше нуля, то отрезком локализации минимума является отрезок (min,b)
    }
    else cout<<"ERROR"; //Если условие применимости метода не выполняется, то вывести на экран ERROR
}
 
void Coeff_11(double a, double b, double *f_x, double *c, double *d)
{
    double tmp1, tmp2;
    //Тут считаются коэффициенты
    c[0] = f_x[0];
    c[1] = d[0];
    tmp2 = b - a;
    tmp1 = (f_x[1] - f_x[0]) / tmp2;
    c[2] = (3 * tmp1 - 2 * d[0] - d[1]) / tmp2;
    tmp2 *= tmp2;
    c[3] = (d[0] + d[1] - 2 * tmp1) / tmp2;
}
 
double F(double x) {return 3*x*x*x*x*x*x + (x-3)*(x-3);} // Функция
double F_D(double x){return 2 * (9*x*x*x*x*x + x - 3);} //Производная функции
Миниатюры
Метод кубической интерполяции  
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2012, 22:27
Ответы с готовыми решениями:

Как задать криволинейный замкнутый контур по точкам методом кубической интерполяции?
В с++ я новичок, полазив по форумам, я нашел некотрые коды, но они либо не работают, либо выдают не...

Метод линейной интерполяции
Нужно решить уравнение sin(x)+log(x)=1 методом методом линейной интерполяции Помогите найти...

Метод однократной интерполяции (ошибка в реализации)
имеется схема алгоритма, метода однократной интерполяции. нужно реализовать ету схему используя...

Метод Кубической интерполяции зацикливается
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

3
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
05.04.2019, 20:51 2
Здравствуйте! Не подскажете ли вы как вы вычисляете коэффициенты С? Чем руководствуетесь?
0
Manowar
05.04.2019, 21:12
  #3

Не по теме:

shadow1337, 7 лет прошло однако. Он уж и сам поди не помнит.

0
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 17
05.04.2019, 21:16 4
Да, понимаю, но мало ли?)

Добавлено через 2 минуты
https://studfiles.net/preview/1467149/page:17/

Вот, нашел. Каким то образом выведены формулы, которые имеет этот человек. Правда понятия не имею, как они их получили
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2019, 21:16

реализация кубической интерполяции
Всем доброго времени суток! Возникла проблема с кубической интерполяцией (преобразуют матлабовский...

Вычислить значение функции посредством кубической сплайн-интерполяции
ничего не понимаю((( нужно набрать на кьюбейсике у меня вариант 20.набираю все по блок-схеме....

При расчетах кубической сплайн-интерполяции в одной из функций возникает ошибка
При расчетах кубической сплайн-интерполяции в одной из функций возникает ошибка, выделяется красным...

Метод с использованием кубической аппроксимации
Не могу найти примеры реализации данного метода. Может кто то встречал? поделитесь если не трудно....


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

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

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