Bootstrap

数学实验第一章:MATLAB基础

基本操作命令

命令该命令的功能命令该命令的功能
cd显示或改变工作目录hold图形保持命令
clear清除内存变量pack整理内存碎片
clf清除图形窗口path显示搜索目录
diary日志文件命令quit退出MATLAB
dir显示当前目录下文件save保存内存变量到指定文件
disp显示变量或文字内容type显示文件内容

常用标点符号

标点符号定义标点符号定义
;区分行,取消运行显示灯·小数点以及域访问等
,区分列,函数参数分隔等连接语句
:在数组中应用较多字符串标识符号
()指定运算优先级等=赋值符号
[]矩阵定义的标志等!调用操作系统运算
{}用于构成单元数组等%注释语句的标识

输入时加上分号,工作区中会显示,但是命令行中不显示

>> a=1

a =

     1

>> a

a =
     1

>> a=1;
>> a
a =

     1

>> b=a;
>> a+b

ans =

     2

在这里插入图片描述
用clc清屏时,内存里还是有刚才定义的变量
要清除掉内存变量,使用clear

配套习题

在这里插入图片描述
在这里插入图片描述

常用函数举例

>> sin(pi/6)
ans =
    0.5000
>> rand
ans =
    0.8147
>> rand
ans =
    0.9058

内联函数

格式:f=incline(‘表达式’)
及时定义,方便使用,但不能调用其他内联函数

>> f=inline('x^3');
>> f(2)
ans =
     8

匿名函数

格式:f=@(变量列表)函数内容

>> f=@(x,y)x^2+y^2;
>> f(2,3)
ans =
    13

但只能由一个MATLAB表达式组成;只能返回一个变量

M文件产生函数

xi新建-脚本-键入函数
在这里插入图片描述
文件名就是函数名,比如这个就是g.m,要放在同一文件夹下

例题

在这里插入图片描述

简单绘制图形

plot

>> x=0:0.01:2*pi;
>> y=sin(x);
>> plot(x,y);

在这里插入图片描述
加上一句

>> plot(x,y,'r*')

r是红颜色,*是点用星号表示
在这里插入图片描述

fplot

fplot(@(x)function(x),范围)

>> fplot(@(x)sin(x),[0,2*pi],'r')

在这里插入图片描述

绘制多条曲线

plot(x1,y1,x2,y2,…)
fplot(@(x1)function(x1),@(x2)function(x2),范围)

>> x=0:0.01:2*pi;
>> y1=sin(x);y2=cos(x);
>> plot(x,y1,'r.',x,y2,'y*');

在这里插入图片描述

>> fplot('[sin(x),cos(x)]',[0,2*pi]);

或者是

>> fplot(@(y)[sin(y),cos(y)],[0,2*pi]);

在这里插入图片描述

常用操作命令

在这里插入图片描述

>> fplot(@(x)sin(x),[0,2*pi]);axis square;grid on;

方形图+网格
在这里插入图片描述

>> x=0:0.1:2*pi;
>> y=sin(x);
>> subplot(2,3,1),plot(x,y,'r*');title('图形1');hold on 
>> z=cos(x);
>> subplot(2,3,2),plot(x,y,'r*');title('图形2');
>> w=tan(x);
>> subplot(2,3,5),plot(x,z,'r*');title('图形5');

在这里插入图片描述

三维曲线

plot3(x,y,z)
给一个参数方程

>> t=-8:0.1:8;
>> x=6*cos(t);y=6*sin(t);z=3*t;
>> plot3(x,y,z);grid on

在这里插入图片描述
例2:

>> x=-5:0.2:5;
>> y=x;
>> [x y]=meshgrid(x,y);
>> z=sin(sqrt(x.^2+y.^2));
>> mesh(x,y,z)

x,y是坐标格点,z是格点上的函数值
在这里插入图片描述

练习:
在这里插入图片描述

矩阵

生成一个简单的矩阵
一行中用逗号隔开,行与行之间用分号

>> A=[1,2,3;1,3,6;4,4,3]
A =
     1     2     3
     1     3     6
     4     4     3

取出数据

>> A(2,2)
ans =
     3

取出第二行一到三列

>> A(2,1:3)
ans =
     1     3     6

或者是写

>> A(2,:)
ans =
     1     3     6

对列进行操作

>> A(:,3)
ans =
     3
     6
     3

删掉这一列

>> A(:,3)=[]
A =
     1     2
     1     3
     4     4

求转置

>> B=A'
B =
     1     1     4
     2     3     4

添加元素

>> A(:,3)=[1;2;3];
A =
     1     2     1
     1     3     2
     4     4     3

求A的幂次方

>> A^2
ans =
     7    12     8
    12    19    13
    20    32    21

如果想单独算每个元素的N次幂,可以采用点运算

>> B
B =
     1     1     4
     2     3     4
>> B.^2
ans =
     1     1    16
     4     9    16
