用matlab来编写一个函数计算:f(x)在x《=1时,f(x)=x,当x>1&x<10时f(x)=2*x-1,当x>=10时,f(x)=3*x;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用matlab来编写一个函数计算:f(x)在x《=1时,f(x)=x,当x>1&x<10时f(x)=2*x-1,当x>=10时,f(x)=3*x;相关的知识,希望对你有一定的参考价值。

并作出该函数在x在[-1,12]区间的曲线;注意f(x)是个分段函数

m文件如下

x=-1:0.00001:12;

y=x.*(x<=1)+(2*x-1).*(x>1&x<10)+3*x.*(x>=10);

plot(x,y);

xlabel('x')

ylabel('y')

参考技术A function fdhs(arg1,arg2)
%定义函数
%输入区间
a=arg1;b=arg2;
if a<=1&&b>10,x1=a:(1-a)/10:1;y1=x1;
x2=1:0.01:10;y2=2*x2-1;
x3=10:(b-10)/10:b;y3=3*x3;
plot(x1,y1,'r-',x2,y2,'b.',x3,y3,'k-')
end
end
上面的语句保存为fdhs.m后,在窗口中输入fdhs(-1,12)追问

是在function fdhs(arg1,arg2)前面输这个fdhs(-1,12)吗

追答

保存后,在命令窗口中输入:fdhs(-1,12),回车就行

matlab 编写计算傅里叶级数函数

1. 编写计算傅里叶级数系数的函数

%计算函数 x 的 N 次谐波的傅里叶级数系数,函数的周期为 T0
%数组 X 存放的是傅里叶系数,也就是幅值
%数组 w 存放的是频率
function [X, w]=fourierseries(x, T0, N)
    syms t;%因为传进来的x函数中包含符号 t,所以函数内部也要定义符号变量 t,否则会报错
    for k = 1: N,
        X(k)=int(x*exp(-j*2*pi*(k-1)*t/T0), t, 0, T0)/T0;
        w(k)=(k-1)*2*pi/T0;
    end
end
X(k) = int(x*exp(-j*2*pi*(k-1)*t/T0), t, 0, T0) / T0;

上面的式子为傅里叶公式
X ( k ) = 1 T 0 ∗ ∫ 0 T 0 x ( t ) ∗ e − j ∗ k ∗ Ω 0 ∗ t d t X(k) =\\frac1T0* \\int_0^T0x(t) * e^-j*k*\\Omega_0*tdt X(k)=T010T0x(t)ejkΩ0tdt
其中使用了计算积分的 int 函数,不懂使用的可以看这里 matlab 使用 int函数 求积分

2*pi*(k-1)*/T0

注意上面的意思是 ( k − 1 ) ∗ Ω 0 (k-1)*\\Omega_0 (k1)Ω0 ,因为频率要从 0 开始每次递增 Ω 0 \\Omega_0 Ω0,K 是从 1 开始,所以要 -1。

w(k) = (k-1)*2*pi/T0;

这行代码的意思是 w ( k ) = ( k − 1 ) ∗ Ω 0 w(k) = (k-1)*\\Omega_0 w(k)=(k1)Ω0,因为频率要从 0 开始每次递增 Ω 0 \\Omega_0 Ω0,K 是从 1 开始,所以要 -1。

下面我们可以使用上面编写好的函数计算函数的N次谐波对应的傅里叶系数和相位

2. 求 y = s i n ( 5 ∗ t ) y=sin(5*t) y=sin(5t) 的5次谐波(谐波次数可以任意指定)

clear all;
syms t;
y=sin(5*t); T0 = 2 * pi/5; N=5;
figure(1);
subplot(211);
ezplot(y , [0, 2*pi]);
grid;

[Y1, w1] = fourierseries(y, T0, N);
disp(Y1);
disp(w1);

%fliplr(Y1(2:N))的意思是将Y1数组中第2到N个数字顺序反转
%比如 Y1 数组为 [ 0, -1i/2, 0, 0, 0]
%fliplr(Y1(2:N))) 得到就是 [ 0, 0, 0, -1i/2]
%conj函数是求共轭
%比如对数组 [ 0, 0, 0, -1i/2] 求共轭,得到的就是 [ 0, 0, 0, 1i/2]
Y = [conj(fliplr(Y1(2:N)))  Y1];
w = [-fliplr(w1(2:N))  w1];
disp(Y);
disp(w);

subplot(223);
stem(w, abs(Y));%abs函数是对数组 Y 的每一个元素取绝对值
subplot(224);
stem(w, angle(Y));%angle函数是对数组 Y 的每一个元素求其对应的弧度

%计算函数 x 的 N 次谐波的傅里叶级数系数,函数的周期为 T0
%数组 X 存放的是傅里叶系数,也就是幅值
%数组 w 存放的是频率
function [X, w]=fourierseries(x, T0, N)
    syms t;%因为传进来的x函数中包含符号 t,所以函数内部也要定义符号变量 t,否则会报错
    for k = 1: N,
        X(k)=int(x*exp(-j*2*pi*(k-1)*t/T0), t, 0, T0)/T0;
        w(k)=(k-1)*2*pi/T0;
    end
end

下面,我们在刚才的函数上面增加 1

3. 求 y = 1 + s i n ( 5 ∗ t ) y=1+sin(5*t) y=1+sin(5t) 的5次谐波(谐波次数可以任意指定)

只需在原来的信号函数前面加 1 即可

4. 求 y = 2 + s i n ( 5 ∗ t ) y=2+sin(5*t) y=2+sin(5t) 的5次谐波(谐波次数可以任意指定)

只需在原来的信号函数前面加 2 即可

以上是关于用matlab来编写一个函数计算:f(x)在x《=1时,f(x)=x,当x>1&x<10时f(x)=2*x-1,当x>=10时,f(x)=3*x;的主要内容,如果未能解决你的问题,请参考以下文章

matlab分段+递归函数的表示方法

用Matlab怎么求反函数

MATLAB遗传法

Matlab中插值函数怎么用

请问一下这个matlab程序的syms哪里错了

急!!如何用matlab语言编写一个用牛顿迭代法求解经过有限差分法处理过的非线性方程组