MATLAB Undefined function 'sign' for input arguments of type 'sym'.

我是这方面菜鸟,有基础错误请谅解。主要两个问题,qa是随时间变化的,但不随a值变化,q0是三维变化的,现在用qa和q0*a*0.0005相减,mesh这样算有没有问题?s... 我是这方面菜鸟,有基础错误请谅解。
主要两个问题,qa是随时间变化的,但不随a值变化,q0是三维变化的,现在用qa和q0*a*0.0005相减,mesh这样算有没有问题?
syms t
omg=135*pi/30,D=76,d=30,lmt=0.112,r=52;
jd1=omg*t,jd2=jd1+(2*pi/3),jd3=jd2+(2*pi/3);
A1=pi*D^2/4;
A2=A1-pi*d^2/4;
q1=A1*r*omg*(sin(jd1)+lmt/2*sin(2*jd1)).*(sign(sin(jd1))+1)/2+A2*r*omg*(sin(jd1)+lmt/2*sin(2*jd1)).*(sign(sin(jd1))-1)/2;
q2=A1*r*omg*(sin(jd2)+lmt/2*sin(2*jd2)).*(sign(sin(jd2))+1)/2+A2*r*omg*(sin(jd2)+lmt/2*sin(2*jd2)).*(sign(sin(jd2))-1)/2;
q3=A1*r*omg*(sin(jd3)+lmt/2*sin(2*jd3)).*(sign(sin(jd3))+1)/2+A2*r*omg*(sin(jd3)+lmt/2*sin(2*jd3)).*(sign(sin(jd3))-1)/2;
qa=(q1+q2+q3)/1000000000;
P0=4.94-0.617*cos(43.88*t)+0.1106*sin(43.88*t)-0.4076*cos(2*43.88*t)+0.052*sin(2*43.88*t);
dP0=eval(['@ (t)' char(diff(P0))]);
T=linspace(0,1.5,1000);
A=linspace(2000,50000,20);
X=zeros(1000,20);
for k=1:20
a=A(k);
dx=@ (t,x)[x(2); 10*dP0(t)-69.09*a*x(1)-0.5*x(2)];
[t,x]=ode45(dx,T,[0 0]);
X(:,k)=x(:,1);
end
mesh(A,T,qa-X*a*0.0005)
xlabel a; ylabel t
展开
 我来答
tianxiawulang
推荐于2016-09-22 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2653万
展开全部

首先,t是符号变量(sym),对于符号变量是没有定义符号函数sign的(也不尽然,从R2013a开始,也有了sym对象的sign函数)。

 

其次,【用qa和q0*a*0.0005相减】肯定是有问题的,原因包括几方面:

1、现在的qa是符号表达式,和矩阵X相减是没道理的;

2、即使qa中的t用T代替,得到的qa是向量,也无法和矩阵相减;

3、X*a应该也是没意义的,因为a在循环体外只是一个固定的数(最后一次循环的值),乘以a是要达到什么目的?如果要乘也应该在循环体里面乘吧。

 

把代码顺序稍微调整一下(只为了说明问题,为减少时间消耗,循环次数改为5次):

syms t
P0=4.94-0.617*cos(43.88*t)+0.1106*sin(43.88*t)-0.4076*cos(2*43.88*t)+0.052*sin(2*43.88*t);
dP0=eval(['@ (t)' char(diff(P0))]);
T=linspace(0,1.5,1000);
N = 5;
A=linspace(2000,50000,N);
X=zeros(1000,N);
for k=1:N
    a=A(k);
    dx=@ (t,x)[x(2); 10*dP0(t)-69.09*a*x(1)-0.5*x(2)];
    [t,x]=ode45(dx,T,[0 0]);
    X(:,k)=x(:,1);
end
 
t=T;
omg=135*pi/30;D=76;d=30;lmt=0.112;r=52;
jd1=omg*t;jd2=jd1+(2*pi/3);jd3=jd2+(2*pi/3);
A1=pi*D^2/4;
A2=A1-pi*d^2/4;
q1=A1*r*omg*(sin(jd1)+lmt/2*sin(2*jd1)).*(sign(sin(jd1))+1)/2+A2*r*omg*(sin(jd1)+lmt/2*sin(2*jd1)).*(sign(sin(jd1))-1)/2;
q2=A1*r*omg*(sin(jd2)+lmt/2*sin(2*jd2)).*(sign(sin(jd2))+1)/2+A2*r*omg*(sin(jd2)+lmt/2*sin(2*jd2)).*(sign(sin(jd2))-1)/2;
q3=A1*r*omg*(sin(jd3)+lmt/2*sin(2*jd3)).*(sign(sin(jd3))+1)/2+A2*r*omg*(sin(jd3)+lmt/2*sin(2*jd3)).*(sign(sin(jd3))-1)/2;
qa=(q1+q2+q3)/1000000000;
plot(T,qa,T,X*a*0.0005)

先画曲线看一下:

图中的那条水平的蓝线就是qa,另外几条是不同a取值的q0*a*0.0005曲线,可以看到根本不在一个数量级上,相减有意义吗?

 

如果再按照上面说的,把【*a*0.0005】放在循环体里面,即

X(:,k)=x(:,1);

改成

X(:,k)=x(:,1)*a*0.0005;

再把

plot(T,qa,T,X*a*0.0005)

改成

plot(T,qa,T,X)

结果如图:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式