MATLAB教学_03结构化程式与自定义函数

本文学习 MATLAB教学_03结构化程式与自定义函数。视频地址为:https://www.bilibili.com/video/av68228488?p=3
本文主要学习三个内容:

  1. 脚本编写
  2. 结构化程序
  3. 用户自定义函数

小技巧

clear all    %移除在工作区的所有变数
close all    %关闭所有的图形

Ctrl+C 可以强制退出正在运行的程序
clc 在命令行窗口输入clc可以清屏

A=[1 2 3 4 5 6;...      %...是换行,系统默认下面输入的是同一行
   6 5 4 3 2 1]

MATLAB文件格式

MATLAB的程序需要保存为 *.m 的格式。
小提示:可以把脚本写到一个 m文件里。然后用 ‘%%’ 分成不同的section. 然后运行 run section 就可以在运行不同的模块。用断点的话可以在此行停止,然后去观察工作区,看变数的值是多少。以此来判断。

结构化程序语言

类似于C语言的关键字。
在这里插入图片描述
逻辑符号:
在这里插入图片描述

if elseif else

在这里插入图片描述

a =-3;               %28分钟练习
if rem(a,2) == 0     % rem()函数 就是 除后的余数
    disp('a is even')
else
    disp('a is odd')
end
注意:
  1. 在这里没有用 a/2,是因为a/2的数依然会是偶数或者是奇数,还要再进行判断。
  2. 这里也可以用 mod 来代替 rem。 虽然 最后结果是一样的。但是若我们在程式后面来显示 mod(a,2) 和 rem(a,2 ) 的话,结果却不一样。教程中提到取模(mod)与取余(rem)是不同的:
    <1> 当x和y的正负号一样的时候,两个函数结果是等同的;
    <2> 当x和y的符号不同时,rem函数结果的符号和x的一样,而mod和y一样。
    <3> 这是由于这两个函数的生成机制不同,rem函数采用fix函数,而mod函数采用了floor函数(这两个函数是用来取整的,fix函数向0方向舍入,floor函数向无穷小方向舍入)。
    此段内容参考: https://blog.csdn.net/u013066730/article/details/53840461

关于print、fprintf、fscanf、disp

print函数可以把函数保存为图片;
print('-dpng','sin.png')   表示保存为png图片,文件名为sin.png
fprintf函数可以将数据按指定格式写入到文本文件中;
fscanf函数是读取文本文件中的数据;
disp函数是直接将内容输出在MATLAB命令窗口中;
这里有一篇博客可以参考 :https://blog.csdn.net/qq_35860352/article/details/82155860

switch

在这里插入图片描述

input_num = 1;        %35分钟练习
switch input_num      %根据不同的值,选择不同的case,如果没有合适的,就选择otherwise
    case -1
        disp('negative 1');
    case 0
        disp('zero');
    case 1
        disp('positive 1');
    otherwise
        disp('other value');
end

while

在这里插入图片描述

n = 1;    %40分钟练习
while prod(1:n) < 1e100    %prod 这个函数相当于是 n!, 后面的1e1001* 10^100
    n=n+1;
end
n      %显示n,要不不知道n是多少

44分钟练习

在这里插入图片描述

n = 0;       %44分钟练习
sum=0;
while n<999    %因为while里第一句就是n=n+1,所以n=998时,里面的n=n+1=999,
    n=n+1;
    sum=sum+n;
    
end
sum
n

for

在这里插入图片描述

clear;
for n=1:10        %49分练习
                  %这里如果只写了n=1:10,则是从110,默认每次增加1,若再加一个,如:n=1:0.1:10,则是从110,每次
                  %增加0.1
    a(n)=2^n;     %这里是把a设置为了一个向量,随着n的增加保存到a这个向量的第1个元素,第2个,一直到第10个元素
end
disp(a)

注意:这里讲到一个clear。比如你以前有个变数 a, 但是在运行新程序时把以前的 a 没有清除,那保存的还是以前的数据。

%%
clear;
for n=1:5       %56分练习第1个方法
    a(n)=2^(n*2-1);     %改变a(n)后面显示的指数,
end
disp(a)

%%
clear;        %56分练习第2个方法
i=1;
for n=1:2:10
    a(n)=2^n;
    if a(n) ~=0;        %因为如果这个数没有指定的话,那么就是0。把这些非0的留下,是0的删除,组成新的向量
        b(i)=a(n);
    end
    i=i+1;   
end
tic
  代码    ;计算运行这段代码所使用的时间
toc

64分钟练习

在这里插入图片描述

 %%
 clear;      %64分钟练习
 A=[0 -1 4; 9 -14 25; -34 49 64];
 for i=1:3
     for j=1:3
         if A(i,j)>=0
             B(i,j)=A(i,j);    %如果A(i,j)>=0,则直接赋值给B(i,j)
         else
             B(i,j)=rand();    %如果A(i,j)<0,则赋值给B(i,j)一个随机数,rand()是随机数函数
         end
     end
 end
 format short;      %改变格式是为了方便观察
 A
 B

break

在满足条件时可以跳出来,或者为了避免程序宕机,可以使用。
edit(which(mean.m))    % edit是编辑函数, which是一个关键字,表示这个所指的位置在哪

脚本与函数

脚本函数
没有输入有输入
没有输出有输出
运算保存在全局运算只保存在局部

脚本是最简单的程序类型,因为它们存储命令的方式与您在命令行中键入命令完全相同。脚本没有输入输出,但是它的结果是保存在工作区的,并且是全局变量。但是,函数更灵活,更容易扩展。每次调用的时候并不需要一次次修改它的输入值。

在这里插入图片描述

点乘的重要性

如果你的这个输入量是一个矩阵,那是希望在这个矩阵里实现点乘,每个矩阵都和对应的元素相每次。例如:
function x= freebody(x0,v0,t)
x=x0+v0.*t+1/2*9.8*t.*t;
...
freebody([0 1],[0 1],[0 20])   %正是因为上面的函数有了点每次。所以进行时相当于是freebody(0,0,0)freebody(1,1,20);
                               %如果这里没有点乘,则会出错

90分钟练习题

在这里插入图片描述

 %%
 clear all;
 close all;   %90分钟练习

 while 1
     F=input('请输入一个温度:');
     if isempty(F)==1
        break
     end
     C=(F-32).*5/9;
     disp(C)
 end

 %%
 clc
 clear all;
 close all;   %90分钟练习第二个方法
 a=1;
 while a
     disp('请输入1或者2,1代表转换温度,2代表结束程序')
     F=input('请输入一个数:');
     switch F
         case 1
             Temp=input('请输入一个温度:');
             if isempty(Temp)==1
                 break
             end
             C=(Temp-32).*5/9;
             disp(C)
         case 2
             a=0;
         otherwise
             disp('wrong number,please input a number again')
     end
 end

匿名函数

f=@(x) exp(-2 *x); x是它的输入,后面的(-2 *x) 是它的表达式。
  • 45
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值