weixin_45356227 2019-07-03 23:16 采纳率: 0%
浏览 140
已结题

MATLAB萌新跪求大佬们帮忙

想写一段分段函数,结果出图上面什么都没有,是哪里出现问题啦

t=(0:0.001:2)
for i=0:1:10 %10 Stück Bauteile
    x=0.1*(2*rand-1);  %x=Abweichung in X-Richtung
    if t>0.036.*i+0&t<=0.036.*i+sqrt((1+x)./180000)
        s=0.5*180000.*(t-0.036.*i).*(t-0.036.*i);
    elseif t>0.036.*i+sqrt((1+x)./180000)&t<=0.036.*i+2.*sqrt((1+x)./180000)
        s=1+x-0.5*180000.*(0.036.*i+2*sqrt((1+x)./180000)-t).^2;
    elseif t>0.036.*i+2.*sqrt((1+x)./180000)&t<=0.036+0.036.*i
        s=1+x
    end
    plot(t,s)
    hold on
end

图片说明
画出来的图应该是上面的图的样子,就是t轴每个区间是0.036秒,在这个区间先做匀加速运动然后再匀减速到速度为0,然后一直保持速度为0.下一个区间的运动在前一区间运动的基础上重复,但由于每段需要运动的位移不同,所以运动不是完全一样的,例如第一段运动的函数如下图
图片说明
其中影响每个区间的只有∆x变量,
不知道我能不能表达清楚。。。

  • 写回答

1条回答 默认 最新

  • 起个名字可真难啊 2019-07-04 11:09
    关注

    因为当你i=0时,进入不了if ,elseif 循环,所以s没有定义,直接运行会出错。另外,if等控制条件里t整个阵列作为判断?不应该是t(i)吗?
    但是你的i只有10个,不太懂你要画怎么用的分段函数,建议你把分段函数发上来给我看看。我改了一些,让这个程序能够跑通,但是划出来的图是不对,因为if控制条件不对
    clear all;
    close all

    t=(0:0.001:2);
    s=zeros(1,length(t));
    for i=1:1:length(t) %10 Stück Bauteile
    x=0.1*(2*rand-1); %x=Abweichung in X-Richtung
    if ( t(i)>0.036*i+0 ) && ( t(i)<=0.036*i+sqrt((1+x)./180000))
    s(i)=0.5*180000*(t(i)-0.036*i)*(t(i)-0.036*i);
    elseif t(i)>0.036*i+sqrt((1+x)./180000) & t(i)<=0.036*i+2*sqrt((1+x)./180000)
    s(i)=1+x-0.5*180000*(0.036*i+2*sqrt((1+x)./180000)-t(i)).^2;
    elseif t(i)>0.036*i+2*sqrt((1+x)./180000) & t(i)<=0.036+0.036*i
    s(i)=1+x;
    end
    end
    figure(1);clf;hold on
    plot(t,s);

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    clear all;
    close all

    t=0:0.001:0.072;
    nt=fix(t(end)/0.036);

    for ii=1:1:nt
    x=-0.1+0.2*rand(1,1);
    for i=0.036/0.001*(ii-1)+1:1:0.036/0.001*ii %10 Stück Bauteile
    % x=0.1*(2*rand-1); %x=Abweichung in X-Richtung
    if ( t(i)>=0.036*(ii-1) ) && ( t(i)<( 0.036*(ii-1)+sqrt((1+x)./180000)))
    if ii > 1
    s(i)=0.5*180000*(t(i)-0.036*(ii-1))*(t(i)-0.036*(ii-1))+tmp_s(ii-1);
    else
    s(i)=0.5*180000*(t(i)-0.036*(ii-1))*(t(i)-0.036*(ii-1));
    end
    elseif t(i)>( 0.036*(ii-1)+sqrt((1+x)./180000)) && ( t(i) < (0.036*(ii-1)+2*sqrt((1+x)./180000 ) ))
    if ii > 1
    s(i)=1+x-0.5*180000*(2*sqrt((1+x)./180000)-( t(i)-0.036*(ii-1))).^2+tmp_s(ii-1);
    else
    s(i)=1+x-0.5*180000*(2*sqrt((1+x)./180000)-( t(i)-0.036*(ii-1))).^2;
    end
    elseif t(i)>( 0.036*(ii-1)+2*sqrt((1+x)./180000)) && t(i)<= 0.036+0.036*(ii-1)
    if ii > 1
    s(i)=1+x+tmp_s(ii-1);
    else
    s(i)=1+x;
    end
    end
    end
    tmp_s(ii)=s(end);
    end
    figure(1);clf;hold on
    plot(t(1:end-1),s);
    % ylim([0 6000])

    评论

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