对于复杂的数值计算问题,可以利用计算机进行问题求解,即利用计算机运算速度快、计算机精度高的特点,通过重复执行简单的操作,完成复杂的计算。
科学计算(Scientific Computing)是利用计算机处理数值问题的方法。既有数学理论上的抽象性和严谨性,又有程序设计技术上的实用性和实践性。
科学计算与MATLAB语言的关系
数值问题——>求解算法——>程序实现——>结果分析
MATLAB语言的主要功能
①数值计算②符号计算③图形绘制④程序流程控制⑤工具箱
MatLab编程基础
一、M文件编辑器
1、创建M文件的方法
(1)在MatLab命令行运行窗口运行指令edit;
(2)单击MatLab主页中的新建脚本
(3)选择MatLab主页上的新建脚本图标
(4)右键当前文件夹框空白处,选择“新建”,点击脚本;
(5)使用快捷键CTRL+N;
2、打开已有的M文件
(1)在命令行运行窗口运行指令edit filename;
(2)使用文件夹窗口点击打开;
3、保存M文件
(1)使用菜单栏的保存按钮
(2)使用快捷键CTRL+S;
4、文件的执行
(1)在编辑器打开M文件,然后点击菜单栏的运行
(2)在命令行窗口输入M文件的文件名,注意:不包括后缀名;
二、控制流
1、if语句和switch语句的比较
if语句 | switch语句 |
比较复杂,特别是嵌套使用的if语句 | 可读性强,易于理解 |
当比较字符串时要借助strcmp函数 | 可直接比较不同长度的字符串 |
可检测相等和不相等 | 仅检测相等 |
2、循环结构
(1)for循环结构
语法:
for index = values
statements
end
案例:
s = 10;
H = zeros(s)
for c = 1:s
for r = 1:s
H(r,c) = 1/(r+c-1);
end
end
(2)while循环结构
语法:
while expression
statements
end
案例:
求出Fibonacci数列中第一个大于9999的元素
function [i,z] = fibonacci()
a(1) = 1;
a(2) = 1;
i = 2;
while a(i) < 10000
a(i+1) = a(i) + a(i-1)
i = i+1;
end
z = a(i)
end
三、控制流的其他指令
1、return指令
在函数中使用renturn指令,将强制终止函数的执行,并把控制权转回主函数或命令行窗口。
2、pause指令
类似其他编程语言的sleep,可以控制文件的暂停于恢复。它的语法格式:
pause:暂停执行文件,等待用户按任意键继续。
pause(n):在继续执行文件之前,暂停n秒。
3、continue指令
在嵌套循环中,continue把控制传给下一个for或while循环所嵌套的迭代。
用例:
clc;clear;
fid = fopen('magic.m', 'r');
count = 0;
while ~feof(fid)
line = fgetl(fid);
if isempty(line) || strncmp(line, '%', 1) || ~ischar(line)
continue
end
count = count +1;
end
count
fclose(fid);
4、break指令
当执行循环过程中(如迭代求解),有时候不需要等到最后一个循环执行结束就可以得到我们想要的结果,这时候后面的循环就是冗余的。我们通过break语句来直接结束当前循环结构。
用例:
求随机序列之和,直到下一随机数大于上限为止。然后,使用break语句退出循环。
clc;clear;
limit = 0.8;
s = 0;
while j
tmp = rand;
if tmp > limit
break
end
s = s + tmp;
end
五、函数
1、函数的一般结构
函数声明行:位于函数文件的首行,以MatLab关键字function开头,定义函数名及函数的输入/输出变量。
H1行:紧随函数声明行之后的以“%”开头的第一行注释行,通常描述函数的功能。
帮助文本区:H1行及气候的连续注释行,通常包括函数输入/输出变量的含义调用说明。
编写和修改记录:文本区后的注释,记录了编写及修改M文件的所有的作者、日期及版本号。
函数主体。
函数定义名和文件保存名一致。当两者不一致时,Matlab将忽视文件首行的函数定义名,而以文件保存名为准。
示例:
function spir_len = spirallength(d, n, lcolor)
% CIRCLE plot a cirale of radius as r in the provided color and calculate its area
% d: 螺旋的旋距
% n: 螺旋的圈数
% lcolor: 画图线的颜色
% spir_len: 螺旋的周长
% spirallength(d, n): 利用蓝色以预设参数的螺旋线
% spirallength(d, n, lcolor): 利用lcolor颜色以预设参数的螺旋线
% spir_len = spirallength(d, n): 计算螺旋线的周长,并用蓝色填充螺旋线
% spir_len = spirallength(d, n, lcolor): 计算螺旋线的周长,并用lcolor颜色填充螺旋线
if nargin > 3
error('输入变量过多!');
elseif nargin == 2
lcolor = 'b';
end
j = sqrt(-1);
phi = 0: pi/1000 : n*2*pi;
amp = 0: d/2000 : n*d;
spir = amp .* exp(j*phi);
if nargout == 1
spir_len = sum(abs(diff(spir)));
fill(real(spir), imag(spir), lcolor)
elseif nargout == 0
plot(spir, lcolor)
else
error('输出变量过多!');
end
axis('square')