使用matlab求积分与常用函数的描绘

matlab是工科中常用的软件,这个就不介绍了。如题,本文主要是归纳使用matlab求积分的方法和画图所需的一些常用指令。

使用matlab求积分

求不定积分

matlab 中计算一元函数的积分使用int函数

例1:y = sin(x)

1
2
3
syms x; %定义变量 x
y = sin(x); %描述函数
int(y) %求解积分

便可得到: ans = -cos(x)

例2:y = a*x^2+b

1
2
3
syms x a b;
y = a*x^2+b;
int(y,x) %注意这里是对x求积分,所以int函数里面写x

可看到: ans =(a x^3)/3 + b x

如果将 int(y,x) 变为 int(y,a),得到的结果变不同,因为积分的对象改变了,结果为:ans =(a^2 x^2)/2 + b a

在区间内求积分

大多数情况,我们求解积分都是有区间的,这个如何求解呢?

例3: y = e^x , x 的定义域为 [0,1]

1
2
3
syms x;
y = exp(x);
int(s,[0,1])

求解结果为:ans = exp(1) - 1

这个结果不是一个准确的数字,我们可以将它进行转换。

1
double(exp(1)-1)

便可得到:ans =1.7183

当然如果你觉得准确度不够还可以使用 vpa 函数,比如

1
vpa(exp(1)-1,10); %保留10位小数

结果为:ans =1.718281828

PS: vpa(a,k) ,a为数值,k为精度

例4:y = e^x + a*x , x属于[0,1]

1
2
3
syms x a;
y = exp(x)+a*x;
int(y,x,[0,1]);

可以看到:ans = a/2 + exp(1) - 1

画图常用函数

画图

主要使用的是plot(连续) 和stem(散点)

例5:绘制Sa(t)函数图像,Sa(t) = sin(t)/t

1
2
3
4
5
t = -100:100;%定义t的范围
Sa = sin(t)./t;
plot(t,Sa);
figure;
stem(t,Sa);

连续:连续图

散点:

散点图

分割区域

连续图像和散点图像就如上图所示,现在考虑怎样把这两幅图片放在一起,因为这样更好对比。

这时候我们需要subplot函数,subplot(n,m,p)

n是行,m是列,p是第几幅图。

如:subplot(1,2,1)表示要画1行两列,共1*2=2幅图,选择两幅中的第一幅。

类推subplot(2,8,7)就是第一行的第七幅图,要是subplot(2,8,9)就是第二行的第一幅图。

理解完这个,开始画图:

1
2
3
4
5
6
t = -100:100;%定义t的范围
Sa = sin(t)./t;
subplot(1,2,1);
plot(t,Sa);
subplot(1,2,2);
stem(t,Sa);

要是想把两幅图混合成一幅图,可以这样:

1
2
3
4
5
6
t = -100:100;%定义t的范围
Sa = sin(t);
plot(t,Sa,'r');
hold on;%hold 住,它就跑不了了
stem(t,Sa,'k');
axis([-30 30 -1.5 1.5]);

plot变换线型,颜色,和添加数据点的标记

线型 颜色 标记符号
: 虚线 g绿色 o 圆圈
- 实线 b蓝色 . 点
-. 点划线 r红色 × 叉号
– 双划线 c青色 + 加号
m品红 * 星号
y黄色 p 五角星
k黑色 h 六角星
w白色

使用办法,以画正弦波为例:

1
2
3
4
5
6
7
8
9
10
x=[0:0.1:10];
y=sin(x);
subplot(2,2,1);
plot(x,y,'r--');
subplot(2,2,2);
plot(x,y,'y-');
subplot(2,2,3);
plot(x,y,'ko');
subplot(2,2,4);
plot(x,y,'b+');

完善坐标图

图画好了,我们需要完善它,比如加上标题,横坐标和纵坐标的释义,限定下定义域…

title(’函数名称’)

xlabel(’x轴说明’)

ylabel(’y轴说明’)

legend(’图例1’,’图例2’,…)

gird on %加网格

axis([Xmin Xmax Ymin Ymax Zmin Zmax]) %限定坐标区域

举个小栗子,O(∩_∩)O:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
x=[-10:0.1:10];
y=1./x;
y1=x;
y2=x.^2;
y3=x.^3;
y4=sqrt(x);
plot(x,y);
hold on;
plot(x,y1);
plot(x,y2);
plot(x,y3);
plot(x,y4);
title('函数图像(举例)');
xlabel('x');
ylabel('y');
grid on;
legend('y=1/x','y=x','y=x^2','y=x^3','y=sqrt(x)');
axis([-10,10,-10,10])

综合案例

例6:对门函数进行傅里叶变换并画图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
fsam=40;
Tp=0.5;
N=1024;
T=1/fsam;
t=-5:T:5;
x=rectpuls(t,2);
X=T*fft(x,N);
subplot(411);
plot(t,x);
axis([-5 5 -0.4 1.4]);
title('门函数');
grid on;
w=(-N/2:N/2-1)*(2*pi/N)*fsam;
Z=2*sin(w*0.5)./(w);
subplot(412);
plot(w,Z);
title('理论计算值');
axis([-150 150 -0.5 2])
grid on;
subplot(413);
plot(w,abs(fftshift(X)));
axis([-150 150 -0.5 2])
title('matlab计算所得')
grid on;
subplot(414);
plot(w,abs(fftshift(X)),w,Z,'r');
axis([-150 150 -0.5 2]);
title('两者比较');
legend('matlab计算','理论')
grid on;

得到的结果有点意外,理论计算的感觉更正确些,但是和matlab中计算的为什么存在差别,我再琢磨琢磨,当然也有可能是我写错了….╮(╯▽╰)╭

请我喝杯咖啡~
------ 本文结束------
0%