运算含义
A+B矩阵加法(A、B维数相同)
A-B矩阵减法(A、B维数相同)
A*B矩阵乘法(A的列数等于B的行数)
A/B左除,即AB-1
A\B右除,即A-1B
A^n方阵A的n次幂

向量

生成向量

>> A=1:2:10
A =
     1     3     5     7     9
>> B=10:-2:1
B =
    10     8     6     4     2

若A,B是同型矩阵,那么可以用
A.*B得到对应位置相乘

在这里插入图片描述

分支结构

写分段函数
建立一个m文件

function y=ff(x)
if x<0
    y=-x;
else if x>0&x<1
        y=x^2;
    else 
        y=1;
    end
end
end

然后再命令行中键入

>> ff(0.5)
ans =
    0.2500

但是再用fplot画图的时候出了点问题

>> fplot(@(x)ff(x),[-3,2])
警告: 函数处理数组输入时行为异常。要改善性能,请将您的函数正确向量化,以返回大小和形状与输入参数相同的输出。 
> In matlab.graphics.function.FunctionLine>getFunction
  In matlab.graphics.function.FunctionLine/updateFunction
  In matlab.graphics.function.FunctionLine/set.Function_I
  In matlab.graphics.function.FunctionLine/set.Function
  In matlab.graphics.function.FunctionLine
  In fplot>singleFplot (line 232)
  In fplot>@(f)singleFplot(cax,{f},limits,extraOpts,args) (line 191)
  In fplot>vectorizeFplot (line 191)
  In fplot (line 161) 

在这里插入图片描述
图应该是没问题,我去搜这个warning
在这里插入图片描述
按照他的思路,我在ff(x)后面加了个点

>> fplot(@(x)ff(x).,[-3,2])
 fplot(@(x)ff(x).,[-3,2])
                 ↑
错误: 表达式或语句不正确--可能 ({[ 不对称。

但可能是要在ff(x)定义时就要让x能接收向量

循环结构

在这里插入图片描述

用MATLAB代买实现

>> x=[-3];#x是一个向量,-3作为向量的第一个分量
>> for i=2:20
x(i)=(x(i-1)+3/x(i-1))/2;
end 
>> x
x =
  115-3.0000   -2.0000   -1.7500   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321   -1.7321
  1620-1.7321   -1.7321   -1.7321   -1.7321   -1.7321

将代码存到math29.m文件
再次调用用math29或者math29()都行

在这里插入图片描述

行数与列数相同,输出3,
行数与列数相差1时,输出2
其余输出0

A=[];
for i=1:5
    for j=1:5
        if i==j
            A(i,j)=3;
        else if abs(i-j)==1
                A(i,j)=2;
            else 
                A(i,j)=0;
            end
        end
    end
end
A
>> Matrix_A
A =
     3     2     0     0     0
     2     3     2     0     0
     0     2     3     2     0
     0     0     2     3     2
     0     0     0     2     3

求方程的根

方法一:符号解

solve(eq),求解方程eq=0
solve(eq,v)表示,对eq中的指定变量,求解方程eq=0
命令solve(eq1,eq2,v1,v2)表示:
求解方程组eq1=0,eq2=0,其中方程未知量为v1,v2

方法二:数值解

fsolve(‘fun’,x0)%计算fun=0在x0附近的解
fzero(‘fun’,x0)%计算fun在x0附近的零点
x0为初值
例如

>> fsolve('x^2-2*x',1.5)

若题目复杂一点
在这里插入图片描述

>> syms x;%定义变量
>> solve(exp(-x/10)*(sin(x))^2-abs(x)/2)

> In solve (line 304) 
ans =
0

但是观察函数图像
画出x属于[-10,10]
在这里插入图片描述
进一步画出[-2,2]
在这里插入图片描述
可知在x=-0.5,0,0.7,1.7左右还存在零点
进一步求解

>> fsolve('exp(-x/10).*sin(x).^2-abs(x)/2',[-0.5,0,0.7,1.7])%对于向量的乘和乘方,都要用点乘
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.
<stopping criteria details>
ans =
   -0.5198         0    0.5993    1.6738

当方程比较复杂时,solve只能解出某一个根

在这里插入图片描述

微积分的计算

在这里插入图片描述
在这里插入图片描述

求极限
在这里插入图片描述

>> syms x;
>> limit(((x+3)/(x-2))^x,inf)
 
ans =
 
exp(5)

在这里插入图片描述
在这里插入图片描述

>> syms n x;
>> f=sin(n*x);
>> diff(f,'x',4)%对变量x求4阶导
ans =
n^4*sin(n*x)

求解定积分

>> syms x;
>> int(sin(x)/(sin(x)+cos(x)),x,0,pi/2)
ans =
pi/4

在这里插入图片描述

>> quad('exp(-x.^2)',0,1)

ans =

    0.7468

在这里插入图片描述
两个数都要点乘

;