2014 dxdy logo

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

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




На страницу Пред.  1, 2
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 01: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 
Аватара пользователя
vsrmis в сообщении #603977 писал(а):
Тут что-то вы намудрили. Я решил просто сходу давать left и right в радианах и dx тогда тоже вычисляется в радианах. А добавление перед Интегралом $d(\frac {\pi x}{180})$ всё возвращает на круги своя.


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

 
 
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 07:37 
Аватара пользователя
vsrmis, В году 31 558 150,0224 секунд. Средняя скорость Земли 29,783 км/сек.
Умножаем
Получаем длину орбиты 939 896 382,1171392 км.
( :-) )

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

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

 
 
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 08:57 
Аватара пользователя
А кто будет извлекать корень из $(1+y'^2)$?

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

 
 
 
 Re: Вычисление длинны дуги Эллипса
Сообщение08.08.2012, 09:10 
Аватара пользователя
vsrmis в сообщении #604010 писал(а):
А ещё разобраться почему не правильный интеграл на листочке ( даже с учётом правильного вычитания дробей)


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

 
 
 [ Сообщений: 21 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group