【MATLAB】常见语法结构和实用操作

目录

语法结构

循环(遍历)结构

函数结构

画图操作

绘制函数图像

ezplot

figure多图绘制

创建多项式 

按照系数创建多项式

 利用多项式零点创建多项式

解方程组


语法结构

循环(遍历)结构

与其它编程语言类似,Matlab也有循环或者说是遍历的语法。下面以输出1到10为例:

for i = 1:10
    disp(i);
end

可以看出它的结构主要有三个部分:

第一部分是关键字for和结束标志end:

第二部分是循环初始值和结束位置,这里注意末尾的10也会进入循环,类似于C语言中的for循环的边界 i<=n ,当 i 为 n 是也会进入循环:

第三部分就是循环内容,也就是循环内部要实现什么目标了,这里我就单纯输出1到10所以数字即可:

函数结构

在我们看matlab中的函数之前,首先看一下C语言中的函数结构:

void func(int x, int y)
{
	return;
}

我们很明显可以看出C语言中函数结构主要包含下面几个部分:函数名、返回值、参数列表、函数内容。

之后再让我们看看matlab中的函数,matlab中的函数也由相似的几部分构成:

第一部分是function函数关键字和返回返回值关键字return:

 第二部分是一个类似函数调用的部分,主要由返回值c、函数名func(注意这里的函数名也是函数文件名)以及参数a构成:

 最后一部分激素函数内容部分了:

画图操作

绘制函数图像

matlab中画图的方式有很多种,在看如何画图之前,我们先来看几个基本的指令:hold onhold off grid on。其中grid on比较好理解,就是在我们画的图上面多了一些网格;而hold on 和hold off有点不太同,hold on可以让多个图并存,即如果此后我们更新图像那么原本的图也会发生改变,即牵一发动全身;hold off则不同,它的每一个图都是独立的,并且相互覆盖

grid on

syms y x;
ezplot(y==x,[-10,10]);
grid on;

hold on 和hold off的区别

hold on:

syms y x;
ezplot(y==x^2,[-6,6]);
hold on;
ezplot(y==x,[-10,10]);

 hold off:

syms y x;
ezplot(y==x^2,[-6,6]);
hold off;
ezplot(p==0,[-10,10]);
hold on
hold off

我们可以看到明显区别hold on的图保持了原来的两幅图,而hold off的图则覆盖掉了原来的第一副图。了解了上面的这些命令后我们先来看看其中比较常见的几个函数:

ezplot

这个函数是比较常见的绘图函数,它包括几种常用的用法、形式:

syms x a y;
y = sin(x);
ezplot('sin(x)');
ezplot(y);

其中包括字符串形式和关于函数的形式,其中ezplot(y),y=sin(x)就是关于函数的形式,y是一个x的函数;还有一种就是字符串形式,例如'sin(x)',其中单引号里面包括的就是一个字符串。 

但是往往并不是所以的函数都是显函数,有时候我们也会拿到一些隐函数,例如:y^{3}-6y+\sqrt{5-x}=0,此时我们就需要利用一个函数f来表示,然后令函数f为0得到的方程画出来的图就是隐函数的图形。

syms y x;
f = y^3-6*y-sqrt(5-x);
ezplot(f==0,[-6,6]);

figure多图绘制

我们知道,ezplot绘制的是一个图形,那么如果我们想要绘制一个框里面多个图像应该怎么做呢?这时候就需要用到figure的多图绘制。首先我们要绘制一个图,需要将x细分为一堆等长区间:

x = 0:0.0001:2; 

这里第一个0表示x的起始值,第三个2表示x的末尾值,而中间的0.001表示将x细分的步长。所以我们这里定义出来的x是一个矩阵,即如果在定义x为自变量的函数时,应该注意点了。再准备一个函数y,令y = x^{2}-6

y = x.*x - 6;

然后我们就可以开始准备画图了,首先准备一个figure框,也就是我们画图常用的哪个框框,并且使用hold on指令保持住这个框,方便接下来画图。然后操作分框函数subplot,这个函数用于将当前的figure框分为几个部分,也就是我们画几个图,它参数的三个数字,前面表示划分的行数,第二个表示划分的列数,第三个数字表示当前图像是第几个框(横向数)。以6个框为例:

subplot(321);
subplot(322);
subplot(323);
subplot(324);
subplot(325);
subplot(326);

然后就是对图像进行绘制(填充)了,我们使用fill函数,第一个参数为自变量,第二个参数为因变量,第三个参数为图像的颜色(英文字符或英文字符缩写均可)。最后的title函数里面跟的就是图像名,这样一个函数图像就画出来了!

x = 0:0.0001:2; 
y = x.*x - 6;
figure;
hold on;
subplot(223);
fill(x,y,'green');
title('y-x');

创建多项式 

下面我们看看在matlab中如何创建多项式,这是我看了其他几个很棒的博主的文章后学习到的,链接我放在了文章结尾。首先是创建多项式的思路,分为两种:按照系数来创建多项式;按照根来创建多项式,下面我们一个个看:

按照系数创建多项式

s = [9,8,7,6,5,4,3];
y1 = poly2sym(s);
disp(y1);

这里使用的是函数poly2sym来创建多项式,我们要创建一个多项式,需要向这个函数传递多项式各项的系数。以数组s为例,我们数组里有7个数字,将数组传递进去后我们得到的多项式的系数从小到大分别为数组最大位到数组最小位,例如上面的s数组创建出来的多项式为:

9x^{6}+8x^{5}+7x^{4}+6x^{3}+5x^{2}+4x^{1}+3

其实我们还可以利用一个与ploy2sym类似的函数ploy2str来创建多项式:

s = [9,8,7,6,5,4,3];
y2 = poly2str(s,'x');
disp(y2)

 不过我们可以利用whos看到这两个方法还是有区别的,它们创建出来的多项式的数据类型是不同的:

 利用多项式零点创建多项式

r = [0,1,3];
y = poly2sym(poly(r));
disp(y);

除了刚才利用系数来创建多项式的方法,我们还可以利用多项式的零点来创建多项式,例如我们得到多项式一组零点r=[0,1,3]。那么我们也可以先使用ploy函数处理零点,再利用poly2sym函数来创建多项式。

解方程组

前面说了一些语法的结构,下面我们来看一个更加实际的作用:求解线性方程组的解。要知道,之前我们求简单方程的解使用的是solve这个函数,但是我们有时候往往需要去求一些方程组,这时候就需要寻找别的方法了。

回顾一下线性代数,我们求解方程组还有一个方法就是使用矩阵求解,例如方程组:

\left\{\begin{matrix} 3x+5y-6z=9 \\x-8y+7z=6 \\2x+6y+3z=3 \end{matrix}\right.

我们使用矩阵求解的大致步骤就是求出系数矩阵,然后将两边乘系数矩阵逆矩阵消去系数的解就是X:

\begin{pmatrix} 3& 5 &-6 \\ 1& -8 &7 \\ 2&6 &3 \end{pmatrix}X = \begin{pmatrix} 9\\6 \\3 \end{pmatrix} =>X = \begin{pmatrix} 3& 5 &-6 \\ 1& -8 &7 \\ 2&6 &3 \end{pmatrix}^{-1}\begin{pmatrix} 9\\6 \\3 \end{pmatrix}

所以我们使用matlab求解线性方程组的方法也类似,首先定义一个系数矩阵A,然后再定义一个矩阵B,X的结果就是A^{^-1}B。对应着,matlab表现A^{^-1}的方法是A后面跟一个反斜杠 \

A = [3 5 -6;
     1 -8 7;
     2  6 3];
B = [9;
     6;
     3];
X = A\B;
disp(X);

参考资料:

https://blog.csdn.net/qq_38431572/category_9417566.html

matlab多项式构造/求根/某处的值_执念斩长河的博客-CSDN博客_matlab多项式构造

matlab中 hold on 与 hold off,figure作用_江江江在奋斗的博客-CSDN博客_figure hold on

matlab中的ezplot函数详解_「已注销」的博客-CSDN博客_ezplot函数

猜你喜欢

转载自blog.csdn.net/m0_61151031/article/details/127806728