8、算法&MATLAB---牛刀小试的实战1

1、生成矩阵

生成[min, max]之间的随机(整数)数矩阵
min和max为用户输入;
行列数为用户输入;
小数或整数由用户指定;
最后输出结果(如何使每次输出的结果相同?)
相关知识点:input、if…else、rand、randi、disp

1.1 思路一

单独输入每一个要求的数字,对输入的最大最小值有防错措施

min=input('请输入一个最小值');
max=input('请输入一个最大值');
row=input('请输入行数');
column=input('请输入列数');
Q=input('生成小数请输入0,生成整数请输入1');
if min>max
   B=min;
   min=max;
   max=B;
end
k=rand([row,column]);
if Q == 0
    A=randi([min,max-1],[row,column])+k;
else
    A=randi([min,max],[row,column]);
end
disp(A)

在这里插入图片描述

1.2 思路二

要培养这种思路哦~矩阵思想和参数命名的习惯
以矩阵的形式解决问题,输入的数值就是矩阵

val = input('请输入矩阵元素范围[min, max]: ');
sz = input('请输入矩阵行列数[row, col]: ');
isInt = input('请指定元素类型0为小数1为整数:');
if isInt == 0
    % (max-min)*rand(row,col)+min
    res = (val(2) - val(1))*rand(sz) + val(1);
else 
    % randi([min,max],[row,col])
    res = randi(val, sz);
end
disp(res)

其中(max-min)*rand(row,col)+min需要好好领会
在这里插入图片描述

2、 模拟圆周率pi

参考思路:
蒙特卡罗法1
蒙特卡罗法2
点数为用户输入值
相关知识点:input、if…else、for循环或 while循环、rand、disp

在这里插入图片描述

如图所示,有一个半径为r=1的圆和边长为1的正方形,圆的面积为pirr=pi,则正方形内部的相切圆的面积为整个圆的1/4,也就是pi/4,正方形的面积为1。然后向正方形中随机打点,就会有一定的概率落在圆中:
在这里插入图片描述
这样就可以得到落在圆中的概率就是=圆的面积/正方形面积=pi/4,那么就可以推出圆周率的计算公式:
在这里插入图片描述
蒙特卡罗算法的一个基本思想,其实就是通过随机点来模拟实际的情况,不断抽样以逼近真实值。
由蒙特卡洛法得出的值并不是一个精确值,而是一个近似值,而且当投点的数量越来越大时,这个近似值也越接近真实值。

allPoints=input('请输入生成的总点数:');
count = 0;
for i = 1:allPoints
    if rand^2 + rand^2 <= 1
        count = count + 1;
    end
end
res = count / allPoints * 4;
disp(res);

3、斐波那契数列

斐波那契数列的第n项和前n项和,n为用户输入值
数列:1,1,2,3,5,8,13,21,34,55…
递推公式:F[n] = F[n-1]+F[n-2];
相关知识点: input、for循环或while循环、disp

3.1 思路一

输入n的需求后,首先要先把数列求出来,找到递推关系式并生成矩阵
使用循环语句将矩阵的每一个元素相加
注意:矩阵第一个元素的位置为1不是0

%% 3.1
N=input('请指定项数n:');
F=[1,1];
res=2;
for i=3:N
     F(i) =F(i-2)+F(i-1);
    res=res+F(i);
 end
 disp(F);
disp(res);

3.2 思路二

使用矩阵的元素下标来计算
第n项斐波那契数列的值=倒数第二个元素n-2项+倒数第一个元素n-1
行矩阵合并 m3=[m1,m2]
length(art):代表art这个矩阵的长度,该行矩阵有五个元素值则为5,有十个元素值则为10
sum(art):对art矩阵里的每一个元素求和

%% 3.2
 N = input( '请指定数列的项数:');
 res = [1,1];
 for i = 3:N
     element = res(length(res)) + res(length(res)-1);
     res = [res, element];
 end
 disp(res);
 disp(sum(res));

4、拓展

由于在运行程序时,可能会进入死循环,此时有以下退出方法
方法一:打开任务管理器,终止MATLAB的进程。
方法二:CTRL+C
方法三:CTRL+break
方法四:CTRL+ALT+break

5、全部代码

%% 牛刀小试1
%% 1 生成矩阵:生成[min, max]之间的随机(整数)数矩阵
% min和max为用户输入;
% 行列数为用户输入;
% 小数或整数由用户指定;
% 最后输出结果(如何使每次输出的结果相同?)
% 相关知识点:input、if...else、rand、randi、disp
%% 1.1
% 若运行请取消注释
% min=input('请输入一个最小值');
% max=input('请输入一个最大值');
% row=input('请输入行数');
% column=input('请输入列数');
% Q=input('生成小数请输入0,生成整数请输入1');
% if min>max
%    B=min;
%    min=max;
%    max=B;
% end
% k=rand([row,column]);
% if Q == 0
%     A=randi([min,max-1],[row,column])+k;
% else
%     A=randi([min,max],[row,column]);
% end
% disp(A);
%% 1.2
%若运行请取消注释
% val = input('请输入矩阵元素范围[min, max]: ');
% sz = input('请输入矩阵行列数[row, col]: ');
% isInt = input('请指定元素类型0为小数1为整数:');
% if isInt == 0
%     % (max-min)*rand(row,col)+min
%     res = (val(2) - val(1))*rand(sz) + val(1);
% else 
%     % randi([min,max],[row,col])
%     res = randi(val, sz);
% end
% disp(res);
%% 2 模拟圆周率pi
% 参考思路:蒙特卡罗法;
% 点数为用户输入值
% 相关知识点:input、if...else、for循环或 while循环、rand、disp
%% 2.1
% 若运行请取消注释
% allPoints=input('请输入生成的总点数:');
% count = 0;
% for i = 1:allPoints
%     if rand^2 + rand^2 <= 1
%         count = count + 1;
%     end
% end
% res = count / allPoints * 4;
% disp(res);
%% 3 斐波那契数列
% 斐波那契数列的第n项和前n项和,n为用户输入值
% 数列:1,1,2,3,5,8,13,21,34,55......
% 递推公式:F[n] = F[n-1]+F[n-2];
% 相关知识点: input、for循环或while循环、disp
%% 3.1
% 若运行请取消注释
% N=input('请指定项数n:');
% F=[1,1];
% res=2;
% for i=3:N
%     F(i) =F(i-2)+F(i-1);
%     res=res+F(i);
% end
% disp(F);
% disp(res);
%% 3.2
% 若运行请取消注释
% N = input( '请指定数列的项数:');
% res = [1,1];
% for i = 3:N
%     element = res(length(res)) + res(length(res)-1);
%     res = [res, element];
% end
% disp(res);
% disp(sum(res));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值