Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 3
1

Аппроксимация с alglib

15.01.2015, 17:29. Показов 3585. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день. Решила поразвлечься с пакетом alglib и попыталась опробовать пример аппроксимации методом Левенберга-Марквардта с использованием градиента.

Что есть: пример в мануале, с которого всё слизано, свои данные для тренировки (просто массив из 31 числа, лежащих вдоль кривой Гаусса с небольшим разбросом, сигма=1, мю=0, прилагает в txt-файле) и пачка ошибок после реализации.

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
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <fstream.h>
#include <math.h>
#include <iomanip>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
//---------------------------------------------------------------------------
#include "interpolation.h"  
#include "stdafx.h"
#include "optimization.h"
 
using namespace alglib;
 
double x[31]={0};
double y[31]={0};
real_1d_array c="[1,0]";
 
double Get_Array() //здесь я читаю из файла свои данные, всё ок, работает
{
 
    char buf[1000]={0};
    FILE *tab;
 
 
    float num1;
    float num2;
 
    strcpy(buf,"D:\\pub\\Bagrova\\Proc_Fit\\sGauss.dat");
    tab=fopen(buf,"r");
 
    if (tab)
    {
        fgets(buf,1000,tab);
        for (int i=0; i <= 30; i++)
        {
            fscanf(tab,"%f%f\n", &num1,&num2);
            x[i]=num1;
            y[i]=num2;
        }
    fclose(tab);
    }
    else printf("Error open");
    printf("\tX\ty\n");
    for (int i=0; i <= 30; i++)
    {
        printf("%f\t%f\n",x[i],y[i]);
    }
    getche();
    return 1;
}
void  gauss_func(const real_1d_array &c, const real_1d_array &x, double &func, void *ptr)
{
    func=exp(0-pow(x[0]-c[1],2)/(2*pow(c[0],2)))/pow(2*M_PI,0.5); //c[0] - sigma, c[1] - mu
}
 
void gauss_grad(const real_1d_array &x, double &func, real_1d_array &grad, void *ptr)
{
    func=exp(0-pow(x[0]-c[1],2)/(2*pow(c[0],2)))/pow(2*M_PI,0.5);
    grad[0]=pow(x-c[1],2)*exp(0-pow(x[0]-c[1],2)/(2*pow(c[0],2)))/(pow(2*M_PI,0.5)*pow(c[0],4))-exp(0-pow(x[0]-c[1],2)/(2*pow(c[0],2)))/(pow(2*M_PI,0.5)*pow(c[0],2));
    grad[1]=(x-c[1])*exp(0-pow(x[0]-c[1],2)/(2*pow(c[0],2)))/(pow(2*M_PI,0.5)*pow(c[0],3));
 
}
 
int lsFit_FG()
{
    real_2d_array X1 = "[[-3],[-2.8],[-2.6],[-2.4],[-2.2],[-2],"
    "[-1.8],[-1.6],[-1.4],[-1.2],[-1],[-0.8],[-0.6],[-0.4],[-0.2],[0],[0.2],[0.4],"
    "[0.6],[0.8],[1],[1.2],[1.4],[1.6],[1.8],[2.0],[2.2],[2.4],[2.6],[2.8],[3]]";
    real_1d_array Y1;
 
    Y1.setcontent(31,y);
 
    double epsf = 0;
    double epsx = 0.000001;
    ae_int_t maxits = 0;
    ae_int_t info;
    lsfitstate state;
    lsfitreport rep;
 
    lsfitcreatefg(x, y, c, true, state);
    lsfitsetcond(state, epsf, epsx, maxits);
    alglib::lsfitfit(state, gauss_func, gauss_grad);
    lsfitresults(state, info, c, rep);
    printf("%d\n", int(info)); // EXPECTED: 2
    printf("%s\n", c.tostring(1).c_str()); 
 
    return 0;
}

Ошибки возникают следующие:
стр. 62 [C++ Error] UnitFIT.cpp(120): E2094 'operator-' not implemented in type 'real_1d_array' for arguments of type 'double'
стр. 63 [C++ Error] UnitFIT.cpp(121): E2094 'operator-' not implemented in type 'real_1d_array' for arguments of type 'double'
стр. 83 [C++ Error] UnitFIT.cpp(154): E2285 Could not find a match for 'lsfitcreatefg(double *,double *,real_1d_array,bool,lsfitstate)'
стр. 85 [C++ Error] UnitFIT.cpp(156): E2285 Could not find a match for 'lsfitfit(lsfitstate,void (*)(const real_1d_array &,const real_1d_array &,double &,void *),void (*)(const real_1d_array &,double &,real_1d_array &,void *))'

Пока что не понимаю, что с этим делать.
Вложения
Тип файла: txt sGauss.txt (415 байт, 6 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2015, 17:29
Ответы с готовыми решениями:

Alglib C++ Qt
Пытаюсь запустить простой пример по мануалу с официального сайта ...

ALGLIB. Интерполяция.
Здравствуйте! Необходимо проинтерполировать массив. Для такого дела подключил библиотеку ALGLIB. Я...

Работа с alglib
Здравствуйте. Пытаюсь начать работу с библиотекой alglib. Из поверхностного знакомства понял, что...

Установка ALGLIB
Пишу на с# Для диплома необходима работа с матрицами. А именно SVD преобразование. Пытался...

4
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 3
15.01.2015, 18:58  [ТС] 2
Последняя ошибка ликвидирована, это была просто невнимательность.
C++Выделить код
1
void gauss_grad(const real_1d_array &c,const real_1d_array &x, double &func, real_1d_array &grad, void *ptr)
Остальные пока висят.
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
15.01.2015, 19:39 3
похоже на ошибки компоновки - значит либо не подключили что-то (какую-то библиотеку/хедер), либо неправильно вызываете функции
0
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 3
15.01.2015, 19:46  [ТС] 4
Сейчас висят только первые две ошибки. Слизано практически в точности с примера в мануале (http://alglib.sources.ru/trans... fit_d_nlfg), а все cpp-файлы библиотеки добавлены в проект.
И да, у меня Borland 2006.
0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
15.01.2015, 19:52 5
наверное тут опечатка x-c[1], тогда
0
15.01.2015, 19:52
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2015, 19:52
Помогаю со студенческими работами здесь

ALGLIB собственные векторы
Здравствуйте, может, кто пользовался библиотекой ALGLIB, никак не могу понять, как собственные...

Работа с библиотекой AlgLib
Всем доброе время суток. Подскажите пожалуйста, можно ли использовать библиотеку ALGLIB в...

AlgLib: сложение матриц
Здравствуй, добрый человек! Просматривая документацию по AlgLib делаю вывод, что сложение и...

Специальные функции в Alglib
Здравствуйте, я начинающий программист в C++. Я пытаюсь написать программу, которая в вычислениях...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как запретить подсветку выделенного текста с помощью CSS
InfoMaster 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения. Выделение текста может. . .
Как выполнить другую программу или системную команду из Python
InfoMaster 20.01.2025
Python предоставляет мощные инструменты для выполнения системных команд и управления внешними процессами, что делает его идеальным выбором для автоматизации различных задач системного. . .
Как узнать директорию bash-скрипта из самого bash-скрипта
InfoMaster 20.01.2025
При разработке bash-скриптов одной из важных задач является определение директории, в которой находится исполняемый скрипт. Это критически важно для корректной работы с файлами, загрузки конфигураций. . .
В чем разница между let и var в JavaScript
InfoMaster 20.01.2025
JavaScript прошел длинный путь эволюции с момента своего создания в 1995 году. Одним из важнейших аспектов развития языка стало совершенствование механизмов объявления и управления переменными. . . .
Эффективная работа со строками в Go
InfoMaster 20.01.2025
Язык программирования Go предлагает уникальный подход к работе со строками, который существенно отличается от многих других языков программирования. В Go строки представляют собой неизменяемые. . .
Как проверить, что отображение (map) содержит ключ в Go
InfoMaster 20.01.2025
Отображения (maps) в языке программирования Go представляют собой мощные структуры данных, которые позволяют хранить пары ключ-значение и обеспечивают быстрый доступ к данным по уникальным. . .
Как организовать домашнее хранилище фильмов с общим доступом для всей семьи
InfoMaster 20.01.2025
Преимущества домашнего медиасервера В современном мире, где цифровой контент стал неотъемлемой частью нашей жизни, организация домашнего медиасервера становится все более актуальной задачей. . . .
Перспективы развития жестких дисков: есть ли у них будущее?
InfoMaster 20.01.2025
История и эволюция жестких дисков История развития жестких дисков начинается в 1956 году, когда компания IBM представила первое устройство для хранения данных на магнитных пластинах - IBM 350. . .
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru