Перейти к содержимому


- - - - -

Matlab


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 GOKA242

GOKA242
  • Новичок

  • Новичок
  • 2 сообщений
  • Пол:Мужчина
  • Город:Россия г. Орел

Отправлено 16.03.2009 - 22:38

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

#2 GOKA242

GOKA242
  • Новичок

  • Новичок
  • 2 сообщений
  • Пол:Мужчина
  • Город:Россия г. Орел

Отправлено 18.03.2009 - 21:33

народ, не ужели ни кто не знает?

#3 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 22.03.2009 - 13:25

А ты сам то знаешь, что такое Matlab? Это программа для математических расчетов и моделирования и базы данных в ней НЕ создаются. Он может брать данные из БД и пихать в нее результаты. Если тебя это интересует, так и пиши.

Сообщение отредактировал pahan76: 22.03.2009 - 13:26


#4 bodypit

bodypit
  • Новичок

  • Новичок
  • 1 сообщений

Отправлено 22.09.2009 - 12:40

Просмотр сообщенияpahan76 (22 Марта 2009, 13:25) писал:

А ты сам то знаешь, что такое Matlab? Это программа для математических расчетов и моделирования и базы данных в ней НЕ создаются. Он может брать данные из БД и пихать в нее результаты. Если тебя это интересует, так и пиши.

Человек имел в виду как из Matlab, обратиться к базе данных, я тоже прошарил весь интернет и не нашел ничего путнего на  эту тему. Возможно кто-нибудь сталкивался с этой проблеммой.
Например имеем такой код:
conn = database('testdb', '', '');
ping(conn);
cursor = exec(conn, 'select User from table1');
curs = exec(conn, 'select Age from table1');
setdbprefs('DataReturnFormat','cellarray');

где находится эта база?

#5 Vipous

Vipous
  • Великий и Могучий

  • Power User
  • 1 899 сообщений
  • Пол:Мужчина
  • Город:Солнцево

Отправлено 22.09.2009 - 14:39

Перваяже ссылка в гугле
http://www.mathworks...g/database.html

#6 Velvet

Velvet
  • Kill me at night

  • Пользователь
  • 1 797 сообщений
  • Пол:Женщина
  • Город:Вешняки -> РАДУГА
  • Интересы:Рисую, катаюсь на роликах, плаваю, стреляю из разного вида оружия и многое другое...

Отправлено 18.12.2009 - 13:33

Тут можно вопрос задать?
Как в матлабе можно нарисовать круг не используя циклы (for,if и т.п.) ?
Просто белый круг на черном фоне :)

#7 InVolume

InVolume
  • Что не убивает делает нас сильнее

  • Пользователь
  • 1 228 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 04.01.2010 - 21:30

Делается это как-то так:

Цитата

format compact                
format long e                    
theta = linspace(0,2*pi,100);  
x = cos(theta);                
y = sin(theta);            
plot(x,y);
axis('equal');
Если написать цикл, написать формулу окружности и тому подобное, то будет даже интереснее.

#8 mangos

mangos
  • Новичок

  • Новичок
  • 1 сообщений
  • Пол:Мужчина

Отправлено 13.10.2012 - 13:57

У меня есть трехмерная матрица сигналов, полученных с датчика (x,y,z), как построить поверхность, в которую будут входить эти точки?

По скольку это массив данных, функция z=f(x,y) либо отсутствует, либо неизвестна.



#9 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 14.10.2012 - 18:44

Почитай про команды
plot3
mesh
meshc
meshz
surf
surfc
surfl

#10 kirbizz

kirbizz
  • Надзиратель McLarens1

  • Power User
  • 2 582 сообщений
  • Пол:Мужчина
  • Город:Москва, Вешняки

Отправлено 19.10.2012 - 07:58

К моему удивлению это очень удобная штука, но поскольку пока не освоил его на достойном уровне, а требуется построить фильтр Калмана не используя встроенный, то вопрос такой, как в Simulink сделать так, чтобы он сначала первое значение брал из константы начальных условий, а дальше динамически его брал из того, что я высчитал? Блок switch с условием по времени t=0?

#11 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 20.10.2012 - 13:33

Просмотр сообщенияkirbizz (19.10.2012 - 07:58) писал:

К моему удивлению это очень удобная штука, но поскольку пока не освоил его на достойном уровне, а требуется построить фильтр Калмана не используя встроенный, то вопрос такой, как в Simulink сделать так, чтобы он сначала первое значение брал из константы начальных условий, а дальше динамически его брал из того, что я высчитал? Блок switch с условием по времени t=0?

