Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
#1

Преобразование Уолша Адамара! - C++

06.10.2011, 19:06. Просмотров 2278. Ответов 1
Метки нет (Все метки)

Доброго времени суток всем, Уважаемые! собственно надо реализовать на с++ программку, в письменном виде задачу я уже решил, решение приложу в файле.
Если будут какие либо вопросы по работе алгоритма спрашивайте, но вроде в файле обьяснил все довольно просто.
сама задача не сильно сложная, просто мой уровень дружбы с матрицами тоже не слишком высок=D
через минут 40 попробую выложить свой код, просто только закончил с решением в письменном виде.
спасибо, если кто поможет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2011, 19:06     Преобразование Уолша Адамара!
Посмотрите здесь:

C++ Преобразование в массив
Преобразование списка. C++
Преобразование типов. C++
C++ преобразование типов
Преобразование классов C++
C++ Написать программу, генерирующую матрицу Адамара порядка n кодом Адамара
C++ преобразование
C++ Преобразование С++
C++ Преобразование +'0'
C++ Преобразование
C++ Разложения по базису Уолша с обязательной корреляцией с результатами вейвет анализа
Преобразование C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
07.10.2011, 15:20  [ТС]     Преобразование Уолша Адамара! #2
вот мое представление работы программы
C++
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
#include <stdafx.h>
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
int main()
{
    const int n = 4
    int g, u, v, x, y; b0, p0, b1, p1;
    int matr[n][n];
    cout<<"vvedite u, u="; cin>>u;
    cout<<"vvedite v, v="; cin>>v;
    /* еще необходимо определить табличку для для двоичного перевода, хз как лучше ето сделать
    В двоичном представлении (первый столбец b1, второй столбец b0, то есть для единицы b1=0; b0=1)
    0=0,0
    1=0,1
    2=1,0
    3=1,1 */
 
    for (..........)
    {
    
        g[x,y,u,v]=pow(-1, [b0(x)*p0(u)+b0(y)*p0(v)]+[b1(x)*p1(u)+b1(y)*p1(v)]);
    /* я так понимаю тут надо чтоб создавалась пустая матрица, и начинался расчет каждого
    элемента, там типо g++, потом x++, y++ ,с циклом for (x=0; x<=3;x++) то же самое для 
    y и для g, незнаю как лучше чтобы программа считала каждый елемент где то его запоминала 
    в памяти а потом заполняла матрицу, или после подсчета каждого g, сразу вписывала коеф в 
    соответствующую ячейку, ну наверняка 1 вариант будет лучше, просто препод не смотрит 
    программу, главное чтоб она работала и выдавала что надо*/
    }
    cout<<"matrica Uolsha-Adamara imeet vid"<<endl;
    cin.get();
    cin.get();
}
    
// собственно надеюсь на вашу помощь
Добавлено через 5 минут
вот еще вторая задача, надо дописать код для обратного дискретно косинусного преобразования, ну заодно можете сделать более оптимальным если кому не трудно
C++
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
47
48
49
50
51
52
53
54
55
56
// proj1.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    const int n = 4;
    double Gf[n];
    const double pi = 3.141592653589;
    double Pt[n] = {4, 5, 3, 7};
    int f = 0;
    double Cf = 0;
    double X=0;
    for( int i = 0; i < n; i++)
    {
        X=0;
        f = i;
        for (int t = 0; t < n; t++)
        {
            X += Pt[t] * cos(((2*t + 1)*pi*f)/(2*n));
            //cout << X << " ";
        }
        if (i == 0)
            Cf = 1./sqrt((double)2);
        else
            Cf = 1;
        Gf[i] = (2./(sqrt((double)2*n)))*Cf * X;
    }
    for(int i = 0; i < n; i ++)
        cout << Gf[i] << " ";
    cout << "\n" << "OBRATNOE:" << endl;
 
    for( int i = 0; i < n; i++)
    {
        X=0;
        f = i;
        for (int t = 0; t < n; t++)
        {
            X += Pt[t] * cos(((2*t + 1)*pi*f)/(2*n));
            //cout << X << " ";
        }
        if (i == 0)
            Cf = 1./sqrt((double)2);
        else
            Cf = 1;
        Gf[i] = (2./(sqrt((double)2*n)))*Cf * X;
    }
    for(int i = 0; i < n; i ++)
        cout << Gf[i] << " ";
    return 0;
    cin.get();
    cin.get();
}
Добавлено через 21 минуту
вот к первому заданию кому лень качать и смотреть что там
В Задании надо рассчитать коэффициенты матрицы для U=3, V=1;
H(u,v)=∑_(x=0)^(N-1)▒∑_(y=0)^(N-1)▒〖P(x,y)*pow((-1),〗 ∑_(i=0)^(n-1)▒〖[bi(x)*pi(u)〗+bi(y)*pi(v)])
G (x,y,u,v) – коэффициент расчета
В двоичном представлении (первый столбец b1, второй столбец b0, то есть для единицы b1=0; b0=1)
0=0,0
1=0,1
2=1,0
3=1,1
Для U p0(0)=b0(0)=0, p1(0)=b1(0)+b0(0);
Для V p0(0)=b0(0)=0, p1(0)=b1(0)+b0(0); Программно реализовать для U=3, V=1
Пример решения
G(0,0,3,1)=(-1)[b0(0)*p0(3)+b0(0)*p0(1)]+[b1(0)*p1(3)+b1(0)*p1(1)]=1
G(0,1,3,1)=(-1)[b0(0)*p0(3)+b0(1)*p0(1)]+[b1(0)*p1(3)+b1(1)*p1(1)]=1
G(0,2,3,1)=(-1)[b0(0)*p0(3)+b0(2)*(p0(1)]+[b1(0)*p1(3)+b1(2)*p1(1)]=-1
G(0,3,3,1)=(-1)[b0(0)*p0(3)+b0(2)*(p0(1)]+[b1(0)*p1(3)+b1(3)*p1(1)]=-1
посчитаны коэффициенты для 1 строчки, для второй третьей и четвертой они соответственно считаются аналогично к примеру для второй вот:
g(1,0,3,1)=-1
g(1,1,3,1)=-1
g(1,2,3,1)=1
g(1,3,3,1)=1
Исходная матрица будет иметь вид 1 1 -1 -1
-1 -1 1 1
1 -1 -1 1
-1 1 1 -1
в 1 коде я написал формулу которая будет основной, кто посмотрит впринципе разберется, тем более тут большинство неплохо знает математику, так что если смазаны символы суммы то формула в первом коде

Добавлено через 16 часов 9 минут
так че поможет кто?
Yandex
Объявления
07.10.2011, 15:20     Преобразование Уолша Адамара!
Ответ Создать тему
Опции темы

Текущее время: 03:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru