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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
#1

Функция Грина - C++

19.05.2013, 22:14. Просмотров 453. Ответов 11
Метки нет (Все метки)

Всем привет! Возникла необходимость в функции вернуть значение функции Грина. Сама функция выглядит так
http://www.cyberforum.ru/cgi-bin/latex.cgi?G(x,y) = \frac{1}{4\pi \left|x - y \right|} - \frac{1}{4\pi \left|x - y* \right|}
x = (x1, x2, x3), y = (y1, y2, y3), y* = (y1, y2, -y3).
Как эту формулу перевести в программный вид? Все мозги сломал уже.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 22:14     Функция Грина
Посмотрите здесь:

Opencv. Применение дискретной теоремы Грина к изображению - C++
Пытаюсь реализовать алгоритм поиска ядра отпечатка пальца по этой статье. По формуле \begin{bmatrix}J_x(x,y)\\...

Функция Грина - Электричество и магнетизм
Кто-нибудь помнит функцию Грина (нестационарный случай(зависит от времени)), зависящую от x и t (координата по оси икс и время). Выводить...

Вычислить по формуле Грина - Математический анализ
Поможете решить? последний пример остался, не знаю как решить)

Метод функции Грина - Дифференциальные уравнения
уважаемые форумчане!очень прошу вас о помощи!Не понимаю, как решить дифференциальное уравнение методом функции Грина. Проболела эту тему,...

Модифицированная формула Грина. - Pascal
Замкнутый контур располагается между графиком функции Y = (1-X)| X+1 | в диапазоне Х = -2 --+ 2, определить его площадь и координаты ценра...

Модифиированная формула Грина - Pascal
Создать программу для вычисления при помощи модифицированной формулы Грина. Задана функция F(x) = x- sin(x) на интервале (-2Пи ;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.05.2013, 22:24     Функция Грина #2
}{@k, а в чем проблема? Модуль вектора посчитать?
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
19.05.2013, 22:42  [ТС]     Функция Грина #3
Tulosba, проблема не в том, чтобы модуль вектора посчитать, а в том чтобы вернуть значение этой функции.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.05.2013, 22:45     Функция Грина #4
}{@k, хм-м. Ну приведите код, который у Вас есть. Потому что умножить, вычесть, поделить, а потом сделать return проблем вызвать не должно. Особенно, если Вы знаете как посчитать модуль вектора (как мне казалось самая сложная здесь процедура).
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
19.05.2013, 22:57     Функция Грина #5
Цитата Сообщение от }{@k Посмотреть сообщение
проблема не в том, чтобы модуль вектора посчитать, а в том чтобы вернуть значение этой функции.
? На вскидку по формуле
C++
1
2
3
4
double grinn(vector_t const& x, vector_t const& y) {
   return ( 1. / ( 4. * pi * abs( x - y ) ) )
        - ( 1. / ( 4. * pi * abs( vector_t( x.x() - y.x(), x.y() - y.y(), x.z() + y.z() ) ) ) );
}
Проблема решена?
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
19.05.2013, 23:02  [ТС]     Функция Грина #6
Tulosba, видно я тогда совсем не то делаю...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double Grin(double* x, double* y){
    double* yy;
           double* xy, *xyy;
    yy[2] = -y[2];
           
double t, z;
    for(int i = 0; i < 3; i++){
        t += pow(xy[i], 2);
        z += pow(xyy[i], 2);
    }
double mod1 = sqrt(t);
double mod2 = sqrt(z);
 
    return pow(4 * M_PI * mod1, -1) - pow(4 * M_PI * mod2, -1);
    
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.05.2013, 23:09     Функция Грина #7
}{@k, в строках 3-4 не инициализированные указатели. Дальше может быть всё что угодно, когда начнете по ним читать.
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
19.05.2013, 23:09  [ТС]     Функция Грина #8
gray_fox, я подключил
C++
1
#include <vector>
но компилятор ругается на vector_t "Это объявление не содержит класс хранения или спецификатор типа"
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
19.05.2013, 23:12     Функция Грина #9
}{@k, ну я подумал вы вектора в своих структурах\классах храните, так обычно делают, что-нибудь вроде
C++
1
2
3
4
struct vector_t {
 
   double x, y, z;
};
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
19.05.2013, 23:30  [ТС]     Функция Грина #10
Tulosba, да, вы правы ошибочку выдавал. Явно указал размеры массивов, получил значение. Но в принципе я правильно формулу запрограммировал?


gray_fox, нет, я векторы не использовал, по старинке массивами пользуюсь.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.05.2013, 23:36     Функция Грина #11
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
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
 
const int size = 3;
 
double vmod( double* v )
{
    double res = 0;
    for( int i = 0; i<size; ++i )
    {
        res += v[i]*v[i];
    }
    return sqrt( res );
}
 
void vsub( double* r, double* a, double* b )
{
    for( int i=0; i<size; ++i)
    {
        r[i] = a[i] - b[i];
    }
}
 
double grin( double* x, double* y, double* ys )
{
    double temp[size];
 
    vsub( temp, x, y );
    double a1 = 1/vmod( temp );
 
    vsub( temp, x, ys );
    double a2 = 1/vmod( temp );
 
    return (a1-a2)/(4*M_PI);
}
 
int main()
{
    double x[size] = { 1,2,3 };
    double y[size] = { 4,5,6 };
    double ys[size] = { y[0], y[1], -y[2] };
 
    std::cout << grin( x, y, ys ) << std::endl;
 
    std::system( "pause" );
 
    return 0;
}
Вроде бы не налагал.

Добавлено через 1 минуту
Цитата Сообщение от }{@k Посмотреть сообщение
Но в принципе я правильно формулу запрограммировал?
Похоже на правду. Но Вы еще забыли t,z нулями инициализировать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 23:39     Функция Грина
Еще ссылки по теме:

Вычислить по формуле Грина - Математический анализ
Ребят, помогите решить пример. Преобразовать данный криволинейный интеграл к двойному интегралу с помощью формулы Грина Применяя...

Криволинейный интеграл и формула Грина - Математический анализ
Задание: Показать, что \oint_{}^{}(xcos(\bar{n},x)+ysin(\bar{n},x))dl , где (\bar{n},x) - угол между внешней нормалью к линии и...

Применяя формулу Грина,вычислить криволинейный интеграл - Математический анализ

Применяя формулу Грина, вычислить контурный интеграл - Математический анализ
8) Применяя формулу Грина вычислить: I=\oint_{C}^{} 2(x^2+y^2)dx+(x+y^2)dy , где С - пробегаемый в положительном направлении контур...


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

Или воспользуйтесь поиском по форуму:
nullpointer
46 / 46 / 5
Регистрация: 30.03.2009
Сообщений: 521
19.05.2013, 23:39  [ТС]     Функция Грина #12
Tulosba, спасибо за помощь.
Я их после того как ответ отправил инициализировал
Yandex
Объявления
19.05.2013, 23:39     Функция Грина
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru