Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用嵌套for循环并检查数字是偶数还是奇数_Matlab - Fatal编程技术网

Matlab 使用嵌套for循环并检查数字是偶数还是奇数

Matlab 使用嵌套for循环并检查数字是偶数还是奇数,matlab,Matlab,我正在写一个代码来检查双极RZ。如果你得到一个0,没有任何事情发生,但是如果有1个,那么在中间从正电压到0,然后从负电压到0电压发生过渡。 因此,我处理这个问题的方法是,例如,如果你有b=[01101]。你计算你有多少个。然后你把这些放在for循环中并添加它们。然后使用if语句检查加法后的个数是偶数还是奇数,然后进行转换。 问题是我使用另一个for循环,for循环检查偶数和奇数进入另一个for循环 同样为了使用iseven和isodd,我在网上搜索。他们有MATLAB中的代码。否则,该功能将不起

我正在写一个代码来检查双极RZ。如果你得到一个0,没有任何事情发生,但是如果有1个,那么在中间从正电压到0,然后从负电压到0电压发生过渡。 因此,我处理这个问题的方法是,例如,如果你有b=[01101]。你计算你有多少个。然后你把这些放在for循环中并添加它们。然后使用if语句检查加法后的个数是偶数还是奇数,然后进行转换。 问题是我使用另一个for循环,for循环检查偶数和奇数进入另一个for循环

同样为了使用iseven和isodd,我在网上搜索。他们有MATLAB中的代码。否则,该功能将不起作用。以下是链接:

如果有人回复,我会非常饱。 多谢各位

% for ibs, I'm using ibs=[0 1 0 0 1 1 0 0 0 1 1]

function output = lc_bi(ibs,tlc, Rb)

output=1;
numofbits=length(ibs);


%  Bipolar RZ coding

if isequal(tlc,'RZ')

    %for loop to calculate 1's
    y=0;
    for k=1:length(ibs)
        if ibs(k)==1
            y=y+1;
        end
    end

    oness=ones(1,y); %converting it in to list of ones


    samptime= 0.001;
    endtime= numofbits-samptime;
    t=0:samptime:endtime; 

    cycle= floor(length(t)/(numofbits-1));
    j=1;

    tran_in_middle= j+cycle/2;

    bit=1;
    for i=0:samptime:endtime
        if (floor(i)+1 ~=bit)
            tran_in_middle=j+cycle/2;
            bit=bit+1;
        end

        if (ibs(bit)==1)
            if(j< tran_in_middle)

                %put the loop her to check if itseven or odd
                %using the list of ones here and adding them to check for even and odd
                g=0;
                for h=1:length(oness)
                    g=g+1;
                    if isodd(g)==true
                        s(j) =Rb;
                        disp('+')
                    elseif isodd(g)==false

                        s(j)=-Rb;
                        disp('-')
                    end
                end
            else
                s(j) = 0;
            end

        end
        j=j+1;
    end

    plot(t,s);
    axis([0 numofbits -(Rb+1) (Rb+1)]);
    xlabel ('Time');
    ylabel ('Voltage');

end

扩展评论而不是回答

我既不理解你的代码也不理解你的问题,但从你向我们展示的内容来看,我担心你根本没有“得到”Matlab。例如代码

%for loop to calculate 1's
y=0;
for k=1:length(ibs)
    if ibs(k)==1
        y=y+1;
    end
end
这似乎是一种费劲的计算方法

y = sum(ibs)
我怀疑,尽管我不确定,您代码中的其他循环也可以以类似的方式被替换,您应该更深入地研究一些基本文档。虽然像C这样的语言需要程序员编写循环来迭代向量和数组,但Matlab提供了大量的数组函数集合。sum只是一个基本的例子

声明,如

if isodd(g)==true
我也很担心。在Matlab和我曾经使用过的任何其他编程语言中,这都是一种冗长的写作方式

if isodd(g)
我不太担心你可能会写冗长的代码,但你最初的结构让人怀疑你不是很“得到”布尔人,这一点得到了我对初级程序员和非专业程序员经验的支持

然后将if语句的另一个分支写为

elseif isodd(g)==false
由于将g设置为整数值,因此根本不需要elseif,如果g不是奇数,唯一的可能性是g是偶数,因此可以用更简洁、更清晰的语句替换该语句

else

我认为你应该完全重写你的代码并用Matlab编写;到目前为止,您所拥有的可能是用Matlab编写的C语言。

这里有很多代码,但没有指出问题所在。要理解你想做什么也很困难。也许您可以为您的示例输入提供一个示例输出?我认为您提到的循环是y=sumibs==1,而不仅仅是sum(如果ibs不是布尔值)。根据OP的定义,ibs只包含0和1,因此不需要进行相等性测试,而且它是否使代码更容易理解也没有意义。我想没有。