【优雅的使用Matlab进行机器学习】作业

这个名字显然不是我取的,是货真价实的信科院课程。
【优雅】、【matlab】和【机器学习】,buff叠满了属于是。
当然,至少到目前(4.7),还停留在matlab的阶段,机器学习下周开始。

matlab基础

数据类型

整型:无符号整型和有符号整型
浮点型:single,double
取整函数:round,fix,floor,ceil
类型相同的数据才能运算

运算符、表达式

/(除或右除)
\(反除或左除)
^乘幂
'共轭转置

.* 矩阵乘或点乘
./ 矩阵除或点除
.\ 矩阵左乘或左除
.^ 矩阵乘幂或点乘幂
.' 转置 (矩阵行转换为列 ,复元素不做共轭)

~= 不等于

指数函数

exp,log,log10,log2,pow2,sqrt

取整函数和求余函数:

round,fix,floor,ceil,rem,mod,sign

矩阵变换函数:

fliplr,flipud,flipidm,rot90,diag,tril,triu,det

其他函数:

min,max,mean,median,std,diff,sort,length,norm,sum,prod,dot,cumsum,cumprod,cross

输入输出

input
disp
fprintf

分支结构

if 语句

if condition
   Execute the statement
end

if—elseif—else------end多分支语句

switch语句

switch 表达式
   case 表达式1
       语句1
   case 表达式2
       语句2
   ... ...
   case 表达式n
       语句n
   otherwise
       语句n+1
end

for 循环

for 循环变量=expr1:expr2:expr3
循环体语句
end

#Example
s=0;
for i=1:2:12
    s=s+i;
end

while 循环

whlie <循环判断的语句v>
循环体
end

Example:
s=0;
i=1;
while i <=12
   s=s+i;
   i=i+2;
end

匿名函数

匿名函数: fhandle=@(arglist)expr

Example:
fhandle=@(x,y)(x.^3+y.^3);
a=5;
b=8;
fhandle(a,b)

二维绘图

plot(x1,y1,'LineSpec1',x2,y2,'LineSpec2',...,xn,yn,'LineSpecn')

在这里插入图片描述
添加坐标标注、标题、网格以及标注的图形。

xlabel,ylabel,title,legend,grid on/off,axis.figure,text

标注数据点

scatter(x,y,sz,c,mkr,'filled')

(x,y)数据点
sz数据点大小
c颜色
mkr标记
'filled’实心,默认空心

曲线

plot3(X1,Y1,Z1,'LineSpace',...)

绘制三维曲线图(sin(x),x,cos(x))

条形图

bar,barh,bar3,bar3h
直方图
hist(y,m),hist(y,x)

y=random(10,1);
y=randn(10,6);

饼图

pie(x,explode,'label');
pie3(x,explode,'label');

子图

subplot

其他绘图

双纵坐标图形plotyy
封闭图形patch
半对数图semilogx

隐函数作图

ezplot,ezplot3,ezmesh,ezsurf

课程作业

第一次作业:matlab脚本文件

输入长方形的长和宽,计算长方形的周长和面积并输出
l = input('输入长:');

 w = input('输入宽:');
zc=2*l+2*w
s = l * w;
fprintf('%d',zc);
fprintf('%d',s);


输入三角形的三条边(要满足构成三角形的条件),求三角形的周长和面积
a = input('输入第一条边:');

b = input('输入第二条边:');

c = input('输入第三条边:');

if (a+b>c && a+c>b && b+c>a)

    zc= a+b+c;

    p = zc*0.5;

    s = sqrt(p*(p-a)*(p-b)*(p-c));



else

    fprintf('输入不正确');

end

fprintf('周长=%d  ',zc);

fprintf('  面积=%d',s);
输入一元二次方程的三个系数,求一元二次方程的根。

我的答案:

a = input('输入第一个系数:');

b = input('输入第二个系数:');

c = input('输入第三个系数:');

d=b*b-4*a*c;



if (d>=0)

    x=((-1*b)+sqrt(d))/(2*a);

    y=((-1*b)-sqrt(d))/(2*a);

   fprintf('x1=%d  ',x); 

   fprintf('x2=%d  ',y);

else

    fprintf('无实根');

end
给定半径,求球的体积和表面积。
r = input('输入半径:');



v=(4/3)*pi*r^3;

s= 4*pi*r^2;



fprintf('球的体积为:%d\n',v);



fprintf('球的面积为:%d',s);
输入三个数,将其按照从小到大的顺序排列。
a = input('输入第一个数:');

b = input('输入第二个数:');

c = input('输入第三个数:');

array = [a,b,c];



b=sort(array);



    fprintf('%d',b);

第二次作业:分支语句

