查看: 1943|回复: 8|关注: 0

[已解决] 未定义与 'double' 类型的输入参数相对应的函数 'int'

[复制链接]

新手

14 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
我需要解一个线性定常系统的方程,所以需要求矩阵的积分,但是出现了“未定义与 'double' 类型的输入参数相对应的函数 'int'”的问题,int函数在matlab里面不是本来就自带的有吗?请问是不是我的程序有错?
QQ图片20180514165344.png

论坛优秀回答者

入门

203 麦片

财富积分


50500


16

主题

352

帖子

41

最佳答案
  • 关注者: 8
发表于 2018-5-14 17:00:58 | 显示全部楼层
int被识别成了函数名吧? 你改成single试试报错吗

新手

14 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2018-5-14 18:16:25 | 显示全部楼层
洛克先生___ 发表于 2018-5-14 17:00
int被识别成了函数名吧? 你改成single试试报错吗

您好,single函数没用过,请问具体需要怎么改?

论坛优秀回答者

入门

203 麦片

财富积分


50500


16

主题

352

帖子

41

最佳答案
  • 关注者: 8
发表于 2018-5-15 08:26:13 | 显示全部楼层
kuangkaii 发表于 2018-5-14 18:16
您好,single函数没用过,请问具体需要怎么改?

倒数第二行,将int改为single  看看报错吗

新手

14 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2018-5-15 14:57:11 | 显示全部楼层
洛克先生___ 发表于 2018-5-15 08:26
倒数第二行,将int改为single  看看报错吗

按您的方法改了以后不会报错,但是single并不是求积分的函数,我该怎么做才能顺利的求这个矩阵的积分

论坛优秀回答者

入门

203 麦片

财富积分


50500


16

主题

352

帖子

41

最佳答案
  • 关注者: 8
发表于 2018-5-15 15:13:12 | 显示全部楼层
kuangkaii 发表于 2018-5-15 14:57
按您的方法改了以后不会报错,但是single并不是求积分的函数,我该怎么做才能顺利的求这个矩阵的积分 ...

quad函数试试

论坛优秀回答者

入门

203 麦片

财富积分


50500


16

主题

352

帖子

41

最佳答案
  • 关注者: 8
发表于 2018-5-15 15:37:15 | 显示全部楼层 |此回复为最佳答案
kuangkaii 发表于 2018-5-15 14:57
按您的方法改了以后不会报错,但是single并不是求积分的函数,我该怎么做才能顺利的求这个矩阵的积分 ...

首先你要知道,Matlab 中int()这个函数是对括号中的表达式积分,所以要限定义一个负号变量,比如x,程序如下:
x = sym('x');
y = int(x);
程序结果是:
y = 1/2*x^2
对于你的问题,要先定义n,就可以了

举个例子:
syms x;
int(x)
int(x,0,1)
得到的结果如下:
ans =

        x^2/2
ans =

        1/2
syms表示定义一个符号变量,符号变量区别于数值型的那些变量,用于进行公式的化简和计算。
int表示积分,第一个算的是不定积分,当然你也可以像第二句那样计算定积分,写入上下限。当然也可以对其中的某一个变量做积分,比如,你可以用这样的命令:
syms x z;
int(x/(1 + z^2), z)
结果:
ans =

        x*atan(z)

新手

14 麦片

财富积分


050


6

主题

16

帖子

0

最佳答案
 楼主| 发表于 2018-5-15 16:09:24 | 显示全部楼层
洛克先生___ 发表于 2018-5-15 15:37
首先你要知道,Matlab 中int()这个函数是对括号中的表达式积分,所以要限定义一个负号变量,比如x,程序 ...

之后我定义了t为变量,int报错的问题解决。但是现在报错为“Output returned by S-function 'PWA' in 'ceshi/S-Function1' during flag=3 call must be a real vector of length 1”。但是根据我公式中的矩阵计算,最后计算出的输出就是一个常数,一行一列,我猜测是我在将t定义为未知量后,我想要的是每个步长计算一次积分,但是有可能添加了syms t后矩阵并没有计算出每个当前时刻下的值,所以最后没有算出最终的输出导致了报错。下面是输出函数的程序:
function sys=mdlOutputs(t,x,u)
A=[0 -10000;1000 -20];
B=[10000;0];
C=[0 1];
tao=0.0000125;
O=expm(A*tao);
syms t;
v=tao-t;
eAv=expm(A*v);
f=(eAv)*B*300;
Intf=int(f);
T=Intf;
Vo=u(2);
Y2ref=Vo;
i=u(1);
%Dd0=u(3);
d=u(3);
X1=[i;Vo];
if 0<=d<1/3
    X2=(0^3)*X1+3*(0^2)*T*d;
    Y2=C*X2;
    s1=(3*C*(O^2)*T)'*(3*C*(O^2)*T)+1;
    Dd0=(3*C*(O^2)*T)'*1*(Y2ref-C*(0^3)*X1-3*C*(0^2)*T*d)/s1;
    Dd=Dd0;
    D=d+Dd;
    sys=D;
elseif 1/3<=d<2/3
        X2=(0^3)*X1+3*0*T*(d)+(0^2)*T-O*T;
        Y2=C*X2;
        s1=(3*C*(O^2)*T)'*(3*C*(O^2)*T)+1;
        Dd0=(3*C*(O^2)*T)'*1*(Y2ref-C*(0^3)*X1-3*C*(0^2)*T*d-C*((0^2)*T-O*T))/s1;
        Dd=Dd0;
        D=d+Dd;
        sys=D;
else
        X2=(0^3)*X1+3*T*(d)+(0^2)*T+O*T-2*T;
        Y2=C*X2;
        s1=(3*C*(O^2)*T)'*(3*C*(O^2)*T)+1;
        Dd0=(3*C*(O^2)*T)'*1*(Y2ref-C*(0^3)*X1-3*C*(0^2)*T*d-C*((0^2)*T+O*T-2*T))/s1;
        Dd=Dd0;
        D=d+Dd;
        sys=D;
end

论坛优秀回答者

入门

203 麦片

财富积分


50500


16

主题

352

帖子

41

最佳答案
  • 关注者: 8
发表于 2018-5-15 16:21:35 | 显示全部楼层
本帖最后由 洛克先生___ 于 2018-5-16 08:34 编辑
kuangkaii 发表于 2018-5-15 16:09
之后我定义了t为变量,int报错的问题解决。但是现在报错为“Output returned by S-function 'PWA' in 'c ...

重新发个贴吧  要不大神们看不到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表