matlab怎么用

matlab怎么用,第1张

判断矩阵一致性检验的Matlab源程序代码

Matlab源程序代码如下:

clc

clear

disp('请输入判断矩阵A')

A=input('A=');

[n,n] = size(A)

%方法1: 算术平均法

Sum_A = sum(A);

SUM_A = repmat(Sum_A,n,1);

Stand_A = A / SUM_A;

Stand_A = A / Sum_A; % 这样也可以的

disp('算术平均法求权重的结果为:');

disp(sum(Stand_A,2)/n)

%方法2: 几何平均法

Prduct_A = prod(A,2);

Prduct_n_A = Prduct_A ^ (1/n);

disp('几何平均法求权重的结果为:');

disp(Prduct_n_A / sum(Prduct_n_A))

%方法3: 特征值法求权重

[V,D] = eig(A);

Max_eig = max(max(D))

[r,c]=find(D == Max_eig , 1);

disp('特征值法求权重的结果为:');

disp( V(:,c) / sum(V(:,c)) )

%计算一致性比例CR

CI = (Max_eig - n)/(n-1);

RI=[0 00001 052 089 112 126 136 141 146 149 152 154 156 158

159];

% 这里n=2时,一定是一致矩阵,所以CI = 0,为了避免分母为0,将这里的第二个元素改为了很接近0的正数

CR=CI/RI(n);

disp('一致性指标CI=');disp(CI);

disp('一致性比例CR=');disp(CR);

if CR<010

disp('因为CR<010,所以该判断矩阵A的一致性可以接受!');

else