输入一个字符,如果是大写字母,输出其后继字符及其ASCII值,如果不是大写字母,原样输出。例如,输入字符B,输出“字母B的后继字符为C,对应的ASCII码值为67”,注意字母Z的后继字符为A。
ch=input('请输入一个字符:','s');

if ch>='A' && ch<'Z'

    fprintf('字母%c的后继字符为%c,对应的ASCII码值为%d',ch,ch+1,ch+1);

elseif ch =='Z'

    fprintf('字母%c的后继字符为%c,对应的ASCII码值为%d',ch,ch-25,ch-25);

else

           

        fprintf(ch);

end
输入一个小于10000的整数,求出是几位数并且逆序输出。例如,输入123,输出“该数为3位整数,其逆序数为321”
r = input('输入一个整数:');

n=floor(log10(r))+1

a=floor(r/1000);

b=floor((r-1000*a)/100);

c=floor((r-1000*a-100*b)/10);

d=floor((r-1000*a-100*b-10*c)/1);

if n==4



    fprintf('该数为%d位整数,其逆序数为%d%d%d%d\n',n,d,c,b,a);

elseif n==3



      fprintf('该数为%d位整数,其逆序数为%d%d%d\n',n,d,c,b);

elseif n==2

 fprintf('该数为%d位整数,其逆序数为%d%d\n',n,d,c);

elseif n==1

   fprintf('该数为%d位整数,其逆序数为%d\n',n,d);

else

    fprintf('输入格式错误');

end
在编辑窗口中:输入学生成绩,输出该成绩的等级。等级规定如下:[90,100]为A等,[80,90)为B等,[70,80)为C等,[60,70)为D等,[0,60)为E等
g = input('输入学生成绩:');



if (90<=g)&&(g<=100)



    fprintf('成绩等级为A等');

elseif  (80<=g)&&(g<90)



    fprintf('成绩等级为B等');

elseif  (70<=g)&&(g<80)



    fprintf('成绩等级为C等');

elseif (60<=g)&&(g<70)



    fprintf('成绩等级为D等');

elseif (0<=g)&&(g<60)



    fprintf('成绩等级为E等');

else

    fprintf('输入格式错误');

end
商场购物,100件以下,不优惠,100199件95折,200399件90折,400799件85折,8001499件80折,1500件以上,75折。输入所购货物的单价、件数,求实际付款数目。
p = input('输入货物单价:');

n = input('输入货物件数:');







if n<100

    fprintf('实际付款为%d',n*p);

elseif  (100<=n)&&(n<199)

    fprintf('实际付款为%d',n*p*0.95);

elseif  (200<=n)&&(n<399)



    fprintf('实际付款为%d',n*p*0.9);



elseif (400<=n)&&(n<799)



    fprintf('实际付款为%d',n*p*0.85);



elseif (800<=n)&&(n<1499)



    fprintf('实际付款为%d',n*p*0.8);

else

    fprintf('实际付款为%d',n*p*0.75);



end

第三次作业:switch和循环

从键盘输入两个数和运算符,用switch语句实现一个简单的四则运算计算器。采用循环设置10个题目,输出做对多少题。
for i = 1:10

    fprintf('第%d题',i)

    a =input('a=');

    b =input('b=');

    op=input('op=','s');

    answer=input('answer=');

    count=0;

    switch op

        case '+'

            fin=a+b;

       case '-'

            fin=a+b;

       case 'x'

            fin=a*b;

       case '/'

            fin=a/b;

    end

    if fin ==answer

        fprintf('正确\n');

    else

        fprintf('错误\n');

    end

end
百钱买百鸡

公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡, 其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。

n=100;

for x =1: (floor(n / 5) + 1)

    for y = 1: (floor(n / 3) + 1)

        s = n - 5 * x - 3 * y;

        z = s*3;

        p = x + y + z;

        if p == n

                fprintf("公鸡数量为%d  " ,x );

                fprintf("母鸡数量为%d  " ,y );

                fprintf("小鸡数量为%d\n",  z);



        else

                continue

        end

     end

end
验证哥德巴赫猜想:任何一个大于4的偶数都可以表示为两个素数的和。
n=input('请输入一个大于4的偶数:');

i=2;

while i>1&&i<n/2

    if isprime(i)==1     

        j=n-i;     

        if isprime(j)==1     

            fprintf('\n%d=%d+%d',n,i,j);

        end

    end

    i=i+1;

end
输入一个10进制整数,转换为二进制输出
n=input('请输入一个非负十进制整数:');

num=dec2bin(n);

fprintf(num)
斐波那契数列

斐波那契数列:又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

要求:(1)编写函数fibo,功能是求斐波那契数列的第n项。(2)编写测试脚本,调用fibo函数,输出斐波那契数列的前30项。

