代码:
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版本