Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108

Работа с элементами массива

03.03.2016, 09:01. Показов 1640. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Такая проблема: есть массив inf, нужно разделить весь поток на 4 в интервалах t=0:T, t=T:2T и т.д., и домножить каждый элемент на exp(i*b*w*t), где b принимает значения от 1 до 16. Помогите пожалуйста.

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
inf=[0.500000000000000 + 0.500000000000000i -1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i];
f=10^6;
T=1/f;
w=2*pi*f;
 
for b=(1:16)
    for n=(1:16)
        for t=(0:T)
        s1(t)=inf(n)*exp(1i*b*w*t);
        
    for n=(17:32)
        for t=(T:2*T)
        s2(t)=inf(n)*exp(1i*b*w*t);
    
    for n=(33:48)
        for t=(2*T:3*T)
        s3(t)=inf(n)*exp(1i*b*w*t);
        
     for n=(49:64)
        for t=(3*T:4*T)
        s3(t)=inf(n)*exp(1i*b*w*t);
        
    end
        end
    end
end
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2016, 09:01
Ответы с готовыми решениями:

работа с элементами массива в заданном интервале, чётные и нечётные элементы массива
Задача: Определить наибольший элемент среди нечётных по номеру элементов второй четверти массива (целочисленные элементы массива...

Работа с элементами массива [С++]
Здравствуйте, помоги пожалуйста разобраться с заданием и его реализацией. 1. Консольный ввод/вывод вещественного массива...

Работа с элементами массива
В данном коде требуется суммы элементов строк выводимой матрицы,значения которой выводятся с клавиатуры(например 4 и 6) занести в...

19
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
03.03.2016, 16:03
mazahaka567, в интервалах по сколько значений должно быть?
И для чего нужно разбивать на 4 интервала? Можно ли обойтись без разбиения? Или, может, нужно, чтобы на интервалы было разбито не время, а результат его умножения на приведённую вами формулу?
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
03.03.2016, 18:50  [ТС]
Нужно, чтобы в конечном итоге получилась функция s1(t)=C1*exp(i*b*w*t) в интервале от 0 до T, где С1 - это первый элемент массива (0.5+0.5i), а b в данном случае равняется 1. Для второго элемента: s1(t)=C2*exp(i*b*w*t), где b=2
Затем s2(t)=C17*exp(i*b*w*t) в интервале от T до 2*T, где С17 - семнадцатый элемент массива, а b - снова единица.
И так далее до s4(t). Затем построить графики действительной и мнимой частей этих функций на интервале от 0 до 4*T.
T=10^-6
w=2*pi*10^6
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
03.03.2016, 20:25
mazahaka567, и вам нужно построить 64 графика?
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
03.03.2016, 20:30  [ТС]
Прошу прощения я всё напутал. В конечном итоге должно получиться s1(t)=C1*exp(i*w*t)+C2*exp(2*i*w*t)+...+ С16*exp(16*i*w*t) на интервале от 0 до T
s2(t)=C17*exp(i*w*t)+C18*exp(2*i*w*t)+.. .+C32*exp(16*i*w*t) на интервале от Т до 2*Т, и так до s4(t)
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
03.03.2016, 22:41
Лучший ответ Сообщение было отмечено mazahaka567 как решение

Решение

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
inf=[0.500000000000000 + 0.500000000000000i -1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i];
f=10^6;
T=1/f;
w=2*pi*f;
s=zeros(4,100);
t=s;
B=repmat([1:16]',1,100);
for I=1:4
     t(I,:)=linspace(T*(I-1),T*I);
     k=16*(I-1);
     [tt,INF]=meshgrid(t(I,:),inf(k+1:k+16));
     s(I,:)=sum(INF.*exp(B*i*w.*tt));
end
plot(t',real(s)'),grid on
figure;
plot(t',imag(s)'),grid on
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
04.03.2016, 08:13  [ТС]
Большое спасибо. Всё так, как нужно.

Добавлено через 1 час 20 минут
Хотя, не совсем понимаю как вы это реализовали. Не подскажите, как из каждой строки массива s взять последние 25 (1/4) значений и поставить в начало. Заранее спасибо
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
04.03.2016, 09:11
Цитата Сообщение от mazahaka567 Посмотреть сообщение
Не подскажите, как из каждой строки массива s взять последние 25 (1/4) значений и поставить в начало.
Matlab M
1
s1=circshift(s',25)';
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
08.03.2016, 18:02  [ТС]
Спасибо, но это не то, что я имел ввиду. Вы, как я понял, сделали сдвиг на 25 элементов. А нужно из каждой строки массива s взять последние 25 (1/4) значений и поставить в начало, т.е. в конечном итоге матрица станет 4 на 125.

Добавлено через 39 минут
И затем снова построить графики

Добавлено через 16 минут
И затем снова построить графики в том же диапазоне

Добавлено через 32 минуты
Построить графики
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
08.03.2016, 19:32
mazahaka567, зачем дублировать темы?
Matlab M
1
2
n=length(s);
s1=[s(:,s(n-24):s(n)) s];
Но я ещё хочу уточнить: в векторе времени t тоже надо последние 25 значений скопировать в начало? Или присоединённые в начало элементы вектора s должны соответствовать отсчётам времени t с нулевого значения?
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
09.03.2016, 06:30  [ТС]
Спасибо, но Krasme уже помог в соседней теме. А как Вы сделали линии сетки? grid on?
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
09.03.2016, 08:18
Цитата Сообщение от mazahaka567 Посмотреть сообщение
Krasme уже помог в соседней теме.
Krasme - это женщина. Поэтому правильно писать "помогла".
Цитата Сообщение от mazahaka567 Посмотреть сообщение
А как Вы сделали линии сетки? grid on?
Совершенно верно.
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
10.03.2016, 11:07  [ТС]
Подскажите пожалуйста, каким образом увеличить точность построения графика?
Совсем не понимаю как работает данный цикл:
Matlab M
1
2
3
4
5
6
7
B=repmat([1:16]',1,100);
for I=1:4
     t(I,:)=linspace(T*(I-1),T*I);
     k=16*(I-1);
     [tt,INF]=meshgrid(t(I,:),inf(k+1:k+16));
     s(I,:)=sum(INF.*exp(B*i*w.*tt));
end
Я так понял, что вы взяли dt=100, да?
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.03.2016, 20:59
Цитата Сообщение от mazahaka567 Посмотреть сообщение
Я так понял, что вы взяли dt=100, да?
Да, функция linspace(a,b) формирует по умолчанию 100 значений в промежутке от a до b. Чтобы изменить их количество, нужно его (количество) задать в виде linspace(a,b,n), где n - количество. Чтобы увеличить точность построения графика, нужно увеличить количество точек, например, linspace(T*(I-1),T*I,300). Но тогда во всём коде нужно 100 заменить на 300.
1
Эксперт по электронике
 Аватар для R2D2
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,488
11.03.2016, 04:37
Centurio, читаю Вашу с mazahaka567 переписку и руки чешутся применить к данной задаче конструкцию вида:
Matlab M
1
2
3
4
INF = [1 2 3 5];
n = [1 2 3 4]';
t = linspace(0, 1e-6, 1000);
y = INF*cos(2*pi*n*t);
От только что то как не кручу - результат с Вашим не сходится

Добавлено через 1 час 13 минут
О, вроде оно.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
INF = [0.500000000000000 + 0.500000000000000i -1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 - 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i 0.500000000000000 + 0.500000000000000i 1.00000000000000 + 1.00000000000000i 0.500000000000000 + 0.500000000000000i -1.00000000000000 + 0.00000000000000i];
n = (1:16)';
inf = reshape(INF, length(n), [])';
T = 1e-6;
f0 = 1/T;
t = linspace(0, T, 1000);
T = ones(4,1)*t + ([0 1 2 3]'*T)*ones(1,length(t));
y = zeros(4, length(t));
for k = 1:4
    y(k,:) = inf(k,:)*exp(1j*n*2*pi*f0*T(k,:));
end
subplot(211)
plot(T', real(y')); grid on
subplot(212)
plot(T', imag(y')); grid on
Чувствую, что можно как то и цикл заменить, вот только пока не знаю как((
1
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
16.03.2016, 16:53  [ТС]
Странно. Беру код R2D2 и получаю что-то отличное от результата Centurio.
0
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
17.03.2016, 07:20  [ТС]
Здравствуйте. Решил проверить Ваш (Centurio) код в MathCad и увидел, что у нас с Вами получаются разные значения. Не могли бы Вы посмотреть, и сказать, что и у кого не так?
Проверка.rar
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
17.03.2016, 09:19
Цитата Сообщение от mazahaka567 Посмотреть сообщение
Не могли бы Вы посмотреть, и сказать, что и у кого не так?
У вас в приведённом здесь коде и в маткадовском значения 14-го элемента массива inf (C) не совпадают, у них разный знак мнимых частей.
0
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
17.03.2016, 15:33  [ТС]
Спасибо, что нашли в ошибку.
0
0 / 0 / 0
Регистрация: 05.11.2014
Сообщений: 108
31.03.2016, 07:42  [ТС]
Здравствуйте, снова понадобилась Ваша помощь. Есть данные которые Вы получили в самом начале:
data.rar
Нужно переписать в Matlab:

Если можно, то циклом.
Должно получиться то, что был изначально. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2016, 07:42
Помогаю со студенческими работами здесь

Работа с элементами массива
Дан целый массив из 5 строк и 3 столбцов. Упорядочить массив по убыванию произведений элементов столбцов.

работа с элементами массива(2)
...

Работа с элементами массива.
Имеется одномерный массив mass , все элементы которого равны 0 (ноль). Как к примеру 50-му элементу массива добавить единицу, чтобы он...

работа с элементами массива.
работа с элементами массива. посмотрите ,пожалуйста задание,необходимо к завтрашнему дню. ПОЖАЛУЙСТА!!!!очень ВАС прошу!

работа с элементами двумерного массива
Господа программисты , помогите осуществить исполнение следующей программы на языке Pascal (TP) Дан двумерный вещественный массив...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru