Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
nullpointer
46 / 46 / 14
Регистрация: 30.03.2009
Сообщений: 523
#1

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

19.05.2013, 22:14. Просмотров 500. Ответов 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|}
http://www.cyberforum.ru/cpp-beginners/thread1711642.html
x = (x1, x2, x3), y = (y1, y2, y3), y* = (y1, y2, -y3).
Как эту формулу перевести в программный вид? Все мозги сломал уже.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 22:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция Грина (C++):

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба,...

Функция sqrt: существует более одного экземпляра. Функция перегруженная
#include <iostream> #include <math.h> #include <iomanip> using namespace...

Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()?
какую библиотеку надо подключать чтоб работала функция _getch() и функция...

Чистая виртуальная функция функция не имеет оператора переопределения
Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется...

11
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
19.05.2013, 22:24 #2
}{@k, а в чем проблема? Модуль вектора посчитать?
0
nullpointer
46 / 46 / 14
Регистрация: 30.03.2009
Сообщений: 523
19.05.2013, 22:42  [ТС] #3
Tulosba, проблема не в том, чтобы модуль вектора посчитать, а в том чтобы вернуть значение этой функции.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
19.05.2013, 22:45 #4
}{@k, хм-м. Ну приведите код, который у Вас есть. Потому что умножить, вычесть, поделить, а потом сделать return проблем вызвать не должно. Особенно, если Вы знаете как посчитать модуль вектора (как мне казалось самая сложная здесь процедура).
0
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 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() ) ) ) );
}
Проблема решена?
0
nullpointer
46 / 46 / 14
Регистрация: 30.03.2009
Сообщений: 523
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);
    
}
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
19.05.2013, 23:09 #7
}{@k, в строках 3-4 не инициализированные указатели. Дальше может быть всё что угодно, когда начнете по ним читать.
0
nullpointer
46 / 46 / 14
Регистрация: 30.03.2009
Сообщений: 523
19.05.2013, 23:09  [ТС] #8
gray_fox, я подключил
C++
1
#include <vector>
но компилятор ругается на vector_t "Это объявление не содержит класс хранения или спецификатор типа"
0
gray_fox
What a waste!
1552 / 1257 / 165
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
19.05.2013, 23:12 #9
}{@k, ну я подумал вы вектора в своих структурах\классах храните, так обычно делают, что-нибудь вроде
C++
1
2
3
4
struct vector_t {
 
   double x, y, z;
};
0
nullpointer
46 / 46 / 14
Регистрация: 30.03.2009
Сообщений: 523
19.05.2013, 23:30  [ТС] #10
Tulosba, да, вы правы ошибочку выдавал. Явно указал размеры массивов, получил значение. Но в принципе я правильно формулу запрограммировал?


gray_fox, нет, я векторы не использовал, по старинке массивами пользуюсь.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
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 нулями инициализировать.
1
nullpointer
46 / 46 / 14
Регистрация: 30.03.2009
Сообщений: 523
19.05.2013, 23:39  [ТС] #12
Tulosba, спасибо за помощь.
Я их после того как ответ отправил инициализировал
0
19.05.2013, 23:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 23:39
Привет! Вот еще темы с решениями:

что за функция такая strstr? или это не функция?
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите...

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
Write программу с использованием класса Вектор (не без помощи форумчанина), но...

Функция заполняющая массив и функция вывода массива
Напишите две функции. Первая функция заполняет массив, вторая функция выводит...

Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива
Есть программа #include &lt;iostream&gt; #include &lt;algorithm&gt; const int N = 5;...


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

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

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