基本操作命令
命令 | 该命令的功能 | 命令 | 该命令的功能 |
---|---|---|---|
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 =
1 至 15 列
-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
16 至 20 列
-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
两个数都要点乘