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,求指教!谢谢 展开
此外,我想问一下。我这种思路对不对?还是说不能求总函数
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,求指教!谢谢 展开
3个回答
东莞大凡
2024-08-07 广告
2024-08-07 广告
在东莞市大凡光学科技有限公司,我们利用Halcon软件处理机器视觉项目时,会用到自定义标定板以满足特定需求。Halcon支持用户根据实际应用场景自定义标定板形状与标记点。这不仅可以灵活应对不同工作环境,还能提高标定精度。通过调整圆点数量、间...
点击进入详情页
本回答由东莞大凡提供
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一个很典型的问题哈
问题出在这里: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是怎么处理的
问题出在这里: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)+......这种形式, 那人工计算过程就太麻烦了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询