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 展开
主要两个问题,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 展开
1个回答
展开全部
首先,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)
结果如图:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询