2021-07-14 在马特拉布(MATLAB)中编程

(以下内容大多翻译自《A Beginner’s Guide to MATLAB》的第三章,是对原文的删减和改写)

1. M文件:脚本(script)和函数(function)

为了更好地利用马特拉布,我们需要学会在马特拉布中写长长的程序,而这种程序势必需要保存在一个文件里,这就是m文件。m文件得名于其后缀.m,而且只能用马特拉布编译运行m文件。

m文件分为两种,即脚本和函数。脚本m文件基本就是你把你要执行的一系列文件放在m文件中,然后在马特拉布中调用它就可以了,可以说是命令行模式的方便版。

而函数文件,可以说是用户自己的智慧结晶,它通常会有输入和输出。让我们来实际操作一下吧。

我们创建一个log3.m的函数文件,把文件里的函数也叫作log3(函数名通常和文件名一致),这个函数的作用是计算以3为底的对数
在这里插入图片描述

然后在命令行下调用

在这里插入图片描述

虽然只有短短几句,但函数文件从创建到应用的过程就是这样!麻雀虽小五脏俱全嘛。那么,接下来我们就来看看有关函数文件的语法规则吧。首先是这样的

  • 关键字 function
  • 输出放在圆括号里(上例为x)
  • 输入放在方括号里(上例为a)
  • 函数名log3(一般和文件名一致)
  • end

当然,end、输入、输出根据实际情况都不一定需要,但function和函数名肯定是必需的。当然,对于函数的一些介绍可以用注释写,在这里就略去,如果你用help获取这个函数的帮助,就可以的到函数文件中注释的信息了。

2. 循环

循环一般有两种,for和while

2.1 for 循环

for循环让我们可以重复执行一些指令,当然喽,你得告诉马特拉布,循环的起止点,这样,循环才有结束的一天,而不会无限死循环。

% 一般for是这样写的
 for i = 1:4  % 起点是1,重点是4,这是一个闭区间
 	i = 2
 	end
 	

结果就是这样

在这里插入图片描述

在for和end包围的空间,就是你施展才华的地方,你可以里面写你需要的东西。

比如现在我想写一个for循环,让向量中的每个元素都变成自己的平方,我就可以这么写

x = 1:10;

for i = 1:10
	x2(i) = x(i)^2; % matlab里面用圆括号索引向量
	end

结果

在这里插入图片描述

和其他语言一样,马特拉布也可以嵌套for循环。作为对for嵌套循环的学习,我们用一个实际的例子——高斯消元法来阐述吧。

%% 在这个例子里,我们将编写程序,让程序能够对线性方程组
%% 执行高斯消元法,并得出Ax = b的解
function [x] = gauss_eli(A,b)
%% [x] = gauss_eli(A,b)
% 这个子程序的任务就是对线性方程Ax = b做高斯消元
% 然后进行回代,以解出Ax = b的解
%% 此函数对系数矩阵是方阵的函数适用,且无求逆步骤,因此要
% 自己提前判断系数矩阵是否可逆
	N = max(size(A));
	
	% 高斯消元
	for j = 2:N
		for i = j:N
			 m = A(i,j-1)/A(j-1, j-1);
			 A(i,:) = A(i,:) - A(j-1,:)*m;
			 b(i) = b(i) - m*b(j-1);
	 	end
	end
	
	% 回代
	x = zeros(N, 1);
	x(N) = b(N)/A(N,N);
	
	for j = N-1:-1:1
		x(j) = (b(j)-A(j,j+1:N)*x(j+1:N))/A(j,j);
	end
%% 函数结束
end

结果

在这里插入图片描述

另外一个比较实际的例子就是生成希尔伯特矩阵,其中 n × n 的 希 尔 伯 特 矩 阵 H 是 这 样 定 义 的 : H i , j = 1 i + j − 1 \displaystyle n\times n的希尔伯特矩阵H是这样定义的: H_{i,j} = \frac{1}{i+j-1} n×nH:Hi,j=i+j11

k = 16;
A  =zeros(k,k);
for m = 1:k
    for n = 1:k
        A(m,n) = 1/(m+n-1);
    end
end
format rat % 用分数进行显示
A

结果太大,略,可以直接复制运行验证

2.2 while循环

while循环是一种条件循环,就是把for改成while 条件,和for其实差不多。

3 if语句

所谓的if语句,就是if elseif else end这样包起来的语句结构。

比如我们要画这样一个函数
在这里插入图片描述

那么就可以这样

x = -1:0.01:1
for i = 1:length(x)
	if x(i) < 0.5
		F(i) = x(i)^2;
	else
		F(i) = 0.25;
	end % if一定要接end
end  % end for for loops

plot(x,F)

结果为
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值