qq_43431922 2021-03-14 00:14 采纳率: 0%
浏览 1615
已结题

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版本

  • 写回答

2条回答 默认 最新

  • qq_43431922 2021-03-14 13:05
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?