|
Подсчитать число декад логарифмической величины, Задачка по математике |
|
|
|
Jul 31 2012, 11:31
|
Частый гость
 
Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764

|
Всем привет. Есть некоторый диапазон (частот) от 7 кГц до 2 МГц [7*10^3, 2*10^6]. В логарифмическом масштабе выглядит так
Никак не придумаю, как аналитически сосчитать число отсчётов логарифмической шкалы, укладывающихся в диапазоне. По-простому число вертикальных линий пересекающих отрезок на графике. В конкретном случае 23. Вроде-бы задача школьная, но что-то никик не получается смекнуть.
|
|
|
|
|
 |
Ответов
|
Jul 31 2012, 11:55
|
Частый гость
 
Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764

|
На самом деле число этих самых линий нужно найти. Просто-напросто не знаю как они обзываются. "Декада" знаю, "октава" - знаю  Интервал [7 кГц, 2 МГц]. В логарифмическом масштабе (в кГц): 7, 8, 9, 10, 20, 30, 40, 50, .... 800, 900, 1000, 2000. Итого 23 точки, включая границы диапазона. Уже десятичные логарифмы так и эдак крутил, аналитически получить не смог. Нужно для написания ПО. Можно конечно в циклах считать порядок величины и пробегать по всему диапазону, но хочется аналитичкси, по-красивее  Цитата(V_G @ Jul 31 2012, 15:44)  Число декад - это разность десятичных логарифмов минимума и максимума. Умножить его на число отсчетов внутри декады. Все. Это первым делом в голову пришло. 9 * (lg(Fmax) - lg(Fmin)) + 1 = 9 * (lg(Fmax/Fmin) + 1. Для приведённого выше диапазона 7'000..2'000'000 выходит ~23,1. Похоже на правду. Но, например, 8'000..1'000'000 (должна быть 21 точка), по формуле выходит ~19,9. Поэтому эту тему и создал
|
|
|
|
|
Jul 31 2012, 12:56
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(Sergey_Aleksandrovi4 @ Jul 31 2012, 15:55)  Интервал [7 кГц, 2 МГц]. В логарифмическом масштабе (в кГц): 7, 8, 9, 10, 20, 30, 40, 50, .... 800, 900, 1000, 2000. Итого 23 точки, включая границы диапазона. На моих пальцах получилось 25 (если 10 точек на декаду). Цитата 9 * (lg(Fmax) - lg(Fmin)) + 1 = 9 * (lg(Fmax/Fmin) + 1. Для приведённого выше диапазона 7'000..2'000'000 выходит ~23,1. int(10*log10(2000000/7000))+1 = 25 Цитата Похоже на правду. Но, например, 8'000..1'000'000 (должна быть 21 точка), по формуле выходит ~19,9. int(10*log10(1000000/8000))+1 = 21 В общем виде, естесно int(N*log10(Fmax/Fmin))+1, N - число точек на декаду
|
|
|
|
|
Jul 31 2012, 13:39
|
Частый гость
 
Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764

|
Цитата(xemul @ Jul 31 2012, 17:33)  Для исходной задачи: int(9*log10(Fmax/Fmin))+1 Не-не, в сообщении №4 я уже показал, что эта формула даёт неверный результат. Видимо, ViKo был прав, аналитически вычислить не выйдет. Сделал через циклы: неказисто с виду, но работает как часы.
|
|
|
|
|
Jul 31 2012, 14:59
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(Sergey_Aleksandrovi4 @ Jul 31 2012, 22:39)  ...аналитически вычислить не выйдет. Представим Fmin и Fmax в виде: Fmin = A*10^X; Fmax = B*10^Y; где A,B - старшая цифра (1...9), X,Y - количество нулей (целое число). Тогда число декад = 9*(Y-X)+B-A+1 Пример на Питоне2.7 Код fmin=input("Enter Fmin: ") fmax=input("Enter Fmax: ")
if fmax<fmin: fmin,fmax=fmax,fmin
x=len(str(fmin))-1 y=len(str(fmax))-1 a=int(fmin/pow(10,x)) b=int(fmax/pow(10,y)) z=9*(y-x)+b-a+1 print z
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|