вопрос между физикой и программированием

Аватар пользователя
laplas
Сообщений: 1927
Зарегистрирован: 18 окт 2009, 21:00

вопрос между физикой и программированием

Сообщение laplas » 01 фев 2012, 19:49

Здравствуйте!

дело такое. написал код для расчета интеграла перекрывания орбиталей

Код: Выбрать все

#include "stdafx.h"
#include <cmath>
#include <windows.h>
#include <iostream>

using namespace std;

double f(double x, double y, double z,int m)
 { //Подынтегральная функция
 double a = 0.5292;
 double phi = 2*3.14/(3*m);
 double dy = 1.42;
 double dx = 0.71;
 return (z*z*cos(phi/2)*cos(phi/2)-z*dy*sin(phi)+(dy*dy-y*y)*sin(phi/2)*sin(phi/2))*exp(-1/(2*a)*(sqrt((x+dx)*(x+dx)+(y+dy)*(y+dy)+z*z)+sqrt((x-dx)*(x-dx)+(y-dy)*(y-dy)+z*z)));
 }

double rectangle_integrate(double a, double b, int n, double (*f)(double,double,double,int) )
 {
 long double result, h;
 int i,j,k,m;
 cin >>m;
 h = (b-a)/n; //Шаг сетки
 result = 0.0;

 for(i=1; i <= n; i++)
 {
 for (j=1; j<=n; j++)
 {
 for (k=1; k<=n; k++)
 {
 result += f( a + h * (i - 0.5), a + h * (j - 0.5),a + h * (k - 0.5), m ); //Вычисляем в средней точке и добавляем в сумму
 }
 }
 }
 result *= h*h*h/(32*3.14*pow(a,5));

 return result;
 }


int _tmain(int argc, _TCHAR* argv[])
{
 double integral;
 integral=rectangle_integrate(-1,1,100,f);
 printf("The value of the integral is: %lf \n", integral);
 system("pause");
 return 0;
}


проблема вот в чем.
научник сказал что пределы подбирать самостоятельно такие, чтобы экспонента с отрицательным показателем убивалась.
но вот непонятно. характерные размеры это расстояние между соседними атомами графита. то есть 1,42 ангстрем. в рассчетах также используется первый боровский радиус.
я вот пытаюсь считать все в ангстремах, а результат получается отрицательным...это же не хорошо. в коде вроде нигде не напортачил
посоветуйте что нибудь..

спасибо)
Последний раз редактировалось laplas 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
homosapiens
Сообщений: 8400
Зарегистрирован: 16 июн 2008, 10:02

вопрос между физикой и программированием

Сообщение homosapiens » 01 фев 2012, 19:53

меня глючит или ректангл_интеграте всегда ноль возвращает?
Последний раз редактировалось homosapiens 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
laplas
Сообщений: 1927
Зарегистрирован: 18 окт 2009, 21:00

вопрос между физикой и программированием

Сообщение laplas » 01 фев 2012, 19:56

homosapiens писал(а):Source of the post
меня глючит или ректангл_интеграте всегда ноль возвращает?


почему?
она возвращет result
Последний раз редактировалось laplas 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Dragon27
Сообщений: 4395
Зарегистрирован: 10 фев 2010, 21:00

вопрос между физикой и программированием

Сообщение Dragon27 » 01 фев 2012, 20:05

Так как мне лично лень продумывать код, делайте как и все программисты - отлаживайте, следите за памятью, проверяйте правильность работы по кускам и т. д.
Последний раз редактировалось Dragon27 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
homosapiens
Сообщений: 8400
Зарегистрирован: 16 июн 2008, 10:02

вопрос между физикой и программированием

Сообщение homosapiens » 01 фев 2012, 20:05

А, да, виноват. Смотрим дальше, вы подставляете а=-1.
Pow(-1, 5)=-1
Может, в этом причина?
Обычно в таких случаях выводят промежуточные результаты и смотрят. В вашем случае, я бы вам посоветовал cout<<result<<endl во внутреннем for ректангл_интеграте.
Последний раз редактировалось homosapiens 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
laplas
Сообщений: 1927
Зарегистрирован: 18 окт 2009, 21:00

вопрос между физикой и программированием

Сообщение laplas » 01 фев 2012, 20:10

Homo Sapiens, виноват... переменные одинаково обозвал.

а что скажите по поводу системы измерений?
как быть с ангстремами/метрами?
Последний раз редактировалось laplas 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
homosapiens
Сообщений: 8400
Зарегистрирован: 16 июн 2008, 10:02

вопрос между физикой и программированием

Сообщение homosapiens » 01 фев 2012, 20:16

проблема с отрицательным числом решилась? Должна решиться, вы а отрицательное подставляете и возводите в пятую степень.
По поводу ангстремов - числа считайте в ангстремах, а если вам нужен результат в метрах - просто умножьте ангстремы на сответствующее 0.0...1 в самом конце - конечные ангстремы. Только так, иначе в ходе действий с маленькими double рискуете нарваться на машинный ноль.
Последний раз редактировалось homosapiens 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

СергейП
Сообщений: 4145
Зарегистрирован: 17 июл 2009, 21:00

вопрос между физикой и программированием

Сообщение СергейП » 01 фев 2012, 20:19

Тут ещё такой вопрос от чайника

Видимо 3.14 это пи такое, но ежели это пи, то нафига там даблы ставить, особенно лонг. Всего 2 цифирьки верных выходит.
Последний раз редактировалось СергейП 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
laplas
Сообщений: 1927
Зарегистрирован: 18 окт 2009, 21:00

вопрос между физикой и программированием

Сообщение laplas » 01 фев 2012, 20:20

Homo Sapiens, да, решилась) спасибо.

а в результате вычислений получается энергия. то есть Дж или эВ.

СергейП, спасибо. как то я на эту тему не задумался. щас исправлю
Последний раз редактировалось laplas 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
homosapiens
Сообщений: 8400
Зарегистрирован: 16 июн 2008, 10:02

вопрос между физикой и программированием

Сообщение homosapiens » 01 фев 2012, 20:21

СергейП, вот правильное замечание.
Последний раз редактировалось homosapiens 28 ноя 2019, 17:33, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 7 гостей