function [x]=fibo(n)

    if (n==1) || (n==2)

        x=1;

    else

        x=fibo(n-1)+fib(n-2);

    end

end





x=fibo(30)

fprintf(x)





for i=1:30

    fprintf('%d  \n',fibo(i));

    

end

第四次作业:数据可视化

第一题

作图:在同一图中显示正弦函数y1=sin(x)与直线y2=-x+0.5,要求显示标题、横坐标标签、纵坐标标签、图例,对y1、y2做文本标注。x取值[-2pi,2pi],然后通过解方程组将解在图中用星号标注

clear

h1=figure(1)



x=-2*pi:0.1:2*pi;

y1=sin(x);



y2=(-1)*x+0.5;

plot(x,y1,'b-','linewidth',1)



hold on

plot(x,y2,'r-..','linewidth',2)

xlabel('x','fontsize',18)

ylabel('y','fontsize',18)

title('示例曲线','Color','r','fontsize',18)

legend('y1=sin(x)','y2=-x+0.5')

grid on



f = @(x)(sin(x)+x-0.5);

xj=fzero(f,3);

yj=sin(xj)+xj-0.5

text(xj,yj+0.2,num2str(yj))

plot(xj,yj+0.2,'g-*')
第二题

在第1个子窗口用极坐标画图显示r=0.5(1+cos(θ)),其中θ∈[0,2π];在第2个子窗口作填充图,填充坐标矢量为X=[0 0.2 0.8 1 0.5 0],Y=[1 0 0 1 1.8 1],填充颜色为蓝色;在第3个子窗口作双y轴图y1=sin(t),t∈[0,4π],y2=20*cos(t);在第4个子窗口显示相图x=sin(t),y=cos(t).如图所示。
在这里插入图片描述

subplot(2,2,1);

theta=0:0.1:2*pi;

r=0.5*(1+cos(theta));

polarplot(theta,r);

subplot(2,2,2);

x2=[0 0.2 0.8 1 0.5 0]

y2=[1 0 0 1 1.8 1]

fill(x2,y2,'b')

subplot(2,2,3);

t=0:0.01:4*pi;

y1=sin(t)

y3=20*cos(t)

plotyy(t,y1,t,y3)

subplot(2,2,4);

m=-1:0.1:1;

xt =  cos(m);

yt =  sin(m);

ezplot(xt,yt,[-1,1])
第三题

在这里插入图片描述

第四题

在这里插入图片描述

第五次作业:回归分析

1

在这里插入图片描述

clear

t = [0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 5.0 6.0 6.1 7.0];

f = [300 281 261 244 228 214 202 191 181 164 151 149 141];

% [p,S]=polyfit(t,h,2);



scatter(t,f)



p=polyfit(t,f,3);  



xi=1:0.2:10;



yi=polyval(p,xi);  



plot(xi,yi,t,f,'r*');

xlabel('time(时间)','fontsize',18)



ylabel('temp(温度)','fontsize',18)

legend('time(时间)-temp(温度)曲线')

fprintf('由图及几何曲线可知,t=9时f为126.4\n');

2

在这里插入图片描述

clc;

clear;

close all;

x1 = [180	201	205	208	213	217	218	222	226	230	233	238	240	242	253]';  % 跳高成绩

x2 = [280 240 226 224 220 217 225 221 211 213 199 198 195 186 183]';    % 1000m成绩

x3 = [153 170 162 160 162 165 170 168 169 179 172 172 175 181 176]';    % 跳绳个数

Y = [60	75 70 70 75	75 85 80 80	85 90 90 90	95 95]';                    % 综合打分



figure(1);

hold on;

plot(x1,'bo');

plot(x2,'ro');

plot(x3,'go');

plot(Y,'mo','LineWidth',1);

legend('跳高成绩(cm)','1000m成绩(s)','跳绳个数','去年的综合分数(100分制)')









len = length(Y);

pelta = ones(len,1);

x = [pelta, x1, x2, x3];



[b,bint,r,rint,stats]=regress(Y,x,0.03);     



BS = b(1) + b(2) .* x1 + b(3) .* x2 + b(4) .* x3 ;



figure(2);

hold on;

plot(x1,'bo-');

plot(x2,'ro-');

plot(x3,'go-');

plot(Y,'mo-');

plot(BS,'kx-','LineWidth',1);

legend('跳高成绩(cm)','1000m成绩(s)','跳绳个数','去年的综合分数(100分制)','多元线性回归拟合曲线')

R_2 = 1 - sum( (BS - Y).^2 )./ sum( (Y - mean(Y)).^2 );

str = num2str(R_2);

disp(['拟合优度为:',str])

fprintf('由图可知,散点可以线性拟合,使用多元线性回归拟合\n');
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值