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

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

|
Цитата(V_G @ Jul 31 2012, 16:32)  Пока не понял сермяжной необходимости точного подсчета линий. Границы (минимум и максимум) должны задаваться круглыми числами (т.е. степенями десятки), иначе график будет плохочитаемым. Или это не для графиков? Нет, не для графиков. Выше писал, что для написания ПО. Будет некий "ползунок" с фиксированным числом степеней свободы (искомое числ точек интервала). Каждое его деление будет соответствовать точке внутри диапазона частот в логарифмическом масштабе. Немного сумбурно описал, жара наверное влияет)
|
|
|
|
|
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
|
|
|
|
|
Aug 1 2012, 07:48
|
Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 17-06-10
Из: Киев
Пользователь №: 57 986

|
Немного раскрою предыдущий пост.
Друзья - давайте решать такие задачки как в школе, а не как в аспирантуре. Ну зачем вы вычисляете логарифмы ? Здесь у нас "палочки", значит считаем именно палочки, а не степени чисел. Итак, из рисунка видно, что расстояние между 10^1 и 10^2, а также между другими целыми степенями - есть 9 палочек. А циферки в числах 7 и 2 (как у автора) - это количество дополнительных палочек в чистом виде.
Если мы наше 1е число (меньшее) представим как А1*10^n1, а второе число (большее) как А2*10^n2, тогда общее количество палочек между ними есть: (A2+n2*9)-(А1+n1*9)+1 или: (2+6*9)-(7+3*9)+1 = 23. Единичка в формуле добавилась т.к. цифры четко стоят на палочках (здесь нужно более четкое понимание задания, может у ТС будут и другие исходные данные).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|