永发信息网

matlab 如何定义如下周期函数

答案:1  悬赏:0  手机版
解决时间 2021-03-11 15:35
  • 提问者网友:趣果有间
  • 2021-03-11 08:42
matlab 如何定义如下周期函数
最佳答案
  • 五星知识达人网友:刀戟声无边
  • 2021-03-11 09:25
只是要结果的话,没必要画圆,只要求出R与A,B之间对应关系即可。可以用迭代法或者代数法求解。迭代法就是从初始半径开始,不断累加0.5去尝试,并且不断交替变换A,B值,直到到达目标半径。代数法就是算出半径与输出之间的公式关系,然后将要求的R直接带入求解。(如果你非要画圆,那也只是画图技巧上的问题,和算法没关系)


代码及效果图如下:
clc
clear all
close all


%== 初始值 ==%
r0 = 1;    % 最里面那个圆的半径
d = 0.5;   % 半径增量
%===========%


R = 4; % 要求解的半径


%== 迭代法 ==%
K = 1;   % 标志位,1-输出A=2,B=1;0-输出A=1,B=2
N = 1;   % 从里往外数第N个圆
r = r0;
while(r    N = N + 1;
    K = ~K;
    r = r0+(N-1)*d;
end


if(K==1)
   A = 2;
   B = 1;
else
    A = 1;
    B = 2;
end

fprintf('R=%f, A=%d, B=%d
', R, A, B);%===========%


%== 代数法 ==%
% 可以看出,第奇数个圆输出都为A=2,B=1;第偶数个圆输出都为A=1,B=2
N_cal = (R-r0)/d+1;  % 求出是第几个圆
if(mod(N_cal,2)==0)
    A_o = 1; B_o = 2;
else
    A_o = 2; B_o = 1;
end

fprintf('R=%f, A_o=%d, B_o=%d
', R, A_o, B_o);%============%


%== 如果你想看不同R下输出变化 ==%
R = 1:0.5:5; % 查看R从1~20变化时输出
A_o_m = zeros(1, length(R));
B_o_m = zeros(1, length(R));
N_cal_m = (R-r0)./d+1;  % 求出每个R分别对应第几个圆
for i=1:length(R)
    if(mod(N_cal_m(i),2)==0)
        A_o_m(i) = 1; B_o_m(i) = 2;
    else
        A_o_m(i) = 2; B_o_m(i) = 1;
    end
end


figure
A_B = [A_o_m; B_o_m]';
h = stem(R,A_B);
set(h(1),'MarkerFaceColor','blue')   % 蓝色-A
set(h(2),'MarkerFaceColor','red','Marker','square')  % 红色-B

追问如果同样的模型,转换成直角坐标呢?追答和什么坐标系没关系,关键是R与A,B之间的关系,这个关系不变结果都一样追问不变,模型是周期圆环,但是带入计算我要用直角坐标?在?如果mod后不是整数怎么处理追答1、所谓的圆环只是题目设定而已,真正有用的只是半径R
2、所谓极坐标、直角坐标系都只是从不同的描述角度描述同一个事物,可以相互转换的,所以没有本质差异
3、对于mod后不是整数的问题,说明所求的半径是处于圆环内部。这时候就看题设的要求 ,如果没有特别设定的话,那整个圆环里任何一个半径的圆对应的A,B都相同。那么只要判定是在哪个圆环即可,因此先要对N_cal 进行取整处理,向上取整或者向下取整都可以,后续判断语句做相应微调即可

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