matlab 中如何定义周期函数

具体点:已知周期为T=4的三角波,在第一周期内的表达式为:x=1-abs(t) (-2<t<2)

其实 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()    冲击函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-24

只是要结果的话,没必要画圆,只要求出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\n', 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\n', 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

第2个回答  2020-04-04
其实 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() 冲击函数
第3个回答  推荐于2016-10-19
首先建立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
第4个回答  2009-12-15
matlab应该没有现成的周期函数的,可以采用mod(t,4)进行计算。

>> t=-100:100;
>> x =1-abs(mod(t,4));
>> plot(t,x);
相似回答