С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
1

Надо переделать программу из матлаб в С++

07.07.2016, 21:18. Просмотров 1068. Ответов 16
Метки нет (Все метки)

Вот моя программа в матлаб(рабочая).Писал сам, но с++ плохо понимаю, поэтому надеюсь на вашу помощь.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear;
hold off;
A1=0.7;
f1=500;
A2=0.5;
f2=1500;
A3=1;
f3=1000;
t=0:0.0001:1;
x1=A1*sin(2*pi*f1*t);
x2=A2*sin(2*pi*f2*t);
x3=A3*sin(2*pi*f3*t);
plot(t,x1+x2+x3);
x4=x1+x2+x3;
y=fft(x4);
plot(abs(y(1:length(y)/2)))
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2016, 21:18
Ответы с готовыми решениями:

надо переделать программу
помогите переделать на Си или с++ Program posled; uses crt; ...

надо переделать программу
помогите переделать программу нужно было из это программы: #include...

Программу на С++ надо переделать под С
Вот есть программа,которая подсчитывает количество слов. ее нужно переделать...

Надо переделать немного программу
Смотрите есть программа на решение методом хорд нелинейных уравнений. Но...

Написал программу на С++, надо переделать на С (пару строк!)
Здравствуйте, пользователи форума! Я начал изучать программирование с языка...

16
Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 217
07.07.2016, 21:45 2
0
Ferrari F1
793 / 522 / 156
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
07.07.2016, 21:46 3
rethaker, скажи, что должна делать программа, и тебе переделают.
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
08.07.2016, 23:01  [ТС] 4
Выводить в файл построенный график прямого преобразования Фурье
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
09.07.2016, 00:26 5
Теорию быстрого преобразования Фурье знаешь? (только не Высшая математика, а практичная реализация).

Или в итернете найти можешь?
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
10.07.2016, 01:22  [ТС] 6
ura_111, не знаю

Добавлено через 2 минуты
ura_111, я думал, что мне люди на этом сайте помогут полностью написать программу. Или так нельзя?
0
HenryDukart
124 / 124 / 44
Регистрация: 05.10.2013
Сообщений: 457
Завершенные тесты: 2
10.07.2016, 01:53 7
rethaker, обычно в этом разделе форума помогают с конкретным "затыком" в программе.
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
10.07.2016, 01:54  [ТС] 8
Я просто думал, что помогают на этом сайте, ну, в смысле, могут помочь сделать всю работу. Так-то здесь хорошие ребята, много раз искал на этом сайте ответы на вопросы)
0
easybudda
Модератор
Эксперт CЭксперт С++
10156 / 6060 / 1525
Регистрация: 25.07.2009
Сообщений: 11,487
10.07.2016, 01:54 9
Цитата Сообщение от rethaker Посмотреть сообщение
я думал, что мне люди на этом сайте помогут полностью написать программу. Или так нельзя?
Либо запасайтесь терпением и ждите альтруиста, обладающего достаточным количеством знаний и свободного времени, либо создавайте тему в разделе "фриланс", но там платить прийдётся. Но правильный путь - пытаться решить самому попутно выкладывая свои попытки - вот тогда действительно есть шанс, что и помогут и подскажут...
1
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
10.07.2016, 01:54  [ТС] 10
HenryDukart, хорошо, спасибо
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
10.07.2016, 02:02 11
Да, это правда - люди за такую работу деньги берут...

Ну, уважаемый, не расстраивайся. Попробуй поискать на этом же форуме по ключевым словам (просмотри каждую ссылку):

Надо переделать программу из матлаб в С++



или в Википедии по ссылке:

https://ru.wikibooks.org/wiki/Реализ..._Фурье#C.2B.2B

или поищи еще в интернете.

