科学计算与matlab语言download.ilovematlab.cn/meetup/2018csu/matlab... ·...
TRANSCRIPT
科学计算与MATLAB语言
(Scientific Computing & MATLAB Language)
刘卫国
中南大学信息科学与工程学院
2018年4月14日 长沙
计算和科学计算的概念
科学计算与MATLAB语言的关系
MATLAB的矩阵
MATLAB语言MOOC
1.“计算”的含义
(1)算术运算,即数的四则运算。
一、计算与科学计算
这里,“计算”体现的是一种基本的数学技能,这是
人类的基本技能。
(2)较复杂的运算,即根据已知量算出未知量。
求y=sinx
求𝑎𝑏 1
𝑥𝑑𝑥 = 𝑙𝑛𝑏 − 𝑙𝑛𝑎
求ax2+bx+c=0的根
当需要求解的问题变得复杂而用传统数学
方法无法求出精确解时,如何进行计算?
求定积分的问题
求一元方程根的问题
利用计算机运算速度快、计算精度高的特点,通过重
复执行简单的操作,完成复杂的计算。
求定积分的问题可以变成n个曲边梯形的面积求和
的问题。
求一元方程根的问题,可以采用很多逐渐逼近的
求解方法。
2 .什么是科学计算
利用计算机处理数值计算问题的方法,称为科学
计算(Scientific Computing)。
科学计算方法既有数学理论上的抽象性和严谨
性,又有程序设计技术上的实用性和实验性。
由于计算机对数值计算的推动和影响,科学计
算已成为继理论研究和科学实验之后的第三种
科学研究方法。
二、科学计算与MATLAB语言的关系
20世纪80年代以来,MATLAB等科学计
算软件的产生,使得科学计算问题变得十
分方便、高效。
使用MATLAB语言作为实现工具,人们不需要过多
了解各种数值计算方法的具体细节和计算公式,也
不需要繁琐的底层编程,从而可以专注于本专业问
题的分析和设计,大大地提高工作效率和质量,为
科学研究与工程应用提供重要手段。
求x2-3x+1=0的根。
直接利用求根公式
数值计算方法:迭代法、二分法、割线法
MATLAB解法
MATLAB方法一
>> p=[1,-3,1];
>> x=roots(p)
x=
2.6180
0.3820
求x2-3x+1=0的根。
>> x=-5:0.1:5;
>> y=x.*x-3*x+1;
>> plot(x,y,[-5,5],[0,0]);
MATLAB方法二
>> f=@(x)x*x-3*x+1;
>> x1=fzero(f,0.5)
x1=
0.3820
>> x2=fzero(f,2.5)
x2=
2.6180
MATLAB方法三
>> f=@(x) x*x-3*x+1;
>> x1=fsolve(f,0.5,optimset('Display','off'))
x1=
0.3820
>> x2=fsolve(f,2.5,optimset('Display','off'))
x2=
2.6180
MATLAB方法四
>> symsx
>> x=solve(x^2-3*x+1)
x=
3/2-5^(1/2)/2
5^(1/2)/2+3/2
>> x=eval(x)
x=
0.3820
2.6180
三、MATLAB的矩阵
MATLAB:MATrix LABoratory
数据皆矩阵
将二维矩阵看作一维矩阵
向量化编程是MATLAB的特征
(1)A*B的二义性
>> A=[1:3;3:5];
>> B=[1,2;3,4;5,6];
>> A*B
ans =
22 28
40 52
>> A.*B
矩阵维度必须一致。
什么情况下该用点乘运算?
当x=0.1、0.4、0.7、1时,分别求y=sinx cosx的值。
>> x=0.1:0.3:1;
>> y=sin(x)*cos(x)
错误使用 *
内部矩阵维度必须一致。
>> x=0.1:0.3:1;
>> y=sin(x).*cos(x)
y =
0.0993 0.3587 0.4927 0.4546
当x=0.1、0.4、0.7、1时,分别求y=sinx cosx的值。
(2)MATLAB矩阵按列存储
>> A=magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
按列存储
按行存储
>> A=magic(5)
>> max(A)
for n=[1,2,3,4,5]
n
end
for n=[1;2;3;4;5]
n
end等价吗?
isprime(m)
~sum(rem(m,2:sqrt(m))==0)
isempty(find(~rem(m,2:sqrt(m))))
all(rem(m,2:sqrt(m)))
factor(m)==m
length(factor(m))==1
(3)向量化编程
判断m是否素数
>> primes(100)
ans =
1 至 13 列
2 3 5 7 11 13 17 19 23 29 31 37 41
14 至 25 列
43 47 53 59 61 67 71 73 79 83 89 97
求[2,100]素数?
>> m=2:100;
>> m(isprime(m))
>> m(find(isprime(m)))
>> m(find(m.*isprime(m)))
>> m(find(~isprime(m)))=[]
>> m(~isprime(m))=[]
>> m(~isprime(m))=[]
m =
1 至 13 列
2 3 5 7 11 13 17 19 23 29 31 37 41
14 至 25 列
43 47 53 59 61 67 71 73 79 83 89 97
四、MOOC课程
10个专题
大量的应用案例
MATLAB功能实现的数学背景
与算法原理
中国大学MOOC
高手不觉其易,初学不觉其难
(学员的话)
第一期选课人数超过4万人
演讲视频下载地址:http://www.ilovematlab.cn/thread-538626-1-1.html