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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Эцп Эль-Гамаля.Генерация параметров http://www.cyberforum.ru/cpp-beginners/thread581939.html
Даже не знаю в какой раздел писать. По описанию метода параметрами являются простое число p и порождающий элемент мультипликативной группы Zp* -- g. Простое число p можно получить например...
C++ Создать двоичный файл и записать в него n целых чисел Помогите прошу кто может с прогой Создать двоичный файл и записать в него n целых чисел. Из файла создать массив, элементы которого являются числами-палиндромами и расположены после макси-... http://www.cyberforum.ru/cpp-beginners/thread581937.html
C++ Ошибка в коде программы
Заданаие такое: Дано натуральное число n (n<9999). Определить, является ли это число палиндромом (перевертышем) с учетом четырех цифр (например 2222, 0440, 6116). Верно ли что все 4 цифры числа...
C++ оконное приложение в borland 5. выделение слова в строке
В введённой строке нужно выделить отдельно стоящее слово one. помогите пожалуйста...:)
C++ как написать эту программу? заранее спасибо http://www.cyberforum.ru/cpp-beginners/thread581916.html
Класс: Время Данные класса: Часы, минуты, секунды Методы: Вывод времени и части суток (до 6:00 – ночь, ...
C++ фильтр Гаусса надо написать фильтр гаусса... после попыток его написать изображение почему то затемняется... хотя вроде по алгоритмам верным... вот наработка.. double s=0; double r=1.398; double r2=2*r*r;... подробнее

Показать сообщение отдельно
LEQADA
Мастер кустарных методов
227 / 222 / 9
Регистрация: 09.11.2010
Сообщений: 680

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

21.05.2012, 22:27. Просмотров 1342. Ответов 0
Метки (Все метки)

Доброго времени суток! Метод описан во вложении. Написал программу, но она зацикливается. Не могу понять в чём дело. Помогите пожалуйста разобраться.
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);} //Производная функции
0
Миниатюры
Метод кубической интерполяции  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru