MATLAB Undefined function 'sign' for input arguments of type 'sym'.
一方面是没有ploar这个函数吧??是polar吧??
另一方面是polar不能用符号变量画图的
m1=2,z1=13,k1=0.3;
syms x1 x2;
g1=(1-(k1*sin(x1))^2)^(1/2);
f1=int(g1,x1,0,pi/2);
y1=vpa(f1);
A=(pi*m1*z1)./(4*y1); %主动轮长轴
p1=A*(1-k1^2);
x2=0:0.01:2*pi;
r1=double(p1./(1-k1*cos(x2))); %主动轮方程
polar(x2,r1);
syms a real
min(a,a+1)
这样运行出来的错误也和你一样,这充分说明了min函数的参数只能是具体的数值,而不能使代数表达式。
首先,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)
结果如图:
屈沾善存: 通常symbolic math toolbox是随matlab安装时就装好的. 出现Undefined command/function 'sym'错误, 一种可能是路径没设置对,可以在File菜单里选择Set Path,里面有个Default恢复试试,或者手动添加symbolic math toolbox的目录也可以. ...
邕宁区18224666582: MATLAB中总是报错:Undefined function or variable 'C' - ?
屈沾善存: 检查test.m文件是否已经在路径里 首先确认是否在当前目录下 如果不是检查是否在path里
邕宁区18224666582: matlab运行时出现“ Undefined function or method 'shuu' for input arguments of type 'char'. - ?
屈沾善存: 既然他能用你不能用,只有一种可能,就是shuu这个函数路径没放对 应该设置当前目录到shuu这个m文件的路径下去 或者将m文件放到他默认的当前路径去
邕宁区18224666582: MATLAB报错:??? Undefined function or method 'polyfit' for input arguments of type 'double'. - ?
屈沾善存: 在我的版本中上面代码可以运行,一种可能是你的matlab缺少polyfit.m这个文件,请查阅你的电脑上是否有 安装目录 \toolbox\matlab\polyfun\polyfit.m 这个文件.如果没有的话,下载一个或者直接重装吧 (因为可能不止缺这么一个文件,为以后考虑还是重装更靠谱一点) 如果有这个文件.先检查一下 1.你自己代码中有没有错误,比如很多人容易把polyfit 写成 ployfit 而不自知.2.是不是在你的工作目录中有个自己写 polyfit.m 这样的文件(这种自己写的函数文件应该避免与一些常用命令同名) 都没有问题的话,也只能采取重装策略了.
邕宁区18224666582: matlab出现 Undefined function or variable 'cfit'.,如何解决,除了安装完整版的??
屈沾善存: cfit应该是属于曲线拟合工具箱的,建议补充安装该工具箱,或者安装完整版的Matlab
邕宁区18224666582: matlab出错了! undefined function for input augments - ?
屈沾善存: 你这个错误的原因在于,第一幅图中两个函数写在同一个m文件中了.注意matlab中一个m文件对应一个函数,且文件名必须为函数名.所以你可以拆分两个文件后再执行.另外,代码的具体细节没看,不保证还存在其他错误.
邕宁区18224666582: 在matlab中 出现如下错误 ??? Undefined function or variable 'odearguments'. 怎么回事?
屈沾善存: 就是你程序里出现了odearguments,但是它即不是函数(需要自己定义函数,或者matlab里自带),也不是变量(需要事先赋值),所以matlab不知道该怎么处理这个东西
邕宁区18224666582: 在matlab中出现 Undefined function or method 'polyadd' for input arguments of type 'double'.怎么办? - ?
屈沾善存: 这是非常常见的错误提示,如果你调用的polyadd是自己写的,确认一下polyadd所在的文件夹是不是你调用时所在的文件夹,调用的方式,假如polyadd是Matlab自带的,在你调用polyadd的文本上点右键->open "polyadd" 看看它是不是在你现有的Matlab包里面.
邕宁区18224666582: 在运行MATLAB程序时,提示Undefined function or variable "xFrameLength".该如何解决 - ?
屈沾善存: xPaddedFrameLength=xFrameLength; 这个赋值语句中xFrameLength没有定义,你要用的话需要提前给它赋值
邕宁区18224666582: MATLAB在运行的时候出现??? Undefined function or method 'uiopen' for input arguments of type 'char'. - ?
屈沾善存: 说明的意思是你的max函数输入参数为符号表达式. max不支持符号运算,max只能支持数字矩阵作为输入.1. MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交...