第一章 功能
- 每条命令以
;
结束 clc;
清屏命令clear;
清理内存%
注释标记%{ 段注释 %}
例1 解方程
$$ 3x^4-2x^3-5x^2-4x-4=0 $$
clc; %清屏 clear; %清理内存 A=[3, -2, -5, -4, -4]; %各项的系数构成的矩阵 X=roots (A); %核心处理命令 X %显示所有解
注意:求得的根包含复数解。
例2:解方程组(鸡兔同笼)
鸡兔同笼九十九,二百条腿地上走,问鸡、兔各几只?
建立方程组,设x为鸡数,y为兔子数,则有方程组
$$ \begin{cases} x+y=99\\ 2x+4y=200 \end{cases} $$
程序如下:
% 鸡兔同笼 A=[1, 1; 2, 4]; B=[99; 200]; % C=inv(A)*B; %核心处理命令,或改为C=A\B; 执行更快 %{ inv 对矩阵求逆,使用inv时,必须对象为方阵。 /表示右除,\表示左除 %} C=A\B; [C(1),C(2)]
例3 求方程组的解(两曲线的交点)
例如:
$$ \begin{cases} y=x+3\\ y=6x-5 \end{cases} $$
方案1
clc,syms x y % 定义变量x,y [x,y]=solve(y==x+3,y==6*x-5) %输出结果为表达式(分数等);必要时用double/eval函数转换
方案2
改为用矩阵除法求解,原方程组改为
$$ \begin{cases} x-y=-3\\ 6x-y=5 \end{cases} $$
A=[1,-1;6,-1]; %等号左侧各项系数; B=[-3;5]; %等号右侧数据,每行一个常数 C=A\B
例4 绘图
x=0:0.02:2*pi; y=sin(x); z=cos(x); p=sin(x).*cos(x); plot(x,y,x,z,x,p); axis equal; axis auto;
绘图结果
第二章 数据及其输入输出
常量与变量
- 常量:数值型、字符型、矩阵等
- 变量:无需声明,变量名通常以字母开头,可包含数字和下划线,区分大小写。数据类型由其值的数据类型决定
有符号常量:如pi(π),inf(无穷大)、nan(not a number,无效数据)、eps(接近于0的极小数字ε)
数据类型
- 数值型:数字
- 文本型:左右要加上西文单撇号定界符
- 逻辑型:结果只有两个数据——0或1。0表示假(不成立),1表示真(成立)
数组/矩阵/向量:数据两侧以方括号包围,数据之间以空格或逗号隔开,以分号换行。可写在一行或多行
函数
- zeros:零矩阵。得到若干行列的0。如zeros(10); zeros(4,5)
- ones:1矩阵。得到若干行列的1。如ones(5); ones(3,4)
- size:得到矩阵的行列数。size(zeros(4,5)); size(3*ones(3,4))
- fliplr:矩阵左右翻转
- flipud:矩阵上下翻转
- rot90:矩阵逆时针旋转90度
- rand:随机数,格式:rand(m,n)。m、n均为正整数,均为0-1之间的纯小数
- randn:函数产生的函数值可正可负。用法与rand相同
- linspace:生成线性间距向量。格式:linspace(n1,n2,n)。三个参数均为正整数,初值,终值,数据个数(缺省为100)
数学类函数格式和用法与其他语言相似。如:sin(x)、cos(x)、abs(x)、sqrt(x)等
运算符与表达式
- 算术运算符:
+
-
*
/
^
- 矩阵运算符:
.*
./
.^
- 冒号运算符::。可用于生成一个矩阵。经常用到的形式有:
n : m——表示从n开始,到m结束,增量为1的数据序列。
i : j : k——表示从i开始,到k结束,增量为j的数据序列。 - 关系(比较)运算符:==(恒等于)、>、<、>=、<=、~=(不等于)
逻辑运算符:逻辑与&,或用and函数;逻辑或|,或or函数;逻辑非~,或not函数
数据的复制
- A=10.5; % 直接赋值
- B=[1, 2, 3, 4; 6, 7, 4, 2; 6, 8, 7, 0]; % 3行4列的矩阵(可以换行)
- 可以从Excel等窗口粘贴大量数据
可以用相应函数(textread、xlsread、importdata、load)读入(xlsread需要在excel中的加载项进行设置)
[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4) importdata('MKMATLAB.txt'); x=importdata('H:\dat\x.txt') % (提倡!) x=load('H:\dat\x.txt') x=xlsread('D:\matlab\xdata1.xls',1,'A1:A53');
在txt文件输入原始数据时,用逗号(或表格符/Tab键)分隔,前后不必加[ ],回车换行。
不要用空格分隔,不要用“;”换行。- D=1:2:12; % 1行的矩阵,起始值1,增量为2,可能的最大值为12
F=1:20; % 1行的矩阵,默认增量为1
用
who
或whos
命令可显示当前系统中的变量情况
用clearvars
命令可清除系统保留的变量信息
用clear all
命令清理所有变量、函数……等动态输入数据
input('按任意键继续…');
%划横线的部分为提示性文字(中英文等)。D= input('请输入一个数字:');
数据的输出
输出方式有以下几种:
- 变量名。后面不加任何符号,直接回车。系统先显示"xx=",而后在下一行显示具体数据。
- 变量1, 变量2, 变量3…… %作为多个数据项分多行显示,
- [变量1, 变量2, 变量3……] %作为一个数组/矩阵在一行内显示(仅当变量只有一个值时使用)
- disp (数组变量名); 如:M=[1.2, 3.4, 5.6, 7.8]; disp(M);
- disp([变量1, 变量2, 变量3…])
用fprintf函数
A=2; B=5; C=6; fprintf('%d\n',A,B,C); %每行显示一个数据,自动换行 H=[12 34 56 78 89]; fprintf('%d\n',H); L=123.56789; fprintf('L=%6.2f\n',L); %可以控制小数位
第三章 程序设计初步
顺序语句。依次输入、执行
举例:方程(组)求解。可用solve函数。
变量名=solve(方程式1,方程式2,…,方程式n)求解方程组:$ x+y=10,2*x-y=2$
方法一
syms x y; [x,y]=solve(x+y==10,2*x-y==2); x=double(x), y=double(y); %结果是分数,可用eval/double函数转化为实数。 disp([x ,y]);
方法二
A=[1 1;2 -1]; B=[10;2]; C=A\B; disp([C(1), C(2)]);
条件和分支语句
简单条件判断
for i=0:1:100 if mod(i, 3) == 0 disp([num2str(i), '是3的倍数']); elseif mod(i, 3) == 1 disp([num2str(i), '不是3的倍数,余1']); else disp([num2str(i), '不是3的倍数,余2']); end end
多分支条件语句
for i=0:100 switch mod(i, 3) case 0 disp([num2str(i), '是3的倍数']); case 1 disp([num2str(i), '不是3的倍数,余1']); otherwise disp([num2str(i), '不是3的倍数,余2']); end end
循环语句
计数循环
求$ 10! $
for i=0:3:100 disp(i) end
条件循环
求$ 1+2+……50 $
i=0; s=0; while i<50 i=i+1; s=s+i; end disp(s);
流程控制语句
for i=0:1:100 if i==0 disp('现在i=0,按任意键继续'); pause; % 暂停。按任意键继续 elseif i==80 disp('现在i=80,休息5秒继续'); pause(5); % 暂停n秒 disp('继续'); elseif i==90 disp('现在i=90,忽略本次循环'); continue; % 忽略本次循环 disp('现在i=90,忽略本次循环'); elseif i==95 disp('现在i=95,结束'); break; % 跳出循环 end end
Ctrl+C
强制停止脚本自定义函数
求最值函数
定义函数
%% 在同目录下的max_min_value.m文件,写入如下代码 function [max,min] = max_min_value(X) min=Min(X); max=Max(X); function r=Max(X) x1=sort(X,'descend'); r=x1(1); end function r=Min(X) x2=sort(X); r=x2(1); end end
调用函数
A = [1,3,5,4,8,5,9,4,6,1,7,5,4,8,9,6,2]; [m,n]=max_min_value(A);
评论 (0)