matlab 中如何定义周期函数
只是要结果的话,没必要画圆,只要求出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<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
matlab中的数组索引不能是0 for n = 0:1:1108 x1(n+1)=0.0001*xn(mod(n+1,length(xn))+1)+20*cos(2*pi*4000*n)+15*cos(2*pi*25000*n)+0.1*randn;end
其实 MATLAB里面有直接定义三角波的函数的
就是 sawtooth(t,width) 其用法跟sin(t)差不多.
比方说你的条件是x=1-abs(t) (-2<t<2)
下面是代码:
clear all
clc
t=-4:0.01:4;
f=sawtooth(1/2*pi*(t+2),0.5);
plot(t,f);
grid on;
最后附上一些函数吧
特殊函数
boxcar() 矩形窗
triang() 三角窗
tripuls() 非周期三角脉冲
sawtooth() 锯齿波
rectpuls() 非周期矩形脉冲
square() 方波
sinc() sinc函数
diric() 冲击函数
只是要结果的话,没必要画圆,只要求出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<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
其实 MATLAB里面有直接定义三角波的函数的
就是 sawtooth(t,width) 其用法跟sin(t)差不多.
比方说你的条件是x=1-abs(t) (-2<t<2)
下面是代码:
clear all
clc
t=-4:0.01:4;
f=sawtooth(1/2*pi*(t+2),0.5);
plot(t,f);
grid on;
最后附上一些函数吧
特殊函数
boxcar() 矩形窗
triang() 三角窗
tripuls() 非周期三角脉冲
sawtooth() 锯齿波
rectpuls() 非周期矩形脉冲
square() 方波
sinc() sinc函数
diric() 冲击函数
首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是:
function [输出变量] = 函数名称(输入变量)
% 注释
% 函数体
如下所示,是编写的一个求1到n之和的求和函数 eg_sum,按照上述格式,编写代码如下并保存文件,注意文件命名时不能以数字开头:
function [s] = eg_sum( n )
% calculate the sum of 1..n
s = 0;
for i = 1:n
s = s + i;
end
回到控制台Command Window(主界面),注意要使用之前保存的函数文件名来调用函数,如下所示:
>> clear
>> a = eg_sum(10)
运行结果: a = 55
修改函数名为:my_sum 调用时用文件名调用就好,如下所示:
>> b = eg_sum(10)
运行结果: b = 55
matlab应该没有现成的周期函数的,可以采用mod(t,4)进行计算。
>> t=-100:100;
>> x =1-abs(mod(t,4));
>> plot(t,x);
督周太宁:[答案] 其实 MATLAB里面有直接定义三角波的函数的就是 sawtooth(t,width) 其用法跟sin(t)差不多.比方说你的条件是x=1-abs(t) (-2
公安县13518156886: matlab 中如何定义周期函数 - ?
督周太宁: 只是要结果的话,没必要画圆,只要求出R与A,B之间对应关系即可.可以用迭代法或者代数法求解.迭代法就是从初始半径开始,不断累加0.5去尝试,并且不断交替变换A,B值,直到到达目标半径.代数法就是算出半径与输出之间的公式关系...
公安县13518156886: 怎么用matlab定义分段函数还有周期函数呢,求指导 - ?
督周太宁: 分段函数这样定义例如f(x)= -x (x0)f = (-x).*(x0)当然也可以用if语句
公安县13518156886: matlab怎么画周期函数 - ?
督周太宁: clc;clear t=-1:0.01:2; y=2*rectpuls(t); plot(t,y); axis([-1 2 -0.3 2.5]);grid on;
公安县13518156886: 怎么用matlab定义分段函数还有周期函数呢,求指导?
督周太宁: 分段函数这样定义例如f(x)= -x (x<=0) x^2(x>0)f = (-x).*(x<=0) + x^2.*(x >0)当然也可以用if语句
公安县13518156886: matlab画周期分段函数 - ?
督周太宁: 在第一个周期内,该函数是分两段的.先计算第一段,示例: f = 262; T = 1/f; fs = 1/8000;ts1 = 0:fs:T/2; % 时间采样点序列 y1 = 4/3*ts1-1; 类似地可以得到ts2和y2. 最后: ts = [ts1, ts2]; % 拼接两段 y = [y1, y2]; plot(ts, y);
公安县13518156886: matlab里怎么定义周期离散函数 - ?
督周太宁: % by dynamic of Matlab技术论坛% see also http://www.matlabsky.com% contact me matlabsky@gmail.com% 2010-03-02 15:03:28%这个好办t=152;% 你想计算的时间点f=[5 8 9 1 2 3]% 给出...
公安县13518156886: MATLAB如何给一维数组添加周期函数? - ?
督周太宁: matlab中的数组索引不能是0 for n = 0:1:1108 x1(n+1)=0.0001*xn(mod(n+1,length(xn))+1)+20*cos(2*pi*4000*n)+15*cos(2*pi*25000*n)+0.1*randn; end
公安县13518156886: 在matlab中怎么定义函数 - ?
督周太宁: function my=xj(x) my=x+1;%举例说明 在命令窗口调用时 xj(3) 输出就为4,因为x=3,my=x+1 你没有定义函数表达式,而且没有输入参数
公安县13518156886: matlab 周期为1HZ f(t)=2t - 0.5《t《0.5 周期函数画法 - ?
督周太宁: t = -0.5 : 0.01 : 0.5-0.01; f = 2 * t - 0.5; f_total = repmat (f, 1, 10); t_total = -0.5 : 0.01 : 0.5 + 9 - 0.01; plot(t_total, f_total)******************************************* 画了10个周期 t=0:0.1:10这句话的意思是:将区间0~10划分为若干等分,每份的长度为0.01...