这个小程序的背景是,有一个圆环被分成了Ns个扇区,因为是电机方向,所以物理上,每一个扇区中心线所在半径Rspie是不一样的,这个半径与每一个扇区中心线的角度afa有关,如程序中表示的那样。fai是经过坐标变换以后,每一个扇区的中心线角度(电机方向一种计算方法,理由就不啰嗦了)。那么我想的是可以先计算每一个小扇区的原函数Br,再把所有扇区的Br函数求出来,相加在一起也就是BBB。Br后面乘 .*(x>=fai-pi/Ns & x<fai+pi/Ns) 是为了表示在不同区间原函数不一样。(我在网上找的分段函数表示方法,不知道这么用对不对)。求出总函数了,在给定变量x的范围,就可以画总函数BBB与x的曲线。但是程序一直不好用。
此外,我想问一下。我这种思路对不对?还是说不能求总函数
clear
clc
syms Ns Rm afa Rspie Rs wr t fai Ns x
Ns=9;
Rm=27;
Rs=28;
for i=1:Ns;
afa(i)=(2*pi/Ns)*(i-1);
Rspie=Rm+2*Rs*cos(afa);
fai=atan(Rs*afa);
Br=Rspie.*cos(x).*(x>=fai-pi/Ns & x<fai+pi/Ns);
BBB=sum(Br)
end
x=0:0.01:2*pi;
plot(x,BBB)
这个程序就相当于一个分段函数拼接在一起。运行时显示错误使用 plot, 无法从 sym 转换为 double,求指教!谢谢
代码出错的原因:由于计算sum(Br)得到不是一个数值,而是含有未知x变量,而plot绘图函数是不支持非数值数据,所以无法完成绘图任务。
代码分析和疑惑:
1、由于x值不明确,所以无法用分段函数求出Br值;
2、设置afa为数组,好像是没有理由的,我认为afa应该是一个数
3、输出sum(Br)值,应储存到BBB数组里,而不是赋值给BBB变量(因为最后显示只有一个数)
修改代码后,可以得到如下图形。
非常感谢您的回答,我还是有点不太理解。
就是我上面那个小程序需要改循环体内部的东西吗?因为实际中Ns可能是100多,所以只能用循环来计算。如果单个计算并列写成y=x.*(x>0) - 2 * x .* (x<0)+......这种形式, 那人工计算过程就太麻烦了。