Модераторы: Akella, bartram
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создать символическую матрицу в Matlab, не получается 
:(
    Опции темы
ksili
Дата 25.7.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Что-то не получается в скрипте Matlab 6.5 программно заполнить матрицу символическими переменными (выражениями).
Вот так работает:
Код

a0 = sym('a0');
a1 = sym('a1');

A = [
[1  0   0   0],
[0  1   a1 0],
[0  0  a0+a1 0],
[0  0  2*a0   a1]
]

А вот так нет:
Код

a0 = sym('a0');
a1 = sym('a1');
a2 = sym('a2');
a3 = sym('a3');

Asym = [a0 a1 a2 a3];

for i = 1:n
    for j = 1:n
        for k = 1:n
            A(i,j) = A(i,j) + Asym(n-k+1)*(j)^k;
        end
    end
end

В самой вложенной строке цикла пишет, что невозможно преобразовать символическое к типу double. Не понимаю, в чём проблема. В первом же примере символическая матрица создалась.


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
bilbobagginz
Дата 26.7.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



Цитата(ksili @  25.7.2008,  17:08 Найти цитируемый пост)
for i = 1:n
    for j = 1:n
        for k = 1:n

а где n определен ?
какую ошибку получаешь ?

Добавлено через 1 минуту и 42 секунды
Цитата(ksili @  25.7.2008,  17:08 Найти цитируемый пост)
Asym = [a0 a1 a2 a3];

т.е. создан вектор.



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
ksili
Дата 26.7.2008, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(bilbobagginz @  26.7.2008,  20:49 Найти цитируемый пост)
а где n определен ?

да n конечно же определён. я тут привёл только суть неработающего участка
Цитата(bilbobagginz @  26.7.2008,  20:49 Найти цитируемый пост)
Цитата(ksili @  25.7.2008,  17:08 )Asym = [a0 a1 a2 a3];т.е. создан вектор.

да, если вот так явно определить вектор или матрицу, неважно, то вполне работает. Потом над ней даже можно совершать символические действия. Например написать Asym(1) = Asym(2) - Asym(3), и Asym(1) станет равным a1-a2.
Но мне надо много сформировать таких матриц (для разных n), вручную долго и глупо, т.к. матрицы будут становиться все большей размерности. Поэтому решил это сделать примерно как в том тройном цикле. 
Цитата(bilbobagginz @  26.7.2008,  20:49 Найти цитируемый пост)
какую ошибку получаешь ?

На русский я перевёл как "невозможно преобразовать символическое к типу double". На буржуйском примерно так: "Conversion from sym to double impossible" (по памяти)


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
bilbobagginz
Дата 26.7.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



http://www.google.com/search?&q=matlab...c+math+tutorial
они рекомендуют:
Код

syms а0 а1 а2 а3;

я позже попробовал, но на более новой версии: Version 7.2.0.294 (R2006a):
Код

v=[a0 a1 a2 a3];
g=v(1)*3;

получилось. тогда в цикле попробуй:
Код

A(i,j) = A(i,j) + Asym(n-k+1)*((j)^k);



--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
ksili
Дата 26.7.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(bilbobagginz @  26.7.2008,  21:33 Найти цитируемый пост)
http://www.google.com/search?&q=matlab...c+math+tutorial

Гениально!


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
bilbobagginz
Дата 26.7.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



добавь скобочки, как я предлагаю.
если не работает - возможно код maple, который был включен в матлаб был глючен.
доставай более новую версию matlab, или переходи на maple.

Добавлено через 3 минуты и 39 секунд
Цитата(ksili @  26.7.2008,  17:40 Найти цитируемый пост)
Гениально! 

ты серьёзно или с иронией ?

Добавлено через 5 минут и 53 секунды
Цитата(ksili @  26.7.2008,  17:19 Найти цитируемый пост)
На русский я перевёл как "невозможно преобразовать символическое к типу double"

наверное в данном контексте тип "sym".
т.е. 
Цитата

невозможно преобразовать sym в double

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


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
ksili
Дата 28.7.2008, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(bilbobagginz @  26.7.2008,  21:45 Найти цитируемый пост)
ты серьёзно или с иронией ?

с иронией

Тут решил в отдельном скрипте попробовать решить чисто вот эту задачу формирования символьной матрицы. Долго мучался из-за того, что что бы ни было в файле, ответом был ноль (писал просто ans = 0). Сегодня наконец понял, в чём дело. Файл я сохранил как sym.m, а это видимо делать было нельзя. Переименовал файл - Matlab стал опять его нормально выполнять.
Вот весь скрипт:
Код

syms a0 a1 a2 a3;

Asym = [a0 a1 a2 a3];
n = 2;
% формирование символической матрицы
clear A;
A(6,6) = 0;

for i = 1:n+1
    A(i,i) = 1; 
end

for i = n+2:2*n          % столбцы
    for j = i-n:2*(n+1) % строки
        for k = 1:n+1     % члены многочлена
            A(j,i) = A(j,i) + Asym(n-k+1)*((j-2)^k);  
        end  
    end
end


Ошибка такая:
Цитата

??? Conversion to double from sym is not possible.
On line 16   ==>     A(j,i) = A(j,i) + Asym(n-k+1)*((j-2)^k);



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программное обеспечение"
Deface
Akella

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

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

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, Akella, bartram.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программное обеспечение | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.