matlab画分段函数?

这个小程序的背景是,有一个圆环被分成了Ns个扇区,因为是电机方向,所以物理上,每一个扇区中心线所在半径Rspie是不一样的,这个半径与每一个扇区中心线的角度afa有关,如... 这个小程序的背景是,有一个圆环被分成了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,求指教!谢谢
展开
 我来答
lhmhz
高粉答主

2019-12-27 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17020

向TA提问 私信TA
展开全部

代码出错的原因:由于计算sum(Br)得到不是一个数值,而是含有未知x变量,而plot绘图函数是不支持非数值数据,所以无法完成绘图任务。

代码分析和疑惑:

1、由于x值不明确,所以无法用分段函数求出Br值;

2、设置afa为数组,好像是没有理由的,我认为afa应该是一个数

3、输出sum(Br)值,应储存到BBB数组里,而不是赋值给BBB变量(因为最后显示只有一个数)

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

东莞大凡
2024-08-07 广告
在东莞市大凡光学科技有限公司,我们利用Halcon软件处理机器视觉项目时,会用到自定义标定板以满足特定需求。Halcon支持用户根据实际应用场景自定义标定板形状与标记点。这不仅可以灵活应对不同工作环境,还能提高标定精度。通过调整圆点数量、间... 点击进入详情页
本回答由东莞大凡提供
称马你0M
高粉答主

2020-01-19 · 繁杂信息太多,你要学会辨别
知道答主
回答量:22.3万
采纳率:8%
帮助的人:1.1亿
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夔自浪7111
2019-12-27 · TA获得超过6179个赞
知道大有可为答主
回答量:1万
采纳率:62%
帮助的人:680万
展开全部
这是一个很典型的问题哈
问题出在这里: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)+......这种形式, 那人工计算过程就太麻烦了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式