什么叫计算?
(1)算术运算,平时用的加减乘除、乘方开方等数学运算
(2)较为复杂的运算,即根据已知量求未知量,如函数关系,定积分,方程求根等
但是,我们实际工程应用中的问题往往是十分复杂的,比如要解高次方程,超越方程,但
传统方法是无法求出这些方程的精确解的,此时我们需要借助计算机来进行计算。利用计算机运行速度快,计算精度高的特点来计算。
什么叫科学计算?
利用计算机处理数值问题的解法,称为科学计算(Scientific Computing)
科学计算与Matlab语言的关系
当我们拿到一个问题,我们一般是通过以下步骤求解:
- 分析数值问题
- 研究求解算法
- 通过计算机程序实现
- 分析计算结果
Matlab(Matrix Laboratory)是一款科学计算软件。
Matlab语言的主要功能
- 数值计算
- 符号计算
- 图形绘制
- 程序流程控制
- 工具箱
研究一个实例问题: 求 x 2 − 3 x + 1 x^2-3x+1 x2−3x+1 的根,我们有三种方法
- 因为是一元二次方程,可以直接利用求根公式
- 数值计算方法,如:迭代法,二分法,割线法
- Matlab解法
我们重点讨论Matlab解法,看看Matlab的优势
**方法一:**利用Matlab多项式求根函数roots来求根
p=[1 -3 1];
x=roots(p)
在命令行窗口中输入可以得到运行结果:
通过Matlab的绘图功能绘制函数
f
(
x
)
=
x
2
+
3
x
+
1
f(x)=x^2+3x+1
f(x)=x2+3x+1 的图像可以知道方程解的大致位置,代码如下:
x=-5:0.1:5; % 产生x向量
y1=x.*x-3*x+1; % 求函数值向量y1
y2=zeros(size(x)); % 产生和x向量同大小的零向量
plot(x,y1,x,y2);
grid on
结果如下图所示:
方法二: 利用Matlab提供的求单变量非线性方程根的函数fzero,利用该函数可以求方程在某个初始点附近的实根。
代码如下:
f=@(x) x*x-3*x+1; % 定义匿名函数f(x)
x1=fzero(f,0.5) % 分别求f(x)=0在x=0.5和x=2.5处的附近的实根
x2=fzero(f,2.5)
结果如下:
方法三:在Matlab最优化工具箱中还提供了一个功能更强的方程求根函数fsolve,fsolve的第三个参数用于 设置优化参数 ,可以调用optimset函数完成
f=@(x) x*x-3*x+1;
x1=fsolve(f,0.5,optimset('Display','off'))
% Display选项设置为off,表示不显示迭代的中间结果
x2=fsolve(f,2.5,optimset('Display','off'))
**方法四:**利用solve函数求方程的符号解,通过eval函数可以将符号解转换成数值解
Matlab代码如下:
syms x;
x=solve(x^2-3*x+1)
x=eval(x)
得到结果如下: