Как я могу решить набор уравнений в Simulink?

#matlab #simulink #equation #symbolic-math

#matlab #simulink #уравнение #символьная математика

Вопрос:

Мне нужно решить набор из трех уравнений, для которых есть два решения. Поскольку ‘syms’ не будет работать в блоке библиотеки Simulink, я создал функцию .m, которая решает уравнения. Однако, когда я пытаюсь вызвать эту функцию с помощью coder.extrinsic, я получаю сообщение об ошибке «Вызовы coder.extrinsic могут отображаться только на верхнем уровне.», Что, как я предполагаю, связано с тем, что вызов выполняется в цикле «if».

Я не могу переместить вызов на верхний уровень, поскольку я определяю переменные для уравнений только в ‘else’ части цикла. Этот цикл else также является частью другого цикла if. Я показал функцию .m ниже. Переменные OMX, OMY, CX, CY, Target(1) и Target (2) различаются в зависимости от пути, по которому проходит код.

Есть ли другой способ обойти это?

 function [c] = Planner_Circles
% Create set of equations to define possible tangent circles between defined circle and target
syms xt yt rt; 
eqn1 = (xt-OMX)^2   (yt-OMY)^2 == (rt-OMR)^2;
eqn2 = (xt-CX)^2   (yt-CY)^2 == (rt R)^2;
eqn3 = (xt-Target(1))^2   (yt-Target(2))^2 == rt^2;
sol = vpasolve([eqn1, eqn2, eqn3], [xt, yt, rt]);
xSol = sol.xt;
ySol = sol.yt;
rSol = sol.rt; 
% This gives two solutions
rt=((rSol(1)));                                                            
xt=((xSol(1)));
yt=((ySol(1)));
rt2=((rSol(2)));
xt2=((xSol(2)));
yt2=((ySol(2)));   
% Choose largest radius for minimal curvature 
if rt<rt2;    
rt=rt2;
xt=xt2;
yt=yt2;
  

Комментарии:

1. Где coder.extrinsic в вашем коде? Вы можете вызвать фактическую функцию в любом месте. Но вам нужно объявить функцию с помощью coder.extrinsic на верхнем уровне.

2. Изначально у меня был вызов в цикле «if», который вернул ошибку «Вызовы coder.extrinsic могут отображаться только на верхнем уровне», поэтому я переместил вызов в начало кода, но это вернуло ошибки «неопределенная функция или переменная» для всех моих символьных переменных.

3. Я бы перенес все связанные символьные функции и переменные во внешнюю функцию и объявил всю функцию внешней.