Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 2
Регистрация: 14.07.2009
Сообщений: 39
1

Типы данных в Matlab

16.09.2010, 12:36. Показов 8996. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,

пишу программу в Matlab, которая активно использует свертки методом overlap and add. Проблема вся в том, что нужно свернуть последовательность из 2*10^8 с последовательностью 5*10^6. За основу был взят алгоритм fftfilt и слегка подрихтован под свои задачи. Но все равно остается одна большая проблема - слишком долго выполняется и слишком много памяти требуется. Я пробовал перевести данные в формат int8, но светрка, написанная через преобразование Фурье, напрочь отказывается считать это преобразование в int8.

Тогда я попытался хотя бы понять как правильно работают типы данных в Матлабе и будет ли быстрее работать с интом, нежели с родным даблом. Запускал вот этот скрипт:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
y = 0;
x = 0;
 
for h=1:20
 
    N = 1000*h;
 
    a = randint(1,N,[0, 10]);
    c = randint(1,N,[0, 10]);
    aa = int8(a);
    cc = int8(c);
 
    b = rand(1,N);
    bb = double(b);
    e = rand(1,N).*10;
    ee = double(e);
 
    sumint = 0;
    sumint = sumint
    sumfloat = 0;
    timeintsum = 0;
    timefloatsum = 0;
 
    for i=1:N
        tic
            sumint = sumint + aa(i)*cc(i);
        timeint = toc;
        timeintsum = timeintsum + timeint;
    sumint = sumint
       
        tic
            sumfloat = sumfloat + bb(i)*ee(i);
        timefloat = toc;
        timefloatsum = timefloatsum + timefloat;
    end;
 
    y = [y timeintsum];
    x = [x timefloatsum];
   
end;
 
figure
hold on;
plot(1:length(y),y,'r');
plot(1:length(x),x,'b');
grid;
Увы, результаты, мягко сказать шокировали - во-первых, так просто оно не работает, и sumint = sumint + aa(i)*cc(i); не преобразует автоматически инт8 в инт16\32. Поэтому, меняем ее на sumint = int32(sumint) + int32(aa(i))*int32(cc(i));

Но и это дает проблемы - в десять раз длиннее вычисления :\ в чем подвох? В переводе типов? возможно ли уменьшить количество памяти и сделать программу быстрее, если использовать целочисленные типы данных вместо плавающей точки?

p.s. почитав литературу по Си было сказано - испольуйте те типы, которые приведут вас к меньшей погрешности. Затрата времени на преобразование типов чаще больше, нежели на перевод их из одного типа в другой. так ли это?

Заранее благодарен
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2010, 12:36
Ответы с готовыми решениями:

Интеграция MatLab в C#: разные типы данных
в матлабе реализовал генерацию простого числа, и воспользовался этим в шарпе с помощью следующего...

Типы данных: есть ли универсальный тип, который может заменить все типы данных в Си?
Добрый вечер! Был бы очень признателен, если бы Вы помогли бы мне понять нижеследующие вопросы:...

Какой формат базы данных DSN Access (атрибуты и типы данных)?
В настройках IIS можно выбирать формат журнала, один из форматов - это DSN Access, то есть события...

Типы данных: чем отличается тип данных int от float?
Всем привет! Помогите пожалуйста, чем отличается тип данных int от float?

0
16.09.2010, 12:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2010, 12:36
Помогаю со студенческими работами здесь

Типы данных, которые можно использовать в предложении foreach в качестве поставщика данных
Типы данных, которые можно использовать в предложении foreach в качестве поставщика данных 1...

Чтение недопустимых данных, динамические массивы, типы данных
Добрый день, реализую метод интерполяции сплайнами на С++, при подсчете одного из коэффициентов...

Для следующих значений данных определить типы данных
Для следующих значений данных определить типы данных, указать какой объем памяти они занимают,...

Типы данных С# для передачи данных через TCP
подскажите пожалуйста какой тип переменной лучше всего использовать в C# для передачи данных через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru