2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 01:15 


07/08/12
15
Xaositect в сообщении #603968 писал(а):
Правильно, только в таком случае либо пользуйтесь ей только сначала для перевода пределов интегрирования, либо к dx тоже применяйте эту функцию.

Ах вот где собака зарыта, спасибо :-) помогло, заодно узнал как передаются указатели на функции.
Возникает вопрос, а какую точность даёт данный метод

Составил программу, которая считает интегралом и всеми остальными методами. Данные расходятся

код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include "math.h"
#include <stdio.h>
#define a 149597887.5 //большая полуось
#define e 0.016710219 //Эксцентринитет
#define b (a*sqrt(1-square(e)))
#define c (4*square(b)/square(a))

double GtoRs(double val)
//функция пересчёта градусов в радианы
{
        return val*M_PI/180;
}

double square(double val){
        // возведение в квадрат
        return val*val;
}

double Ellipse(double x){      
        //подинтегральная функция
        // вот формула http://upload.wikimedia.org/wikipedia/r ... 963f66.png
        return a*sqrt(1-square(e)*square(cos(GtoRs(x))));
}

double Ellipse2(double x){     
        //подинтегральная функция
        // вот формула http://upload.wikimedia.org/wikipedia/r ... 963f66.png
        return c*(square(x)/(1-square(x)));
}


double Integral(double right,double left,int pointcount, double(*func)(double) ){
        if(right<left){
                //идём от меньшего к большему
                double temp = right;
                right = left;
                left = temp;
        }

        double dx = (right -left)/pointcount;// вычисляем шаг(ширину нижнего края прямоугольника)
        double Summ=0;// изначально площать нулевая.
       
        while(left<right){
                Summ = Summ + dx*func(left);// умножаю длинну нижнего края прямоугольника на его высоту для получения площади.
                left+=dx;
        }
       
        return Summ;
}


double formula1(){
        //http://upload.wikimedia.org/wikipedia/ru/math/a/3/4/a3407b6378582dbf9ab44aba5955dfaa.png
        return 4*(M_PI*a*b + square(a-b))/(a+b);
}



double formula2(){
        //http://upload.wikimedia.org/wikipedia/ru/math/2/1/0/2107d4515d94590fd48be322a32efd2a.png
        double x = log(2)/log(M_PI/2);
       
        return 4*pow((pow(a,x)+pow(b,x)),1/x);
}

double formula3(){
        //http://upload.wikimedia.org/wikipedia/ru/math/3/f/d/3fd05349758aa3694cb822ce17ef7af0.png
        return M_PI*(3*(a+b)-sqrt((3*a+b)*(a+3*b)));
}


int main(){
double res = Integral(GtoRs(0),GtoRs(360),3600,&Ellipse);//интеграл в полярных координатах, в качестве парпметра - угол, от 0 до 360. точность до 1 градуса
printf("with integral: %f\n",res);
res = formula1();
printf("first formula eps <=> 063%% : %f\n",res);
res = formula2();
printf("second formula eps < then in first formula 2 times : %f\n",res);
res = formula3();
printf("Ramanujan formula: %f\n",res);
return 1 ;
}
 


Вывод:
  1. with integral: 940081593.800145 
  2. first formula eps <=> 063% : 939885629.415544 
  3. second formula eps < then in first formula 2 times : 939885629.389084 
  4. Ramanujan formula: 939885629.309072 
  5.  
  6.  
  7. ------------------ 
  8. (program exited with code: 1) 
  9. Press return to continue 


gris в сообщении #603892 писал(а):
Брякнуло в голову, а чуете попенцией. Парадокс, однако.

Вполне достаточное приближение для длины дуги Земли даёт формула: $L=30\cdot (t_2-t_1)$. Время в секундах, длина в километрах. Я сам всегда так считаю и репа не воспаляется.


Не сильно понял ваш метод. Что там на счёт времени в секундах? Какие мне задавать t1 и t2?

-- 08.08.2012, 00:18 --

Shtorm в сообщении #603970 писал(а):
Xaositect в сообщении #603968 писал(а):
Правильно, только в таком случае либо пользуйтесь ей только сначала для перевода пределов интегрирования, либо к dx тоже применяйте эту функцию.


Да. Нужно тогда вместо $dx$ писать $d(\frac {\pi x}{180})$, а перед интегралом тогда появится дополнительный множитель $\frac {180}{\pi}$

Тут что-то вы намудрили. Я решил просто сходу давать left и right в радианах и dx тогда тоже вычисляется в радианах. А добавление перед Интегралом $d(\frac {\pi x}{180})$ всё возвращает на круги своя.

 Профиль  
                  
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 01:38 
Аватара пользователя


14/02/10
4956
vsrmis в сообщении #603977 писал(а):
Тут что-то вы намудрили. Я решил просто сходу давать left и right в радианах и dx тогда тоже вычисляется в радианах. А добавление перед Интегралом $d(\frac {\pi x}{180})$ всё возвращает на круги своя.


Если брать пределы интегрирования в радианах и переменную x - в радианах - то ничего добавлять нигде не надо. А вот если пределы интегрирования в градусах, тогда переменная x тоже в градусах, но под интегралом переменные должны быть в радианах. Значит Вы обязаны переменные перевести в радианы. То есть домножить на $\pi$ и поделить на 180. Что Вы и сделали. Но тогда меняется сама функция подынтегральная. Это равносильно замене переменной. Значит нужно переменную изменить и под дифференциалом. А чтоб выражение осталось неизменным - нужно поставить коэффициент перед интегралом.

 Профиль  
                  
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 07:37 
Заслуженный участник
Аватара пользователя


13/08/08
14495
vsrmis, В году 31 558 150,0224 секунд. Средняя скорость Земли 29,783 км/сек.
Умножаем
Получаем длину орбиты 939 896 382,1171392 км.
( :-) )

 Профиль  
                  
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 08:44 


07/08/12
15
gris в сообщении #603999 писал(а):
vsrmis, В году 31 558 150,0224 секунд. Средняя скорость Земли 29,783 км/сек.
Умножаем
Получаем длину орбиты 939 896 382,1171392 км.
( :-) )

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

 Профиль  
                  
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 08:57 
Заслуженный участник
Аватара пользователя


13/08/08
14495
А кто будет извлекать корень из $(1+y'^2)$?

А количество секунд в году посчитать проще простого. Я же нашёл длину орбиты. Разделите её на среднюю скорость и получите искомое.

 Профиль  
                  
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 09:10 
Аватара пользователя


14/02/10
4956
vsrmis в сообщении #604010 писал(а):
А ещё разобраться почему не правильный интеграл на листочке ( даже с учётом правильного вычитания дробей)


Выложите картинку с листочка в нормальном размере с исправленной ошибкой. Тогда разберёмся.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group