第三十二天:matlab作业基本用法

在这里插入图片描述

matlab上课的作业:总共14道题,涵盖了matlab的各种基本的用法
本文约6000字,预计阅读20分钟

第一题:

在这里插入图片描述
第一题很简单,就是调用randn函数

clc;
clear;

y=1+2*randn(5);
p=find(y>0.4&y<0.6);
data=y(p)

第二题:

在这里插入图片描述
这道题就是判断数位交换以后的数还是不是素数

clc
clear
res=[];
for j=11:99
    if(isprime(j))
        temp1=j;
        temp2=0;
        while temp1
            temp2=temp2*10+mod(temp1,10);
            temp1=fix(temp1/10);
        end
        if(isprime(temp2))
            res=[res,j];
        end
    end
end



function [judge] = isprime(n)
%UNTITLED4 此处显示有关此函数的摘要
%   此处显示详细说明
flag=1;
for j=2:sqrt(n)
    if mod(n,j)==0
        flag=0;
        break
    end
end

if flag
    judge=1;
else
    judge=0;
end
end

第三题

在这里插入图片描述
不断的取余数,然后&1就行

clc;
clear;


m=input("请输入一个整数: ");
res=0;
while m
    n=mod(m,10);
    if(mod(n,2)==1)
        res=res+1;
    end
    m=fix(m/10);
end

res

第四题:

在这里插入图片描述
这道题是一个约瑟夫环的问题。我们已经非常熟悉了,用模拟的方式去做。
但其实可以用递推的方式。

我们假设f(n)表示的是当总人数为n的时候,并且间隔为k时最终剩下的那个人的编号,那么因为每一次删掉的人数是固定的,那么如果我们找到f(n-1)和f(n)的关系,那么就可以从1递推到n。

我们假设编号是从0开始,显然f(1)= 0,也就是说当删掉一个人的时候,我们这个问题就已经转化成了还有n-1个人的时候最终留下来的那个人你的下标是多少,很明显,当我们需要重新编号的时候:
在这里插入图片描述
我们假设n=10,k=3,第一次删掉的这个人的下标应该是2,删完以后下一个人序号就需要更新,重新数到3。我们发现,每一次删掉一个人下标跟之前的下标差k,这就是两个状态之间的关系,为了防止数组的越界,我们需要mod(n)。

//约瑟夫问题
clc;
clear;

n=10;
m=7;
f(1)=1;
for i=2:n
    f(i)=mod((f(i-1)+m-1),i+1);
end
f

g(1)=0;
for i=2:n
    g(i)=mod((g(i-1)+m),i);
end

g+1

第五题:

在这里插入图片描述

clc
clear

a=1;
b=1;
% c=sqrt(a^2+b^2);
y=linspace(-5,5,50);
x=(y.^2+1).^0.5;
plot(x,y,'k');
hold on
grid on
% plot(x,-y,'k');
% plot(-x,y,'k');
% plot(-x,-y,'k');
axis([-5 5 -5 5]);

第六题:

在这里插入图片描述

在这里插入图片描述
画图,调用的函数mesh,meshgrid,contour

xx=-5:0.1:5;
yy=xx;
[x,y]=meshgrid(xx,yy);
z=x.^2+y.^2.*sin(x.*y);
subplot(1,2,1)
mesh(x,y,z)
subplot(1,2,2)
contour(x,y,z)
colorbar

figure(1)

% axis equal

第七题:

在这里插入图片描述

subs()函数表示将符号表达式中的某些符号变量替换为指定的新的变量
clc
clear
syms x y
y=(sin(x))^2+(cos(2*x))^2;
Y=diff(y,2);
res=subs(Y,x,2)

第八题:

在这里插入图片描述
这是一道三次样条插值的问题当然我们也可以直接去算。

clc
clear

x=1:10;
y=x.^1/3);
res=interp1(x,y,25,'spline');

第九题:

在这里插入图片描述
这是一道曲线拟合的问题

clc
clear


x=[1.2 1.4	1.6	1.8	2.0	2.2	2.4	2.6]';
y=[2.9462	3.4094	3.8090	4.1643	4.4794	4.7654	5.0254	5.2668];

y=y';
syms t

f=fittype('a+b*log(x)/log(5)','independent','x','coefficients',{'a','b'});

cfun=fit(x,y,f); %显示拟合函数,数据必须为列向量形式

xi=1:0.1:2.8;

yi=cfun(xi);

figure

plot(x,y,'r*',xi,yi,'b-');

title('拟合函数图形');

得到的结果是这样的:
在这里插入图片描述

第十题:

两种方法计算定积分:
在这里插入图片描述

%% 积分的数值求解
x=1/exp(1):0.001:1;
y=-log(x);
z1=trapz(x,y);
x=1:0.001:exp(1);
y=exp(x);
z2=trapz(x,y);



g=@(x)(-log(x));
f1=quad(g,1/exp(1),1);
h=@(x)(log(x));
f2=quad(h,1,exp(1));

%% 定积分的符号解法
syms x
fun=(-log(x));
I1=vpa(int(fun,x,1/exp(1),1))
fun=(log(x));
I2=vpa(int(fun,x,1,exp(1)))

以下是结果
在这里插入图片描述

第十一题:

在这里插入图片描述
这里我们使用dsolve函数去求解微分方程的数值解

clc

clear
syms y(x)
Dy=diff(y);
y=dsolve(diff(y,2) == x+y ,y(1) == 2,Dy(1) == 3);
yy=subs(y(1),x,1.4);
yy=double(yy)
fplot(y(1),[0,1.4])

第十二题:

在这里插入图片描述
求最大值可以直接max一发完事儿

ff=sin(x)+(cos(x))^2;
fplot(x,ff)
max(subs(ff,x,(0:0.01:2*pi)));

第十三题:

在这里插入图片描述
这是一道简单的线性规划的问题,不过我自己不喜欢用linggo去求解(主要是懒),还是matlab一发入魂好。

%% x1,x2,x3 代表的是每种食物的含量
clc;clear;
c=[0.2 0.7 0.4]';
a=[-3 -2 -1;-1 -0.8 -0.2;-0.5 -1 -0.2;0.5 0.1 0.3];
b=[-700 -30 -100 200]';
[x,y]=linprog(c,a,b,[],[],zeros(3,1));
% y=-y;
x

第十四题:

在这里插入图片描述

终于到最后一题啦!!!
简单的额背包问题,不过我们先把重量*100变成整数就好计算了

clc;
clear;

w=[0.78	0.56	0.90	0.59	0.23	0.86	0.83	0.94	0.28	0.65];
w=[w,0.42	0.63	0.93	0.78	0.44	0.17	0.58	0.94	0.61	0.11];
w=fix(w*100);

v=[0.33	0.73	0.96	0.22	0.33	0.33	0.32	0.41	0.33	0.53];
v=[v,0.85	0.59	0.36	0.78	0.61	0.15	0.80	0.22	0.52	0.40];

dp=zeros(21,600);
for i=1:20
    for j=1:600
        if j<=w(i)
            dp(i+1,j) = dp(i,j);
            continue;
        end
        if dp(i,j)<(dp(i,j-w(i))+v(i))
            dp(i+1,j)=dp(i,j-w(i))+v(i);
        else
            dp(i+1,j)=dp(i,j);
        end
    end
end

dp(21,600)

        

距离2021年春节还有96天,加油!!!
在这里插入图片描述

近期预告:
线段树、树状数组、状压DP、Trie树、图论

如果大家有什么建议或者要求请后台留言
联系方式:shirandexiaowo@foxmail.com

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shirandexiaowo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值