作业帮 > 数学 > 作业

求解答matlab问题

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:数学作业 时间:2024/04/29 20:19:06
求解答matlab问题
输入一个正整数n,n作为初始数据,反复计算,知道1 为止
如果n为偶数,则这一位上为n/2
如果n为奇数,则这一位上为3*n+1
例如 :n =17,生成一个数列
52→26→13→40→20→10→5→16→8→4→2→1
考虑所有第一个数小于等于n的数列
1.求不同初始值,生成数组的长度
2.最大数组长度和他对应的初始值
3.出现频率最高的数组长度和次数
4.长度是18的数列的个数
N的区间设置成11248-11348
求解答matlab问题
参考代码可使用我之前在另一个问题计算单个n对应数列长度的函数len_series来处理:N = 11248:11348;
L = N*0;
for i=1:length(N)
    n=N(i);
    L(i) = len_series(n);
end

% 1.求不同初始值,生成数组的长度
clf
plot(N,L,'.-')
xlim([min(N) max(N)])
xlabel('初始值');
ylabel('数组长度');

% 2.最大数组长度和他对应的初始值
[Lmax,inx] = max(L)
Nmax = N(inx);
hold on
plot(Nmax,Lmax,'rp')
text(Nmax,Lmax,sprintf('(%i,%i)',Nmax,Lmax))
disp(N(L==Lmax))

% 3.出现频率最高的数组长度和次数
V=unique(L);
F=arrayfun(@(v)sum(L==v),V);
figure
bar(V,F)
[Fmax,inx] = max(F);
disp([V(inx) Fmax])
xlabel('数组长度');
ylabel('出现次数');

% 4.长度是18的数列的个数
L18 = sum(L==18) 结果及说明1、不同初始值对应的生成数组长度如图所示2、最大数组长度为206,对应的初始值有5个,分别是:11263,11273,11289,11346,11347 3、出现频率最高的数组长度是87,共出现24次.各种长度的出现次数如图:4、不存在长度是18的数列.在此区间内,数列长度最小为25. 附:函数len_series代码(稍有改动)function len = len_series(n)
A = n;
while abs(n-1) > eps
    if ~rem(n,2)
        n = n/2;
    else
        n = n*3+1;
    end
    A(end+1) = n;
end
fprintf('%i → ',A(1:end-1));
fprintf('%i\n',A(end));
len = length(A);
再问: 麻烦问下script要怎么写呢
再答: 没看明白你要问什么 -_-||||
再问: 这四个题老师没要求plot 只需要把数列长度什么的呈现出来就好~ 所以麻烦告知下script~(~ ̄▽ ̄)~
再答: 你看不懂MATLAB程序?我的回答最上面的就是解题的脚本,其中需要调用的函数在最后给出。 1.求不同初始值,生成数组的长度N和L分别是不同初始值以及对应的生成数组长度 2.最大数组长度和他对应的初始值Lmax是最大数组长度,N(L==Lmax)是对应的初始值 3.出现频率最高的数组长度和次数V(inx)和Fmax分别出现频率最高的数组长度和次数 4.长度是18的数列的个数L18 就是