2014-11-28 3 views
-1

Когда я использую блок функций Matlab в Simulink. Я использую другую функцию matlab, которая содержит тип ячейки. Но simulink сообщило об ошибке из-за ячейки. Как этого избежать? Я вроде как не хочу изменять функцию, потому что у всех моих функций есть ячейка, и это большая работа, чтобы изменить их все. сообщение Ошибка: Simulation 28 Очистить Сохранить 11:26:28 PM 27 ноября 2014 Прошедшее: 7 сек1 Конструктор cell() не поддерживается для генерации кода

клеток() конструктор не поддерживается для генерации кода

Функция 'RealCo.m' (# 56.102.111), строка 5, столбец 4: "ячейка (9,1)" Запустить диагностический отчет. Компонент: Функция MATLAB | Категория: Coder ошибка

Моя функция:

function Co=RealCo(q) 
l=60; 
%%%Coordinate Calculation 
%Guess value adopt the unique position below 
Co=cell(9,1); 
for i=1 
    Co{i}=[0;0;0]; 
end 

Co{1}=[sqrt(3)*l/4;0;0]; 
Co{2}(1)=-sqrt(3)*l/4; 
Co{2}(2)=l/2; 
Co{2}(3)=0; 
Co{3}(1)=Co{2}(1); 
Co{3}(2)=-l/2; 
Co{3}(3)=0; 

Co{4}=[sqrt(3)*l/4;-l/2;sqrt(3)*l/2]; 
Co{5}=Co{4}; 
Co{5}(2)=-Co{5}(2); 
Co{6}=Co{4}; 
Co{6}(1)=-Co{6}(1); 
Co{6}(2)=0; 

for i=7:9 
    Co{i}=Co{i-6}; 
    Co{i}(3)=sqrt(3)*l; 
end 

guess=zeros(27,1); 
for i=1:3:27 
    %When i=1,j=1 i=4,j=2 i=7,j=3 ... 
    j=(i-rem(i,3))/3+1; 
    guess(i)=Co{j}(1); 
    guess(i+1)=Co{j}(2); 
    guess(i+2)=Co{j}(3); 
end 

%Use fsolve to solve the system based on current value of q 
[email protected](R)Coor(R,q); 
[result, fval, exit, output]=fsolve(fC,guess); 
% result 
% fval 
% eqns(guess) 
% output 
for i=1:3:27 
    %When i=1,j=1 i=4,j=2 i=7,j=3 ... 
    j=(i-rem(i,3))/3+1; 
    Co{j}=[result(i);result(i+1);result(i+2)]; 
end 

ответ

1

Пожалуйста, ознакомьтесь с помощью MATLAB Code Generation Manual. Там, в общих ограничений разделе , ясно говорится, что

Вы не можете использовать клеточные массивы в своем коде.

Решение этого вопроса представлено в MATLAB Central: вам необходимо заменить массивы ячеек, например. Структуры. Как я вижу из вашего кода, каждая запись вашей переменной Co представляет собой массив 1x3 или 3x1. Поэтому легко можно заменить Co матрицей 9x3.

Конечно, это довольно определенная работа, но это всего лишь ограничения кодера MATLAB.