Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680

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

21.05.2012, 22:27. Показов 4453. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.05.2012, 22:27
Ответы с готовыми решениями:

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

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

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

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

Не по теме:

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

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

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

Вот, нашел. Каким то образом выведены формулы, которые имеет этот человек. Правда понятия не имею, как они их получили
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2019, 21:16
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru