matlab画分段函数?

这个小程序的背景是,有一个圆环被分成了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变量(因为最后显示只有一个数)

修改代码后,可以得到如下图形。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-01-19
第2个回答  2019-12-27
这是一个很典型的问题哈
问题出在这里:myfun的输入x你是当做单个数字来处理的,而实际你plot(x,myfun(x))里的x是一个数组,所以在myfun的if判断里,只取了第一个元素x(1)做判断,然后用判断的结果来计算所有的x(i)
你要写成这样,我写个简单点的,你自己照着改
x=-1:0.1:1;
y=x.*(x>0) - 2 * x .* (x<0)
plot(x,y)
另外,你可以在matlab里输入[1 2 3]>2,来看一下数组和单个数字比大小时,matlab是怎么处理的追问

非常感谢您的回答,我还是有点不太理解。
就是我上面那个小程序需要改循环体内部的东西吗?因为实际中Ns可能是100多,所以只能用循环来计算。如果单个计算并列写成y=x.*(x>0) - 2 * x .* (x<0)+......这种形式, 那人工计算过程就太麻烦了。

相似回答