disp('注意:CR >=

010,因此该判断矩阵A需要进行修改!');

end

1理解连续系统时域分析方法

2学习利用matlab对连续系统进行时域分析的方法

3掌握单位冲激响应和单位阶跃响应一般求解方法和基本特征,学习利用matlab求此响应的方法。

4掌握单位冲激响应与系统稳定性、因果性之间的关系。

二、实验器材

计算机、MATLAB软件

三、实验原理

对于单输入-单输出系统的输入激励为 f (t),输出响应为y(t),则描述连续LTI系统的数学模型为n阶次的常系数线性微分方程,形式如下

[上传失败(image-82e2d0-1639285196529)] (3-1)

式子中, a i = 0,1,n,和b i =0,1,m均为常数。

由信号与系统的分析理论值,如果描述系统的微分方程、激励和初始状态已知,我们可用经典时域求解法求出其解。但对于高阶系统,手工计算十分的繁琐,甚至很困难,这时可以用matlab工具求解。

Matlab里提供了求(3-1)解用到的函数,常用的是impluse()、step()、lism()、conv()、dsolve()。下面我们分别介绍这几个函数。

1连续时间系统冲激响应和阶跃响应的求解

连续LTI系统的冲激响应和阶跃响应,分别用impluse和step求解。其调用格式为

impluse (b,a) y=impluse(sys,t)

step (b,a) y=step(sys,t)

式中,t表示计算系统响应的抽样点向量,sys是LTI系统模型,它表示 微分方程,差分方程或状态方程 。其调用格式

sys = tf (b,a)

式中,b和a分别是微分方程的右端和左端系数向量。例如

[上传失败(image-63fd93-1639285196529)]

用a=[a3,a2,a1,a0] ; b=[b3,b2,b1,b0] ,sys = tf (b,a) 获得其LTI模型。

例1:已知描述某连续系统的微分方程为

[上传失败(image-954b31-1639285196529)]

试利用matlab绘出该系统的单位冲激响应和单位阶跃响应的时域波形,并根据单位冲激响应判断系统的稳定性和因果性。`1

matlab程序如下

a=[1 1 6];

b=[1];

subplot(2,1,1)

impulse(b,a)

subplot(2,1,2)

step(b,a)

程序运行后,其图形如下3-1所示。

[上传失败(image-8ac458-1639285196530)]

图3-1 系统的冲激响应和阶跃响应图

从图3-1所示的系统的单位冲激响应的时域波形可以看出,当时间t<0时系统的单位冲激响应h(t)=0,所以该系统为因果系统;同时h(t)随着时间的增长而衰减,当t趋于无穷大时时,h(t)趋于零,所以系统也是一个稳定的系统。

2连续时间系统零输入响应的求解

在MATLAB中,initial是求连续系统的零输入响应函数,其调用形式为

initial(sys,x0)

[y,x,t]=initial(sys,x0)

initial函数可计算出连续时间线性系统由于初始状态所引起的响应(故而称零输入响应)。当不带输出变量引用函数时,initial函数在当前图形窗口中直接绘制出系统的零输入响应。

例2:已知描述某连续系统的微分方程为

[上传失败(image-15bccf-1639285196529)]

y(0)=1,y’(0)=2, 用matlab求其零输入响应

程序如下:

a=[1 1 6];

b=[1];

sys=tf(b,a);

sys1=ss(sys); % 转成状态变量表示

x0=[1,2]

initial(sys1,x0)

运行结果如图3-2所示

[上传失败(image-f08768-1639285196530)]

图3-2 系统的零输入响应图

3连续时间系统零状态响应的数值计算----- lism()

求解微分方程零状态响应的数值解。其调用格式主要有两种。

lism(sys,f,t) y=lism(sys,f,t)

其中,f是输入信号在向量t定义的时间点上的采样值,t是输入信号时间范围向量,sys是LTI系统模型

例3: 已知描述某连续系统的微分方程为

[上传失败(image-4a9e83-1639285196529)]

试利用matlab求出该系统当激励信号为[上传失败(image-5ad649-1639285196529)] 时,系统的响应[上传失败(image-348322-1639285196529)] ,并会出其波形。

matlab程序如下

a=[1 2 1];

b=[1 2];

sys=tf(b,a); %定义系统函数对象

p=001; %定义采样时间间隔

t=0:p:5;

f=exp(-2t);

lsim(sys,f,t); %对系统输出信号进行仿真

程序运行后,其图形如图3-3所示。

[上传失败(image-3950ed-1639285196529)]

图3-3 连续系统的响应仿真

4微分方程的符号解的函数dsolve()

在MATLAB中,dsolve()是求解微分方程的符号解的函数,其调用形式为

r=dsolve(‘eq1,eq2,…’,’cond1,cond2,…’,’v’)

或r=dsolve(‘eq1’,eq2’,…,’cond1’,’cond2’,…,’v’)

其中cond1、cond2…是初始条件(如没有给出初始条件,则默认为求通解),v为自变量变量。D表示一阶微分,D2为二阶微分……。函数dsolve把D后的变量当成因变量,默认为这些变量对自变量的求导。

例4:求二阶系统[上传失败(image-9ca77c-1639285196529)] 在初始条件[上传失败(image-ae497b-1639285196529)] 下的零输入响应的解、零状态响应的解及全解

matlab程序如下

yzi=dsolve('D2y+5 Dy+4 y=0','y(0)=0,Dy(0)=1')

yzs=dsolve('D2y+5 Dy+4 y=exp(-3t)','y(0)=0,Dy(0)=0')

y=dsolve('D2y+5 Dy+4 y=exp(-3t)','y(0)=0,Dy(0)=1')

运行结果如下

yzi =

-1/3 exp(-4 t)+1/3exp(-t)

yzs =

1/3 exp(-4 t)+1/6 exp(-t)-1/2 exp(-3t)

y =

1/2 exp(-t)-1/2 exp(-3t)

即 [上传失败(image-8a13eb-1639285196529)]

[上传失败(image-9036d5-1639285196529)]

[上传失败(image-fa7bd7-1639285196529)]

四、实验内容

1验证实验原理中所述的相关程序

2已知描述某连续系统的微分方程为

[上传失败(image-d41f06-1639285196529)]

(1) 试利用matlab绘出该系统的冲激响应和阶跃响应的时域波形,并根据冲激响应判断系统的稳定性。

a=[1,3,2];

b=[1,2];

subplot(2,1,1)

impulse(b,a);

subplot(2,1,2)

step(b,a);

wending

(2) 当激励信号为[上传失败(image-e16660-1639285196529)] 时,系统的零状态响应[上传失败(image-5beb2d-1639285196529)] ,并绘出响应的波形。

a=[1,3,2];

b=[1,2];

sys=tf(b,a)

t=0:001:5;

f=exp(-2t);

lsim(sys,f,t)

3求三阶系统[上传失败(image-a71fa6-1639285196529)] 在初始条件[上传失败(image-40502a-1639285196529)] 下的零输入响应的解、零状态响应的解及全解。

yzi=dsolve('D2y+5Dy+y=0','y(0)=0,Dy(0)=1')

yzs=dsolve('D2y+5 Dy+y=exp(-3 t)','y(0)=0,Dy(0)=0')

y=dsolve('D2y+5 Dy+y=exp(-3 t)','y(0)=0,Dy(0)=1')

五、实验报告要求

1实验内容中详细说明用连续系统时域分析法的步骤与原理。

2写出其对应的matlab程序。

3上机调试程序的方法及实验中的心得体会。

在命令窗口(Command Window)中:

1) 上、下键――切换到之前、之后的命令,可以重复按多次来达到你想要的命令

2) clc――清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉

3) clear――这个才是清空当前工作区的变量命令,常用语句clear all来完成

4) Tab键――(转自版友心灯)在看到的:在command窗口,输入一个命令的前几个字符,然后按tab键,会d出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。目前讨论结果是:matlab65版本中,如果候选命令超过100个,则不显示。而在matlab7以后版本中,则没有这个限制,均可正常提示

5) Ctrl+C(或Ctrl+Break)――(转自版友yangjin_ren)在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。不过进行此 *** 作的前提是能够激活切换到命令窗口才行,呵呵。

2 在编辑器(Editor)中:

1) Tab(或Ctrl+])――增加缩进(对多行有效)

2) Ctrl+[--减少缩进(对多行有效)

3) Ctrl+I--自动缩进(即自动排版,对多行有效)

4) Ctrl+R――注释(对多行有效)

5) Ctrl+T――去掉注释(对多行有效)

6) Ctrl+B――括号配对检查(对版本65有效,但版本70无效,不知道是取消了还是换了另外的快捷键,请大牛们指点,其他版本没有测试过)

7) F12――设置或取消断点

8) F5――运行程序

其余的例如在Debug状态下的快捷键就不多说了,自己看菜单Debug吧!

累了, 有时间再写吧。希望大家多

常微分(ODE)方程的数值求解器有:非刚性求解器(计算的精度从低到高)ode23,ode45,ode113,刚性方程求解器(适用的刚性从弱到强) ode15s,ode23s,ode23t,ode23tb,隐方程求解器ode15i

所谓刚性方程,就是指它的解的曲线有剧烈的或缓慢的变化。如van der Pol方程(教材p144例4)就是一个刚性方程

Ode求解器默认的相对误差是1e-3,绝对误差是1e-6,要改变默认的精度设置,可以用odeset来设定Options。具体设置方法,求助于help功能。Ode求解器中可以求解带有参数的微分方程。

常用的精度设置如

Options=odeset(‘RelTol’, 1e-5,’AbsTol’, [1e-8, 1e-7]);

其中绝对误差可以对每个未知函数的分量分别规定,写成一个向量,维数等于方程的维数。如对各分量的绝对误差设置相同则只须写一个标量误差。

每一积分步第i个分量的误差满足e(i) <= max(RelTolabs(y(i)),AbsTol(i))

如果只要对解的范数作误差控制,而不需对解的每个分量作误差控制,则在Options中可以加上选项’NormControl’, ‘on’ 这时每一积分步误差的范数满足norm(e) <= max(RelTolnorm(y),AbsTol) 这个选项对那些解的范数会等于零的方程特别有用,不用此选项时,为了要达到苛刻的误差要求,步长会取得很小,将大大减慢求解过程以致求解失败

时滞是常数的时滞常微分方程DDE的数值求解器有dde23,要改变默认的设置,可以用ddeset来设定。

常微分方程求解器的options还可以设置一个有用的功能,语法是

Options=odeset( 'Events',@EVENTS);(Options可以是自定义名,其中各种设置如精度设置可以写在一起,用逗号分开),用ode45求解时,可用格式

[TOUT,YOUT,TE,YE,IE] = ode45(@ODEFUN,TSPAN,Y0,Options, P)

在odeset中设置了一个事件函数@EVENTS,是自编m函数,函数名自定。函数的格式是

[VALUE,ISTERMINAL,DIRECTION] = EVENTS(T,Y,P)

事件函数的输入是和微分方程的函数输入相同,顺序相同 事件函数的输出是3个列向量 例如 [VALUE,ISTERMINAL,DIRECTION],名称自定,列向量的维数是事件的个数,VALUE(I) 是事件函数的第I个分量表达式的值, ISTERMINAL(I)=1表示事件函数的第I个分量的值等于零时积分终止,不然等于0 , DIRECTION(I)=0 表示要计算事件函数的第I个分量的所有的零点 (默认), +1 仅计算事件函数第I个分量在零点递增的零点 -1仅计算事件函数的第I个分量在零点递减的零点

TSPAN是微分方程求解区间,例如可用 [0 pi]表示,也可以指定TOUT为求解区间中的一些点列,如TSPAN=0: 01: 32; Y0是微分方程初值问题中的初值,如Y0=[0 0];

TOUT是微分方程求解区间TSPAN中的时间点列,YOUT是时间点列TOUT上方程解的值,是矩阵形式,列数等于方程的维数,TOUT(:,J)是解的第J个分量在时间点列TOUT上的向量值。 TE是列向量,是事件发生的时刻序列 YE的各行向量是事件发生各时刻方程的解的向量值, IE表示在TE时刻发生的事件在事件函数中的序号

“顺便问下r=002,t=-5:r:5,相当于t=-5:002:5吧,改成t=-10:001:10其实一样吧”

这个确实是一样,但要注意t=-10:001:10取得点比t=-5:002:5多

“N=200,w=2pi,k=-N:N,w=kw/N”

这个有什么好研究的么,生成很多个点,类似于取好多个x值,以便之后去求Y

信号有学,但具体的函数没有刻意的去做过,只能这么给你解释了

clear all;

close all;

%--------------设定取点和初值

r=002;

t=-5:r:5;

N=200;

w=2pi;

k=-N:N;

w=kw/N;

%-------------------构造函数

f1= 1/2exp(-2t)stepfun(t,0);

F=rf1exp(-jt'w);

F1=abs(F);

P1=angle(F);

%---------------------画图

subplot(3,1,1);

plot(t,f1); %画f(t)=1/2e^(-2t)u(t)的图

grid on;

xlabel('t');

ylabel('f(t)');

title('f(t)');

subplot(3,1,2);

plot(w,F1);

xlabel('w');

grid on;

ylabel('F(jw)');

subplot(3,1,3);

plot(w,P1180/pi);

以上就是关于matlab怎么用全部的内容,包括:matlab怎么用、MATLAB实验、MATLAB编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9295674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存