Matrix_1.ppt [兼容模式]
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 某轻型汽车,汽油发动机外特性: Tq 为发动机转速(N.m); n为发动机转速(r/min)
Tq = −19.313 + 295.27 * ( n n 2 n 3 n 4 ) − 165.44 * ( ) + 40.874 * ( ) − 3.8445 * ( ) 1000 1000 1000 1000
• 相关公式
– 功率与转矩(注意单位)
Pe =
Ttq n 9550
Ft =
Tq ⋅ ig ⋅ i0 ⋅ηT r
ua = r ⋅ np ig ⋅ i0
• 求解步骤:
– 计算发动机转矩、功率 – 绘图
• C、Basic语言:循环计算
Ft =
Tq ⋅ ig ⋅ i0 ⋅ηT r
发动机转速n
发动机 转矩Tq 各档车速ua
测算运行时间
• 测试时间有两种方法
– 联合使用函数 clock、etime – 联合使用函数 tic、toc
• 函数 clock,etime(M-文件,可查看和修改)
– – – – – clock: 记录CPU当前时钟的时间 ctrl 和 z 中止执行 左下角(start按钮旁)显示 “busy” 在月或年的边界,etime出错 语法格式
4.2 关系运算符、逻辑运算符
运算符 < 关系运算符 <= == & 逻辑运算符 ~ 非
教材 P190页 表4-3
含义
运算符 > >= ~=
含义
不等于 或
与
|
两个键在键盘上的位置
非:~ 注意:同时按下 Shift 键 或:|
• • • • •
关系运算结果是1或0 两矩阵的比较,结果是由1和0组成的新矩阵 新矩阵的每个元素为1,则结果为1,否则为0 逻辑运算符与关系运算符可以组合运用 例 x = [1, 2, 3, 4, 5];
循环不执行 执行一次 依次
下面的循环体将执行几次?
... for k = 5 x = k end ... for k = [] x = k end 空矩阵:0行0列,不含任 何元素
... for k = 1:5 x = k end
a = 1:5; for k = a x = k end
... for k = [2 6 0 4 -2] x = k end
逐元素运算
polyval
N1 = 600; N2 = 4000;
的改进 示例简单 测试 代码
s = zeros(1, (N2 – N1 + 1)); tic disp('loop'); for n1 = N1:N2 s = n1 ^ 4; end toc tic disp('vector') n2 = N1:N2; s = n2 .^ 4; toc tic disp('poly') n2 = N1:N2; a=[1 0 0 0 0]; s = polyval(a, n2); toc
a = [2 4 0 6]; b = [1 3 2 5]; a > b a(a>b) a([1 1 0 1])
逻辑变量 数值变量
逻辑变量,请在workrksapce中 查看变量类型
逻辑运算函数 --
教材P193表4-6
• find:常用于代替 if 循环结构
find([9.2, 8.9, 10.1, 9.9] > 9) = find([1, 0, 1, 1]) = [1, 3, 4] H = [8.9, 9.2, 9.0; 9.3, 10.1, 9.9; 8.7, 8.8, 11.0] element = find(x>10) 输出结果: element=[5, 9] [row, col] = find(x>10) 输出结果: row=[2, 3] col =[2, 3]
优化循环结构
• 在MATLAB中避免循环:执行时间长 • 循环的效率低于数组运算 • 尽量利用 find 来设计方案
– 逻辑表达式中含有矩阵时,用 find 方式较好;当表达式中全 部是标量,if – else 方式较好。
对效率影响很小的部分,可以使用循环
5、思考题
• 计算的驱动力未保存
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -• 取出矩阵的某一(些)整行/列
A=zeros(2,4);
0 0 0 0 0 0 0 0
A(2, :) = ones(1, 4);
0 1 0 1 0 1 1
0 1 0 1 5 5 5
0 1 3 4 5 5 5
0 1 0 1 0 1 1
A(:, 3) = [3, 4];
A(:,[2 3])= 5 * ones(2); x = A(2, :)
3、求解代码
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -19.313];
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; 计算各档的驱动力 figure(1); hold on; grid on; 这里可以写成 for (k=1:5) for k = 1:5 ua = 0.377 * r * n1 /(i0 * ig(k)); Ft = Ttq * ig(k) * i0 * nT/r; plot(ua, Ft) end 注意:每个 for 必须配有 %标注、图例等略 一个 end
各档驱动力Ft 绘图
u a = 0.377 ⋅
r ⋅ np ig ⋅ i0
3、求解代码
仅计算了一档的驱动力 n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); r = 0.367; i0 = 5.83; ig = 5.56; %仅计算一档的驱动力 ua = 0.377 * r * n1 /(i0 * ig); nT = 0.85; Ft = Ttq * ig * i0 * nT/r; plot(ua, Ft) 295.27, -19.313]
发动机转速范围: 600 ≤ n ≤ 4000 ηT = 0.85 传动系效率: 主减速器传动比: i0 = 5.83 r = 0.367 车轮半径 变速器传动比 i g
挡位 传动比 I 5.56 II 2.769 III 1.644 IV 1.00 V 0.793
请思考汽车理论知识点
2、方案分析
y = [5, 6, 7, 8, 9]; z = 8 * ones(1, 5) = [8, 8, 8, 8, 8]; x<y; x < y & y < z; if(x < y) … if(x < y & y < z) %结果为[1, 1, 1, 1, 1] %结果为[1, 1, 1, 0, 0] %if 语句的结果为 1(true) %if 语句的结果为 0(false)
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -19.313];
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; figure(1); hold on; grid on; k = 1; 这里可以写成 while(1) while 1 ua = 0.377 * r * n1 /(i0 * ig(k)); Ft = Ttq * ig(k) * i0 * nT/r; plot(ua, Ft) k = k + 1; if(k == 6) 注意:每个 if 必须配有一个 end break; end break 终止所在的最内层循环 end
4.4 条件语句: if…else…
• 逻辑表达式的结果是矩阵时,只有当矩阵的每个元素都为真,整 个表达式的结果才为真 • 逻辑表达式中含有矩阵时,用 find 方式较好;当表达式中全部 是标量,if – else 方式较好。 if 表达式 执行语句 end if 表达式 语句1 else 语句2 end if 表达式1 语句1 elseif 表达式2 语句2 else 语句2 end
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; figure(1); hold on; grid on; k = 1; 这里可以写成 while(k <= 5) while k <= 5 ua = 0.377 * r * n1 /(i0 * ig(k)); Ft = Ttq * ig(k) * i0 * nT/r; plot(ua, Ft) k = k + 1; 注意:每个 while 必须配有 end 一个 end
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; 请到 workspace figure(1); 查看变量类型 hold on; grid on; for k = 1:5 ua(k, :) = 0.377 * r * n1 /(i0 * ig(k)); Ft(k, :) = Ttq * ig(k) * i0 * nT/r; plot(ua(k, :), Ft(k, :)) end
同时按下shift键?关系运算结果是1或0?两矩阵的比较结果是由1和0组成的新矩阵?新矩阵的每个元素为1则结果为1否则为0?逻辑运算符与关系运算符可以组合运用?例x12345
二、绘制驱动力-阻力平衡图
矩阵运算
Content
• 任务 • 方案分析 • 求解 • 知识点
1、任务:绘制驱动力-阻力平衡图
下面的判断将如何执行?
请上机操作 a = [2 4 0 6]; if(a) x = 1 else x = 2 end a = [2 4 b = [1 3 if(a>b) x else x end 0 6]; 2 5]; = 1 = 2
a = [2 4 0 6]; b = [1 3 2 5]; a(2) a([2 3 4]) a([2:4]) a([2 4]) a([2 4 2 2 5]) 超出了索引范围 试试看a([2 4 2 2 3])
polyval 函数
p = ax 3 + bx 2 + cx + d
x = 600 :50:4000; p = [a, b, c, d]; y = polyval(p, x);
多项式系数 从高到底排列
多项式的值
自变量
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445 40.874 Ttq = polyval(a, n2); -165.44 295.27 -19.313];
t0 = clock …%要测试运行时间的程序代码 t = etime(clock,t0) tic %启动计时 … toc %打印自tic启动后所经历的时间
N1 = 600; N2 = 4000; tic disp('loop'); for n1 = N1:N2 s = n1 ^ 4; end toc tic disp('vector') n2 = N1:N2; s = n2 .^ 4; toc tic disp('poly') n2 = N1:N2; a=[1 0 0 0 0]; s = polyval(a, n2); toc 循环
4 知识点:while 循环
• while 循环的格式如下
while expression … %function statement,循环体语句 end
• 只要 expression 的所有元素非零,重复执行 • break 命令可中止循环(expression 此时仍为真)
while 循环的另一种写法
A = [1:3; 4:6; 7:9]; for k = a x = k end
4 知识点:while 循环
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -19.313];
4 知识点: for 循环
• for 循环的格式如下
for k = expression …%function statement,循环体语句 end
• 其中 expression 为循环表达式,其值与执行的情况如下表所示 expression
空矩阵 标量 行向量 矩阵 列向量 标量
k
循环执行情况
Tq = −19.313 + 295.27 * ( n n 2 n 3 n 4 ) − 165.44 * ( ) + 40.874 * ( ) − 3.8445 * ( ) 1000 1000 1000 1000
• 相关公式
– 功率与转矩(注意单位)
Pe =
Ttq n 9550
Ft =
Tq ⋅ ig ⋅ i0 ⋅ηT r
ua = r ⋅ np ig ⋅ i0
• 求解步骤:
– 计算发动机转矩、功率 – 绘图
• C、Basic语言:循环计算
Ft =
Tq ⋅ ig ⋅ i0 ⋅ηT r
发动机转速n
发动机 转矩Tq 各档车速ua
测算运行时间
• 测试时间有两种方法
– 联合使用函数 clock、etime – 联合使用函数 tic、toc
• 函数 clock,etime(M-文件,可查看和修改)
– – – – – clock: 记录CPU当前时钟的时间 ctrl 和 z 中止执行 左下角(start按钮旁)显示 “busy” 在月或年的边界,etime出错 语法格式
4.2 关系运算符、逻辑运算符
运算符 < 关系运算符 <= == & 逻辑运算符 ~ 非
教材 P190页 表4-3
含义
运算符 > >= ~=
含义
不等于 或
与
|
两个键在键盘上的位置
非:~ 注意:同时按下 Shift 键 或:|
• • • • •
关系运算结果是1或0 两矩阵的比较,结果是由1和0组成的新矩阵 新矩阵的每个元素为1,则结果为1,否则为0 逻辑运算符与关系运算符可以组合运用 例 x = [1, 2, 3, 4, 5];
循环不执行 执行一次 依次
下面的循环体将执行几次?
... for k = 5 x = k end ... for k = [] x = k end 空矩阵:0行0列,不含任 何元素
... for k = 1:5 x = k end
a = 1:5; for k = a x = k end
... for k = [2 6 0 4 -2] x = k end
逐元素运算
polyval
N1 = 600; N2 = 4000;
的改进 示例简单 测试 代码
s = zeros(1, (N2 – N1 + 1)); tic disp('loop'); for n1 = N1:N2 s = n1 ^ 4; end toc tic disp('vector') n2 = N1:N2; s = n2 .^ 4; toc tic disp('poly') n2 = N1:N2; a=[1 0 0 0 0]; s = polyval(a, n2); toc
a = [2 4 0 6]; b = [1 3 2 5]; a > b a(a>b) a([1 1 0 1])
逻辑变量 数值变量
逻辑变量,请在workrksapce中 查看变量类型
逻辑运算函数 --
教材P193表4-6
• find:常用于代替 if 循环结构
find([9.2, 8.9, 10.1, 9.9] > 9) = find([1, 0, 1, 1]) = [1, 3, 4] H = [8.9, 9.2, 9.0; 9.3, 10.1, 9.9; 8.7, 8.8, 11.0] element = find(x>10) 输出结果: element=[5, 9] [row, col] = find(x>10) 输出结果: row=[2, 3] col =[2, 3]
优化循环结构
• 在MATLAB中避免循环:执行时间长 • 循环的效率低于数组运算 • 尽量利用 find 来设计方案
– 逻辑表达式中含有矩阵时,用 find 方式较好;当表达式中全 部是标量,if – else 方式较好。
对效率影响很小的部分,可以使用循环
5、思考题
• 计算的驱动力未保存
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -• 取出矩阵的某一(些)整行/列
A=zeros(2,4);
0 0 0 0 0 0 0 0
A(2, :) = ones(1, 4);
0 1 0 1 0 1 1
0 1 0 1 5 5 5
0 1 3 4 5 5 5
0 1 0 1 0 1 1
A(:, 3) = [3, 4];
A(:,[2 3])= 5 * ones(2); x = A(2, :)
3、求解代码
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -19.313];
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; 计算各档的驱动力 figure(1); hold on; grid on; 这里可以写成 for (k=1:5) for k = 1:5 ua = 0.377 * r * n1 /(i0 * ig(k)); Ft = Ttq * ig(k) * i0 * nT/r; plot(ua, Ft) end 注意:每个 for 必须配有 %标注、图例等略 一个 end
各档驱动力Ft 绘图
u a = 0.377 ⋅
r ⋅ np ig ⋅ i0
3、求解代码
仅计算了一档的驱动力 n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); r = 0.367; i0 = 5.83; ig = 5.56; %仅计算一档的驱动力 ua = 0.377 * r * n1 /(i0 * ig); nT = 0.85; Ft = Ttq * ig * i0 * nT/r; plot(ua, Ft) 295.27, -19.313]
发动机转速范围: 600 ≤ n ≤ 4000 ηT = 0.85 传动系效率: 主减速器传动比: i0 = 5.83 r = 0.367 车轮半径 变速器传动比 i g
挡位 传动比 I 5.56 II 2.769 III 1.644 IV 1.00 V 0.793
请思考汽车理论知识点
2、方案分析
y = [5, 6, 7, 8, 9]; z = 8 * ones(1, 5) = [8, 8, 8, 8, 8]; x<y; x < y & y < z; if(x < y) … if(x < y & y < z) %结果为[1, 1, 1, 1, 1] %结果为[1, 1, 1, 0, 0] %if 语句的结果为 1(true) %if 语句的结果为 0(false)
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -19.313];
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; figure(1); hold on; grid on; k = 1; 这里可以写成 while(1) while 1 ua = 0.377 * r * n1 /(i0 * ig(k)); Ft = Ttq * ig(k) * i0 * nT/r; plot(ua, Ft) k = k + 1; if(k == 6) 注意:每个 if 必须配有一个 end break; end break 终止所在的最内层循环 end
4.4 条件语句: if…else…
• 逻辑表达式的结果是矩阵时,只有当矩阵的每个元素都为真,整 个表达式的结果才为真 • 逻辑表达式中含有矩阵时,用 find 方式较好;当表达式中全部 是标量,if – else 方式较好。 if 表达式 执行语句 end if 表达式 语句1 else 语句2 end if 表达式1 语句1 elseif 表达式2 语句2 else 语句2 end
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; figure(1); hold on; grid on; k = 1; 这里可以写成 while(k <= 5) while k <= 5 ua = 0.377 * r * n1 /(i0 * ig(k)); Ft = Ttq * ig(k) * i0 * nT/r; plot(ua, Ft) k = k + 1; 注意:每个 while 必须配有 end 一个 end
r = 0.367; i0 = 5.83; ig = [5.56, 2.769 1.644 1.00 0.793]; nT = 0.85; 请到 workspace figure(1); 查看变量类型 hold on; grid on; for k = 1:5 ua(k, :) = 0.377 * r * n1 /(i0 * ig(k)); Ft(k, :) = Ttq * ig(k) * i0 * nT/r; plot(ua(k, :), Ft(k, :)) end
同时按下shift键?关系运算结果是1或0?两矩阵的比较结果是由1和0组成的新矩阵?新矩阵的每个元素为1则结果为1否则为0?逻辑运算符与关系运算符可以组合运用?例x12345
二、绘制驱动力-阻力平衡图
矩阵运算
Content
• 任务 • 方案分析 • 求解 • 知识点
1、任务:绘制驱动力-阻力平衡图
下面的判断将如何执行?
请上机操作 a = [2 4 0 6]; if(a) x = 1 else x = 2 end a = [2 4 b = [1 3 if(a>b) x else x end 0 6]; 2 5]; = 1 = 2
a = [2 4 0 6]; b = [1 3 2 5]; a(2) a([2 3 4]) a([2:4]) a([2 4]) a([2 4 2 2 5]) 超出了索引范围 试试看a([2 4 2 2 3])
polyval 函数
p = ax 3 + bx 2 + cx + d
x = 600 :50:4000; p = [a, b, c, d]; y = polyval(p, x);
多项式系数 从高到底排列
多项式的值
自变量
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445 40.874 Ttq = polyval(a, n2); -165.44 295.27 -19.313];
t0 = clock …%要测试运行时间的程序代码 t = etime(clock,t0) tic %启动计时 … toc %打印自tic启动后所经历的时间
N1 = 600; N2 = 4000; tic disp('loop'); for n1 = N1:N2 s = n1 ^ 4; end toc tic disp('vector') n2 = N1:N2; s = n2 .^ 4; toc tic disp('poly') n2 = N1:N2; a=[1 0 0 0 0]; s = polyval(a, n2); toc 循环
4 知识点:while 循环
• while 循环的格式如下
while expression … %function statement,循环体语句 end
• 只要 expression 的所有元素非零,重复执行 • break 命令可中止循环(expression 此时仍为真)
while 循环的另一种写法
A = [1:3; 4:6; 7:9]; for k = a x = k end
4 知识点:while 循环
n1 = 600 :50:4000; n2 = n1 / 1000; a = [-3.8445, 40.874 ,-165.44, Ttq = polyval(a, n2); 295.27, -19.313];
4 知识点: for 循环
• for 循环的格式如下
for k = expression …%function statement,循环体语句 end
• 其中 expression 为循环表达式,其值与执行的情况如下表所示 expression
空矩阵 标量 行向量 矩阵 列向量 标量
k
循环执行情况