Не получится.
У блока Switch есть управляющий вход. И есть порог. И есть 3 варианта, что делать с этим порогом - пропускать первый вход, если управление а) >=порога б) > порога в) не равно 0.
Предалагаю подать на управляющий вход твою константу через задержку.
Модель
Результат

#12 cucutnog

cucutnog
  • Новичок

  • Новичок
  • 2 сообщений
  • Пол:Мужчина

Отправлено 19.11.2012 - 20:49

Добрый день.

Постановка задачи:

На входе блока в Simulink матрица размером G[3][4] и две константы, имеющие смысл номера строки (i) и столбца (j), соответственно. На выходе блока элемент матрицы G(i,j). Подавая различные константы в пределах размера матрицы, меняется на выходе G(i,j).


Суть проблемы:

Если смоделировать такое устройство с помощью блока MATLAB Function, прописав туда простейший m-код

function C = fcn(i,j,G)

C = G(i,j);

end

все будет работать как надо


Но если реализовать эту задачу с помощью С MEX S-function, прописав в .с

#include "doubleIt.h"

void fcn (int i,  int j, double G[3][4], double *C)

{
*C = G[i][j];
}

И создав файл .mexw32 с помощью Legacy code tool, я получаю на выходе не тот элемент, номер которого я заказывал с помощью констант i и j, а другой элемент, принадлежащий матрице G.
Конечно, я учитываю то, что нумерация в С идет с 0, а не с 1 , как в Матлабе.

Поясняющий рисунок, на котором сверху эта задача решается в MATLAB Function, а снизу в С MEX S-function. Матрица одна и там и там, разумеется.

Изображение


Задавая различные i и j получаю следующие результаты на выходе  С MEX S-function

  i   j   G(i,j)

[0]   [0]    1
[1]   [0]    6
[2]   [0]   11
[3]   [0]    6
[0]   [1]    5
[0]   [2]    9
[0]   [3]    2
[0]   [4]    6
[0]   [5]    10

Что интересно: Если менять только номер j-ого элемента, а i=0, то выпадают числа матрицы последовтаельно перебирая мтарицу сверху вниз и слева направо. Даже при условии, что в моей мтарице j<4, можно ввести j>4 и получить число на выходе.


Возможно что-то в самом файле S-функции, который я компилирую не так. Есть опасения по-поводу указателей.


static void mdlOutputs(SimStruct *S, int_T tid)
{
  /*
   * Get access to Parameter/Input/Output/DWork/size information
   */
  int16_T *u1 = (int16_T *) ssGetInputPortSignal(S, 0);
  int16_T *u2 = (int16_T *) ssGetInputPortSignal(S, 1);
  real_T *u3 = (real_T *) ssGetInputPortSignal(S, 2);
  real_T *y1 = (real_T *) ssGetOutputPortSignal(S, 0);

  /*
   * Call the legacy code function
   */
  fcn ( *u1, *u2, u3, y1);
}


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

#13 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 20.11.2012 - 14:50

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

Цитата

Задавая различные i и j получаю следующие результаты на выходе С MEX S-function

i j G(i,j)

[0] [0] 1
[1] [0] 6
[2] [0] 11
[3] [0] 6
[0] [1] 5
[0] [2] 9
[0] [3] 2
[0] [4] 6
[0] [5] 10
Все это похоже на то, что матлаб реально обращается к этому массиву как к одномерному...
Попробуй запросить G[0][6], G[0][7], G[0][8] и посмотреть, что будет.
Только непонятно, как он при этом номер строки обрабатывает.

А вообще старый добрый step over+watch ничего интересного не показывает? Или он для S-функций не доступен? (я просто сам пока так не извращался).

#14 cucutnog

cucutnog
  • Новичок

  • Новичок
  • 2 сообщений
  • Пол:Мужчина

Отправлено 20.11.2012 - 19:32

Просмотр сообщенияpahan76 (20.11.2012 - 14:50) писал:

Только непонятно, как он при этом номер строки обрабатывает.

Мне тут подсказали.
Дело в том,что Матлаб хранит матрицу по столбцам. и засылает её в С-функцию тоже по столбцам. А надо то по строкам.
Если матрицу транспонирвоать и заслать в функцию,все получается хорошо




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей