金融数据分析(MATLAB)个人学习笔记(3):MATLAB程序设计
一、M文件
(一)概述
用MATLAB语言编写的程序,称为M文件。
M文件可以根据调用方式的不同分为两类:
- 命令文件(Script File)脚本文件,不接受参数的输入和输出。M脚本文件与matlab工作区共享变量空间。每次只需键入文件名即可运行M脚本文件中的所有代码。
- 函数文件(Function File)函数文件,接受参数的输入和输出,M函数文件处理参数传递的数据,并把处理结果作为函数输出参数返回给输出参数。在调用M文件时,需要指定输入参数实际取值,而且要指定接收输出结果的输出变量。
(二)建立与打开
M文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用的是使用MATLAB提供的文本编辑器。
• 是一串按用户意图排列而成matlab指令集合
• 文件的扩展名为.m,文件为纯文本文件(可用记事本等纯文本编辑器进行编辑)
• 文件按Maltab变量名的规则进行命名,不可包含中文等字符,否则无法在Maltab中进行调用(虽然可以正常存盘)。
包含中文字符时,可存储但不可调用
英文名称的程序在更新数据之后可以直接运行,建议一步步运行
数据分析之后要根据金融逻辑去解释论证
• 脚本文件运行后,所产生的变量都驻留在matlab的 基本工作空间(base workspace)中。
每个M文件都是为了完成一个任务,用M文件去编写程序并存储。
二、程序控制结构
(一)选择结构
1. if语句
(1)单分支if语句
if 条件:
语句
end
当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。
(2)双分支if语句
if 条件:
语句1
else
语句2
end
当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。
(3)多分支if语句
if 条件1
语句组1
elseif 条件2
语句组2
……
elseif 条件m
语句组m
else
语句组n
end
语句用于实现多分支选择结构。
2. switch语句
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:
switch 表达式
case 表达式1
语句组1
case 表达式2
语句组2
end
当表达式的值等于表达式1的值时,执行语句组1,当表达式的值等于表达式2的值时,执行语句组2,…,当表达式的值等于表达式m的值时,执行语句组m,当表达式的值不等于case所列的表达式的值时,执行语句组n。当任意一个分支的语句执行完后,直接执行switch语句的下一句。
(二)循环结构
1. for语句
for语句的格式为:
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。
for语句更一般的格式为:
for 循环变量=矩阵表达式
循环体语句
end
执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。
示例1
for ii=1:10
x(ii)=ii;
end;

示例2:
for n=1:5
for m=5:-1:1
A(n,m)=n^2+m^2;
end;
end;

for循环一般最多到3重
示例3:
x=-5:0.01:5; % x有1000个数值
for i=1:length(x) % i从1到1001,length(x):x中的元素个数
if x(i)>2
y(i,1)=2*x(i)+3;
else
y(i,1)=x(i)^2-3*x(i)+1;
end
end
plot(x,y)

2. while语句
while语句的一般格式为:
while (条件)
循环体语句
end
其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。
示例:
h=0.06e-3; %0.06*10^-3
n=0;
while h<1e4 % h<10000
n=n+1;
h=2*h;
end
3.break语句和continue语句
与循环结构相关的语句还有break语句和continue语句。它们一般与if语句配合使用。
break语句用于终止循环的执行。当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一语句。
continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。
例 求[100,200]之间第一个能被21整除的整数。
程序如下:
for n=100:200
if rem(n,21)~=0
continue
end
break
end
三、函数文件
(一)基本结构
函数文件由function语句引导,其基本结构为:
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
• 第一行为引导行,表示该M文件为函数文件;
• 函数名的命名规则与变量名相同(以字母开头);
• 当输出变量不止一个时,用方括号括起来;
• 函数必须是一个单独的M文件;
• 函数文件名必须与函数名一致,不要更改。
• % 以一个%开头的行是注释行,不被解释和执行
(二)函数调用
函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
要注意的是,函数调用时各实参出现的顺序、个数,应
与函数定义时形参的顺序、个数一致,否则会出错。函
数调用时,先将实参传递给相应的形参,从而实现参数
传递,然后再执行函数的功能。
例:期权[c,p]=blsprice(St,K,…)
例:把下列语句编成函数
x=-5:0.01:5;
for i=1:length(x)
if x(i)>2
y(i,1)=2*x(i)+3;
else
y(i,1)=x(i)^2-3*x(i)+1;
end
end
plot(x,y)
先新建一个函数文件,然后编写函数体
function y=ff(x)
if x>2
y=2*x+3;
else
y=x^2-3*x+1;
end
end
尝试调用:ff(3)
结果:
上述例子用ff函数实现:
x=-5:0.01:5;
for i=1:length(x)
y(i,1)=ff(x(i));
end
plot(x,y)
结果:
例:编写BS期权定价公式
大脑怎么算,程序就怎么编
先确定输入输出
输出:c和p
N(d1):正态分布累积分布函数
函数体:
function [c,p]=bls(S,K,tao,r,sigma)
d1=(log(S/K)+(r+sigma^2/2)*tao)/sigma*sqrt(tao); % sqrt:平方根
d2=d1-sigma*sqrt(tao);
nd1=normcdf(d1,0,1); % 标准正态累积分布函数值
nd2=normcdf(d2,0,1);
c = S*nd1- K*exp(-r*tao)* nd2; % exp:指数函数
p=c-S+K*exp(-r*tao);
end
函数调用:
[c,p]=bls(50,48,0.5,0.03,0.1) % 默认输出看涨期权价格
结果:
例:验证标的物价格s与期权价格c,p之间的关系
s=30:0.01:60;
for i=1:length(s)
[c(i,1),p(i,1)]=bls(s(i),48,0.5,0.03,0.1);
end
plot(s,c,p)
hold on % 保留上一个图像
plot(s,p)
结果:
例:将学生分数转化为级别
90-100,A;80-89,B;70-79,C;60-69,D;others,E;
先用excel生成一个30-100的随机数列,然后导入到MATLAB中
函数:
function grade = trans(score)
% trans将学生分数转化为级别
%score 分数
%grade级别,90-100,A;80-89,B;70-79,C;60-69,D;others,E;
if score>100||score<0 % 对错误数值进行标注
grade='err';
elseif score<=90
grade='A';
elseif score>=80&&score<90
grade='B';
elseif score>=70&&score<80
grade='C';
elseif score>=60&&score<70
grade='D';
else
grade='E';
end
调用:
[score,textdata]=xlsread('D:\Study Material\...\scores.xlsx');
for i=1:length(score)
grade(i,1)=trans(score(i));
end
% 将分数和等级保存到新的Excel文件
resultTable = table(score, grade, 'VariableNames', {'Score', 'Grade'});
resultFilePath = 'D:\Study Material\...\grade_results.xlsx'; % 结果文件路径
writetable(resultTable, resultFilePath);
disp('等级划分完成,结果已保存至Excel文件!'); % 在命令窗口输出一段字符
四、程序调试
(一)概述
一般来说,应用程序的错误有两类:语法错误和运行错误。
语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。
程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。
(二)调试器
1.Debug菜单项
该菜单项用于程序调试,需要与Breakpoints菜单项配合使用。
2.Breakpoints菜单项
该菜单项共有6个菜单命令,前两个是用于在程序中设置和清除断点的,后4个是设置停止条件的,用于临时停止M文件的执行,并给用户一个检查局部变量的机会,相当于在M文件指定的行号前加入了一个keyboard命令。
(三)调试命令
除了采用调试器调试程序外,MATLAB还提供了一些命令用于程序调试。命令的功能和调试器菜单命令类似,具体使用方法请读者查询MATLAB帮助文档。
更多推荐
所有评论(0)