MATLAB如何解决未定义与 'double' 类型的输入参数相对应的函数 'p'。

代码:


function [sys,x0,str,ts] = linePt_r001(t,x,u,flag)

switch flag
 case 0
  [sys,x0,str,ts] = mdlInitializeSizes;                                   % Initialization初始化
  
 case 2
  sys = mdlUpdates(t,x,u);                                                % 更新离散状态
  
 case 3
  sys = mdlOutputs(t,x,u);                                                % 计算输出
 
 case {1,4,9}                                                             %未使用的标志
  sys = [];
  
 otherwise
  error(['unhandled flag = ',num2str(flag)]);                             % 错误处理
end


%% Initialization初始化
function [sys,x0,str,ts] = mdlInitializeSizes

sizes = simsizes;                                                         % 读入初始化参数模板
sizes.NumContStates  = 0;                                                 % 连续状态个数
sizes.NumDiscStates  = 2;                                                 % 离散状态个数 
sizes.NumOutputs     = 2;                                                 % 输出变量个数
sizes.NumInputs      = 2;                                                 % 输入变量个数
sizes.DirFeedthrough = 1;                                                 %矩阵D不是空的。
sizes.NumSampleTimes = 1;                                                 % 设置采样时间
sys = simsizes(sizes);                                                    % 设置完后,赋给sys输出
x0 =[20;20];   
global U;
U=[0];

str = [];                                                                 % S将str设置为空矩阵。
ts  = [-1 0];                                                           % 采样周期写成-1表示继承其输入信号

%% Update the discrete states更新离散状态
function sys = mdlUpdates(t,x,u)
  
sys = x;

%% Calculate outputs计算输出
function sys = mdlOutputs(t,x,u)
    a=u(1);
    b=u(2);
    tic
%%  初始定义
   
x1=275;y1=71;
x2=299;y2=26.5;
X = p(1);
Y = p(2);
sys= [X;Y];%结果输出
toc

%% 自定义函数
function p = CrossPoint(x1,y1,x2,y2,a,b)

r = sqrt((x2-x1)^2+(y2-y1)^2);
if (abs(a)+abs(b)<r || abs(abs(a)-abs(b))>r)
    error('invalid a and b');
end
syms x y
eq1 = (x-x1)^2+(y-y1)^2-a^2;
eq2 = (x-x2)^2+(y-y2)^2-b^2;
[x,y] = solve(eq1,eq2,x,y);
x = double(x);
y = double(y);
[xs,ind]=max(x);
ys = y(ind);
p=[double(xs),double(ys)];

 

求如何解决!自定义函数不能在simulink里运行,matalbR2019b版本

楼上不行呢,我试过了,谢谢你,我找到方法啦,把初始定义里的p改为p1,就能得到我想要的了,主程序里的问题

60行改成function r=CrossPoint(x1,y1,x2,y2,a,b)试试?