Только будь осторожен - может быть лафа. Проверяй код на контрольных примерах (сопоставляй с Матлабом).
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
14.07.2016, 17:02  [ТС] 12
Вот программа в С++, эх слишком много времени потратил, но понял)
Преобразование Фурье в C++
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <complex>
#include <cstdlib>
#include <math.h>
#include <stdio.h>
#include <fstream>
#define MAX 16384
using namespace std;
#define M_PI 3.1415926535897932384
int log2(int N)    {
  int k = N, i = 0;
  while(k) {
    k >>= 1;
    i++; }
  return i - 1;
}
int check(int n)   {
  return n > 0 && (n & (n - 1)) == 0;
}
int reverse(int N, int n{
  int j, p = 0;
  for(j = 1; j <= log2(N); j++) { if(n & (1 << (log2(N) - j)))
      p |= 1 << (j - 1); }
  return p;
}
void ordina(complex<double>* f1, int N) {
  complex<double> f2[MAX];
  for(int i = 0; i < N; i++)
    f2[i] = f1[reverse(N, i)];
  for(int j = 0; j < N; j++)
    f1[j] = f2[j]; }:
void transform(complex<double>* f, int N) {
  ordina(f, N);      complex<double> *W;
  W = (complex<double> *)malloc(N / 2 * sizeof(complex<double>));
  W[1] = polar(1., -2. * M_PI / N);
  W[0] = 1;
  for(int i = 2; i < N / 2; i++)
    W[i] = pow(W[1], i);
  int n = 1;
  int a = N / 2;
  for(int j = 0; j < log2(N); j++) {
    for(int i = 0; i < N; i++) {
      if(!(i & n)) {
        complex<double> temp = f[i];
        complex<double> Temp = W[(i * a) % (n * a)] * f[i + n];
        f[i] = temp + Temp;
        f[i + n] = temp - Temp;
      } }
    n *= 2; a = a / 2;
  }
void FFT(complex<double>* f, int N, double d)
{transform(f, N);
  for(int i = 0; i < N; i++)
    f[i] *= d; //multiplying by step
}
int main()
{ int n;
  do {
   cout << "specify array dimension (MUST be power of 2)" << endl;
    cin >> n;
  } while(!check(n));
  double d;
  cout << "specify sampling step" << endl; //just write 1 in order to have the same results of matlab fft(.)
  cin >> d;
  complex<double> vec[MAX];
  //cout << "specify the array" << endl;
  double A1 = 0.7, f1 = 500;
  double A2 = 0.5, f2 = 1500;
  double A3 = 1, f3 = 1000;
  double t = 0;
  double sign;
  ofstream file1;
  file1.open("data2.txt");
  for(int i = 0; i < n; i++) {
    sign = A1*sin(2*3.14*f1*t) + A2*sin(2*3.14*f2*t) + A3*sin(2*3.14*f3*t);
    real(vec[i]) = sign;
    file1 << sign << ", ";
    //cout << vec[i];
    t = t + 0.1;
  } 
 file1.close();
 
  FFT(vec, n, d);
  cout << "...printing the FFT of the array specified" << endl;
  for(int j = 0; j < n; j++)
    cout << vec[j] << endl;
    ofstream file;
    file.open("data.txt");
      for(int j = 0; j < n; j++)
         {  file << real(vec[j]) << ", ";
         }
  file.close();
  return 0;
}
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
14.07.2016, 22:38 13
Я пытался скомпилировать твой код (чтобы продолжить работу), но мне выдало ошибки:


Надо переделать программу из матлаб в С++




rethaker, скажи: "у тебя всё в порядке с кодом?". Может ошибки появились просто при механическом копировании кода.

Покрайней мере вижу одну ошибку в строчке 20 - нужна закрывающая скобка в перечне аргументов функции.

int reverse(int N, int n ) {


rethaker, скажи: "ты на форуме (и в википедии) искал примеры кода?"


rethaker, поверь, лучше говорить как есть.
0
S_el
2220 / 1683 / 354
Регистрация: 15.12.2013
Сообщений: 6,693
14.07.2016, 22:41 14
rethaker, поищите библиотеки, где реализованы эти функции и воспользуйтесь ими. Так будет значительно проще.
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
14.07.2016, 23:06 15
Вот ещё ошибки синтаксиса:

1)В строчке 31 после "}" не надо ":".
f1[j] = f2[j]; }:

2) И ещё одна, в строчке 50 нужно ещё одна скобка "}".

------------------------------------------------------------------------------

rethaker, скажи: "ты сверял результаты расчета в С++ и Матлаб (Маткад)?" (совпадают ли?).

------------------------------------------------------------------------------

А и правда, rethaker ты пытался искать просто нужную библиотеку (т.е. потребуется просто подключить эту библиотеку в твой проект и воспользоваться функцией fft(), по аналогии твоего Матлаба). Или, rethaker, тебе нужно именно самому написать на С++, в соответствии с теорией преобразования Фурье, код?

Добавлено через 12 минут
Вот ещё ошибки присвоения в строчке 76:

// real(vec[i]) = sign;

Вообще то это поправимо, но я её пока советую комментировать (двумя //), что бы не мешало работе программы.

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

И еще вопрос: rethaker тебе запись/чтение из файл нужно (как в твоём коде)?
0
rethaker
0 / 0 / 0
Регистрация: 07.07.2016
Сообщений: 7
16.07.2016, 23:41  [ТС] 16
У меня все работало когда я у себя запускал код, возможно при копировании, что-то потерял, либо при редактировании администраторами могло потеряться, ura_111, да, нужно именно самому написать на С++, в соответствии с теорией преобразования Фурье, код. Сверял полученый вектор в матлабе, графики сходились, собственно и нужен для этого вывод в файл.

Добавлено через 3 минуты
ura_111, на вопрос делал ли я сам, нет, делал вместе с другом у которого было точно такое же задание, сами придумывали код. Ну хотя, да, смотрели некоторые источники, как же без этого)
0
ura_111
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
17.07.2016, 02:21 17
Если у тебя результаты сошлось (в С++ и Матлаб), тогда зачем ты вылажил свой код на форум? Это же означает, что твоя - задача решена.

Я не понимаю.

Кстате, я так понимаю что в Матлабе у тебя время (t=0....1) идет с шагом 0,0001, а в С++ вроде шаг времени 0,1 (t=t+0.1.
А ещё мне не понятно, что такое n (оно вводится в самом начале программы). Ведь в Матлабе никакого n нет.
0
17.07.2016, 02:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2016, 02:21

очень надо!!доделать/переделать программу с текстовыми файлами(повторы слов)
нужно упорядочить слова находящиеся в тексте по убыванию частоты.При этом...

надо переделать
Надо сделать чтобы массив вводился с клавиатуры скиньте правильный код очень...

надо переделать
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru