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

Расчет элементов матрицы и циклическая нумерация

23.12.2014, 16:39. Показов 4114. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу отладить код
Все исходные данные, используемые для нахождения главной формулы формата Double, при выполнении нижеприведенного цикла результат так и не находится. Элемент U появляется в окне Workspace, но он форматом function_handle. Что я делаю не так?
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
for I=1:54
t=0;
U(I,1)= 0;
U(I,2)= 0;
for J = 2:10
if rem(I,3)~=0
q=sin(7*I*t);
else
q = 0;
U(I,J)=inv(M(I,I)) * (-M(I,I) * q - K(I,I) * U(I,J-1)) * t*t + E(I) * (2*U(I, J-1) - U(I, J-2));
t= t + 0.001;
end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2014, 16:39
Ответы с готовыми решениями:

Расчет элементов квадратной матрицы
Здравствуйте! Прошу помочь с написанием программы в Паскале, совсем не знаю, с чего взяться....

Расчет элементов матрицы по формуле
Помогите написать программу для расчета матрицы А. Не знаю как( Вот формула {a}_{i,j}=(...

Расчет элементов квадратной матрицы
Помогите пожалуйста составить программу для расчета элементов квадратной матрицы A(n,n): ...

Расчет элементов квадратной матрицы по формуле
Разработать программу решения четырех взаимосвязанных задач частой работы: 1) расчета элементов...

26
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
23.12.2014, 17:22 2
может так?
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
clear, clc
 
M = rand(54);
K = rand(54);
E = @(t) 1;
for I=1:54
    t=0;
    U(I,1)= 0;
    U(I,2)= 0;
    for J = 3:10
        if rem(I,3)~=0
            q=sin(7*I*t);
        else
            q = 0;
        end;
        U(I,J)=inv(M(I,I)) * (-M(I,I) * q - K(I,I) * U(I,J-1)) * t*t + E(I) * (2*U(I, J-1) - U(I, J-2));
        t= t + 0.001;    
    end;
end
surf(U)
1
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
24.12.2014, 08:35  [ТС] 3


Добавлено через 24 секунды
Спасибо огромное!! Помогло!!
А вот еще в эту формулу можно вставить, чтобы кроме значения K(I,I) можно было считать K(I,I+3) и K(I,I-3)?

Добавлено через 10 часов 42 минуты
потому что тут нужно считать не только значения главной диагонали, но и еще по двум диагоналям - сверху и снизу от главной(ленточная матрица). Так же нужно, чтобы эти значения продолжили сохранятся в матрицу U в том же порядке, как и идут элементы в матрице К

Можно ли в эту формулу вставить, чтобы кроме значения K(I,I) можно было считать K(I,I+3) и K(I,I-3)?

потому что тут нужно считать не только значения главной диагонали, но и еще по двум диагоналям - сверху и снизу от главной(ленточная матрица). Так же нужно, чтобы эти значения продолжили сохранятся в матрицу U в том же порядке, как и идут элементы в матрице К

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
M = rand(54,54);
K = rand(54,54);
E = eye (54,54);
for I=1:54
    t=0;
    U(I,1)= 0;
    U(I,2)= 0;
    for J = 3:10000
        if rem(I,3)~=0
            q=sin(7*I*t);
        else
            q = 0;
        end;
        U(I,J)=inv(M(I,I)) * (-M(I,I) * q - K(I,I) * U(I,J-1)) * t*t + E(I,I) * (2*U(I, J-1) - U(I, J-2));
        t= t + 0.001;    
    end;
end
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.12.2014, 15:24 4
Цитата Сообщение от Маленький Лунат Посмотреть сообщение
кроме значения K(I,I) можно было считать K(I,I+3) и K(I,I-3)?
т.е. чтобы после конечного значения появлялось первое, второе и т.д.?
Как тебе такой вариант?
Matlab M
K(mod(I-1,size(K,1))+1, mod(I-1,size(K,2))+1)
вот это безумие: mod(I-1,size(K,1))+1 создает циклическую нумерацию, где I - текущий индекс, size(K,1) - размер массива (единички нужны, т.к. нумерация элементов начинается с 1)
Matlab M
>> N = 10; % длинна массива
>> k = -5:13 % линейные индексы 
 
k =
    -5    -4    -3    -2    -1     0     1     2     3     4     5     6     7     8     9    10    11    12    13
 
>> idx = mod(k-1,N)+1 % циклические индексы
 
idx =
     5     6     7     8     9    10     1     2     3     4     5     6     7     8     9    10     1     2     3
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
24.12.2014, 16:17  [ТС] 5
не совсем это
мне нужно, чтобы все считалось по порядку
т.е., сначала по текущей формуле, а затем, если попадается элемент с диагонали (I,I+3) или (I,I-3), просчитывать ту же формулу, но с матрицей К, с данными индексами
а потом, при переходе снова на главную диагональ - снова брались индексы с главной
..в общем, мне нужно, чтобы элементы матрицы(именно матрицы)К все просчитывались в этой формуле, а не только главная диагональ..
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.12.2014, 16:22 6
я не понимаю

*если у тебя I=1, или I=54, то I-3=-2 или I+3=57 вылезут за пределы матрицы.
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
24.12.2014, 16:46  [ТС] 7
I+3 и I-3 отвечают у меня за индексацию столбцов
вот так примерно выглядит матрица К (только 54*54)
1 0 0 1 0 0 0 0 0
0 1 0 0 1 0 0 0 0
0 0 1 0 0 1 0 0 0
1 0 0 1 0 0 1 0 0
0 1 0 0 1 0 0 1 0
0 0 1 0 0 1 0 0 1
на месте единичек стоят элементы, которые тоже нужно учитывать в формуле..
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.12.2014, 17:03 8
Ну хорошо, учитывай, я разрешаю
*просто я не могу понять в чем трудность?
**еще можно использовать команду diag (описание) которая вытягивает диагональ (главную или побочную) из матрицы
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
24.12.2014, 17:50  [ТС] 9
в том, что они не учитываются
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.12.2014, 18:02 10
и ты не знаешь как они должны учитываться?
у тебя хоть формулы/задание есть какие-то? или ты просто с числами играешься?
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
24.12.2014, 19:09  [ТС] 11
знаю конечно
все по очереди должны в формулу подставляться, просто я не могу дополнительный цикл сделать для столбцов в матрице К
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
24.12.2014, 20:44 12
Цитата Сообщение от Маленький Лунат Посмотреть сообщение
знаю конечно
а я не знаю, поэтому и не могу тебе помочь
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
25.12.2014, 08:10  [ТС] 13
С твоего позволения расскажу условие
Мне даны двумерные матрицы К, М и Е и формула:
U(t+1)=M-1 * (-M * q(t) - K * U(t)) * t2 + E * (2*U(t) - U(t-1))
Матрица М - диагональная, матрицу К я приводила вчера(ленточная), Е - единичная матрица, все размером 54*54.
q - вектор из 54 элементов = ( sin(7*i*t)
0
0 ) и такая последовательность 18 раз (всего 54 элемента).
Переменная t меняется от 0 до 10 с шагом 0,001
В формуле элементы постепенно заменяют друг друга. Сначала U(t-1)=0, U(t)=0. После увеличения t, U(t-1)=U(t),U(t)=U(t+1) и так далее.
В результате мне нужно получить матрицу U размером 54*10000.
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
25.12.2014, 15:47 14
Лучший ответ Сообщение было отмечено Маленький Лунат как решение

Решение

Вооо! с этого и надо было начинать
гляди, что получается
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
clear, clc
 
M = 5+rand(54);
K = diag(2*ones(1,54))+diag(ones(1,51),3)+diag(ones(1,51),-3);
E = eye(54);
 
n = 1e4; 
U = zeros(54,n); % заготовка из нулей
t = 0:0.001:(n-1)*0.001; % массив времени
for i = 2:n-1 
        q = repmat([sin(7*i*t(i));0;0],18,1); % повторяем вектор 18 раз
        U(:,i+1) = inv(M)*(-M*q - K*U(:,i))*t(i)^2 + E*(2*U(:,i) - U(:,i-1));
end
*правда при таких М, К значения U улетают в бесконечность
1
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
25.12.2014, 16:09  [ТС] 15
Сенсей!!
Только я не совсем поняла - что значит уходит в бесконечность?
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
25.12.2014, 16:22 16
Если построить: plot(t,U) то видно, что на краю значения вылетают за пределы возможного
Расчет элементов матрицы и циклическая нумерация
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
29.12.2014, 13:01  [ТС] 17
а можно ли,чтобы матрицы умножались поэлементно? когда я так пишу - выдается сообщения, что размеры матриц должны совпадать. Я хотела попробовать поэлементно, потому что получается неверный результат. Кроме того, считаются только первые 480 столбцов, остальные - Nan
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
31.12.2014, 16:58 18
Цитата Сообщение от Маленький Лунат Посмотреть сообщение
а можно ли,чтобы матрицы умножались поэлементно? когда я так пишу - выдается сообщения, что размеры матриц должны совпадать.
поэлементно тут нельзя, т.к. обратная матрица не посчитается. А почему у меня ошибки не возникает?
Цитата Сообщение от Маленький Лунат Посмотреть сообщение
Кроме того, считаются только первые 480 столбцов, остальные - Nan
это то, что я говорил ранее:
Цитата Сообщение от Зосима Посмотреть сообщение
значения вылетают за пределы возможного
Можешь выложить свои данные (в архиве наример)?
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
05.01.2015, 19:07  [ТС] 19
да, про Nan я не сразу заметила, дело в том, что результаты должны идти без нулей..сплошным массивом, т.е., я думаю, матрицы должны перемножаться поэлементно..архив приложенperem.rar
0
0 / 0 / 0
Регистрация: 08.12.2014
Сообщений: 16
07.01.2015, 19:50  [ТС] 20
Зосима, нет вариантов, в которых значения не будут улетать?

Ребята, может кто-нибудь помочь, пожалуйста?!!
0
07.01.2015, 19:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2015, 19:50
Помогаю со студенческими работами здесь

Расчет суммы элементов матрицы (TStringGrid)
Добрый вечер Помогите разработать программу в среде Lazarus Вообще не шарю в ней, а надо сдать...

Расчет основных диагональных элементов матрицы
Для расчета основных диагональных элементов матрицы в C::подскашите где ошипка::#include<conio.h>...

Расчет элементов квадратной матрицы по заданной формуле
Нужно написать программу - расчет элементов квадратной матрицы A = (aij), i,j – 1,2,…,n по заданной...

расчет разности элементов матрицы с определенным шагом
Дается матрица, нужно посчитать разность элементов с определенным шагом, например от второго...


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

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