MATLAB教程-台大郭彦甫学习

P3

%%
n=0;
for n=1:2:9
b=(n+1)/2;
A(b)=2^n;
end
disp(A)

%%
tic
A=[0 -1 4;9 -14 25;-34 49 64];
for m=1:size(A,1)
for n=1:size(A,2)
while A(m,n)<0
A(m,n)=abs(A(m,n))
end
end
end
toc

%%
function C=F2C(F)
F=input('F temprature is ');
while ~isempty(F)
C=5/9.*(F-32);
disp(['C temprature is ',num2str©]);
break
end
end

P4

%%
s1=‘I like letter E’;
m=size(s1,2);
for n=1:m
s2(n)=s1(m+1-n);
end
disp(s2)

%%
A=[1 2 3;4 5 6];
B=reshape(A,3,2);
disp(B)

P5

%%
t=1:0.1:2;
y1=t.^2;
y2=sin(2*pi.*t);
h=plot(t,y1,t,y2);
b=get(h);
c=get(gca);
set(gca,‘fontsize’,12);
set(h(1),‘color’,[0,0,0],‘linewidth’,2);
set(h(2),‘color’,[1,0,0],‘linewidth’,2);
title(‘Mini Assignment #1’)
xlabel(‘Time(ms)’);
ylabel(‘f(t)’);
legend(‘t^2’,‘sin(2πt)’)

这里修改一个图片上的line,需要用到h(1)和h(2),b矩阵非法。
在这里插入图片描述

p6

Stack the horizontal bar chart

x=[1 2 5 4 8];
y=[x;1:5];
barh(y,‘stacked’);
title(‘stackedn horizontal’)
在纵向角度把图像压缩在一条显示
separate all the pieces

x=[10 5 20 30];
pie3(x,[1,1,1,1]);
将所有的部分分离显示
hexagon

theta=linspace(0,2pi,7);
r=ones(1,length(theta));
polar(theta,r)
在这里插入图片描述
取样画图
t=0:0.2:10;
f=sin(pi
t.*t/4);
h=stem(t,f);
h.Color=‘red’;
hold on
plot(t,f)
这里用到hold on指令
在这里插入图片描述
t=(0:1:3)’*pi/2;
x=sin(t);
y=cos(t);
fill(x,y,‘y’);
axis square off
text(0,0,‘WAIT’,‘Color’,‘black’,…
‘FontSize’,80,‘HorizontalAlignment’,‘center’);
在这里插入图片描述
这次是用UI改好的
不知道flat怎么弄掉
G=[46 38 29 24 13];
S=[29 27 17 26 8];
B=[29 23 19 32 7];
h=bar(1:5,[G’ S’ B’]);%柱状条
title(‘Medal count for top 5 countries in 2012 Olympics’);
xlabel(‘Country’);
ylabel(‘Number of medals’);
legend(‘Gold’,‘Silver’,‘Bronze’);%右上角图标
h(1).FaceColor=[255,255,0]/255;
h(2).FaceColor=[143,143,80]/255;
h(3).FaceColor=[80,0,8]/255;
弄好了,这里不能用set函数不知道为什么
在这里插入图片描述
主要是用hot进行调换得到的,颜色和老师的比浅得很啊。
x=[1:10;3:12;5:14];
imagesc(x);
colorbar;
a=colormap(hot);
[m n]=size(a);
for i=1:m
p=a(i,1);
q=a(i,2);
a(i,1)=q;
a(i,2)=p;
end
colormap(a)
在这里插入图片描述
x=-3.5:0.2:3.5;
y=-3.5:0.2:3.5;
[X Y]=meshgrid(x,y);
Z=X.*exp(-X.2-Y.2);
[C h]=contourf(X,Y,Z,[-0.45:0.05:0.45]);
hold on
clabel(C,h);
这里要记得填充和标线都要标注间隔,不然句柄数值不一样
在这里插入图片描述
这个造世界的程序好好玩啊,竟然这么几行就能完成
load cape
X=conv2(ones(9,9)/81,cumsum(cumsum(randn(100,100)),2));
surf(X,‘EdgeColor’,‘none’,‘EdgeLighting’,‘Phong’,…
‘FaceColor’,‘interp’);
colormap(map);
caxis([-10,300]);
grid off
axis off
在这里插入图片描述

p7 User Interface

function slider2_Callback(hObject, eventdata, handles)
% hObject handle to slider2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,‘Value’) returns position of slider
% get(hObject,‘Min’) and get(hObject,‘Max’) to determine range of slider
a=get(handles.slider1,‘Value’);
b=get(handles.slider2,‘Value’);
c=int16(a+b);
set(handles.text2,‘String’,num2str©);
在这里插入图片描述
deploytool将GUI转化为EXE

P9

clear
I=imread(‘rice.jpg’);
Imean=graythresh(I).*255;
[m n k]=size(I);
for i=1:m
for j=1:n
if I(i,j)>=Imean
J(i,j)=1;
else
J(i,j)=0;
end
end
end
subplot(1,2,1)
imshow(I)
subplot(1,2,2)
imshow(J)在这里插入图片描述
clear
tic
I=imread(‘rice.jpg’);
BG=imopen(I,strel(‘disk’,15));
I2=imsubtract(I,BG);
level=graythresh(I2);
BW=im2bw(I2,level);
[labeled numObjects]=bwlabel(BW,8);
gsize=ones(numObjects,1);
for i=1:256
for j=1:256
for m=1:numObjects
if labeled(i,j)==m
gsize(m)=gsize(m)+1;
end
end
end
end
glargest=max(gsize);
gmean=mean(gsize);
toc
数大米输出来了
在这里插入图片描述
但其实我感觉最大的大米可能是两个连在一起了。

clear
tic
I=imread(‘rice.jpg’);
BG=imopen(I,strel(‘disk’,15));
I2=imsubtract(I,BG);
level=graythresh(I2);
BW=im2bw(I2,level);
[labeled numObjects]=bwlabel(BW,8);
gsize=ones(numObjects,1);
for i=1:256
for j=1:256
for m=1:numObjects
if labeled(i,j)==m
gsize(m)=gsize(m)+1;
end
end
end
end
%储存每一个的面积
num=ones(450/25,1);
for n=25:25:450
grains=find((n-25)<gsize&gsize<=n);%储存某一面积对应的大米数目
num(n/25)=size(grains,1);
end
bar(25:25:450,num);%画柱状图
for i=1:256
for j=1:256
if labeled(i,j)~=0
I(i,j,1)=255;
I(i,j,2)=0;
I(i,j,3)=0;
else
I(i,j,1)=0;
I(i,j,2)=0;
I(i,j,3)=0;
end
end
end
imshow(I)
%将原图画红色
for i=1:numObjects
if gsize(i,1)>25
grainsize(i,1)=gsize(i,1);
end
if gsize(i,1)>350
grainsize(i,1)=gsize(i,1)/2;
review(i,1)=gsize(i,1)/2;
end
end
%去掉小于25的,和找到连在一起的
a=[find(grainsize=0);find(review=0)];
for i=1:94
pregsize(i,1)=grainsize(a(i,1),1);
end
for i=95:97
pregsize(i,1)=review(a(i,1),1);
end
%将调整后的大米面积放在一个矩阵里
glargest=max(pregsize);
gmean=mean(pregsize);
%算出调整后的大米最大面积和平均面积
toc
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
算出了调整后的大米。
regionprops()函数返回面积中心点框图坐标
bwselect()函数可以选择大米粒

P10

clear
tic
x=-2:0.01:1;
a=[20 -7 5 10];
b=[4 12 -3];
fa=conv(a,b);
foa=polyder(fa);
f=polyval(fa,x);
fo=polyval(foa,x)
plot(x,f,‘b’,x,fo,‘r’)
toc
在这里插入图片描述
曲线差不多,为啥数值相差这么大啊。

clear
tic
x0=pi/2;
h=0.0000001;
x=[x0 x0+h];
y=[sin(x0) sin(x0+h)];
m=diff(y)./diff(x);
error=abs(m*100)
toc

clear
%%
tic
g=colormap(lines);
hold on;
for i=1:3
x=0:power(10,-i):2pi;
y=exp(-x).sin(x.^2/2);
fo=diff(y)./diff(x);
plot(x(1:end-1),fo,‘Color’,g(i,:));
end
set(gca,‘XLim’,[0,2
pi]);
set(gca,‘FontName’,‘LaTex’);
set(gca,‘Xtick’,0:pi:2
pi);
set(gca,‘XtickLabel’,{‘0’,‘p’,‘2p’})
h=legend(‘h=0.1’,‘h=0.01’,‘h=0.001’);
toc
在这里插入图片描述

P11

syms x
y=cos(x)2-sin(x)2;
solve(y,x)

syms x
y=cos(x)2+sin(x).2;
solve(y,x)

syms x y a b r;
eq=(x-a)2+(y-b)2-r^2;
solve(eq,x)

syms x f
f=exp(x2)/(x3-x+3);
diff(f)/diff(x)

syms x y g
g=(x2+x*y-1)/(y3+x+3);
diff(g)/diff(x)

syms x
y=(x^2-x+1)/(x+3);
z=int(y,[0 10])
int8(z)

f=@root2d;
x0=[-5;-5];
fsolve(f,x0)
function F=root2d(x)
F(1)=2x(1)-x(2)-exp(x(1));
F(2)=-x(1)+2
x(1)-exp(-x(2));
end
在这里插入图片描述
这里求二元函数的根想了好久。
要把两个二元函数放一个矩阵里,然后呼叫这个矩阵函数的句柄。

roots([1 -6 -12 81]);
一个函数就可以求多项式的根诶。

牛顿法matlab求解方程式根。这里一开始用了feval函数算函数值,但不知道为什么一直算的是sym结果,就改成用subs+double算出函数结果。
clear
syms x
f=x^2-4;
fi=diff(f);
[X0 N]=Newton(f,fi,10,0.01)

function [X0,N]=Newton(f,fi,x0,e)
n=0;
f0=abs(double(subs(f,x0)));
X0=x0;
N=0;
while f0>=e
f0=double(subs(f,x0));
fi0=double(subs(fi,x0));
x0=x0-f0/fi0;
n=n+1;
end
X0=x0;
N=n;
end
在这里插入图片描述

P12

rref()函数将线性方程组系数矩阵化为单位矩阵,就可以直接求根了。

这里老师讲了右除求方程式的算法步骤。
syms R1 R2 R3 R4 R5 V1 V2
A=[R1 0 0 R4 0;0 R2 0 -R4 R5;0 0 R1 0 -R5;…
1 -1 0 -1 0;0 1 -1 0 -1];
b=[V1 0 -V2 0 0]’;
I=A\b
在这里插入图片描述
感觉好优美。

tic
[x1 y1]=meshgrid(0:0.1:40);
z1=-x1-y1;
mesh(x1,y1,z1)
hold on
[x2 y2]=meshgrid(0:0.1:40);
z2=-x2+y2;
mesh(x2,y2,z2)
hold on
[x3 y3]=meshgrid(0:0.1:40)
z3=-x3/3;
mesh(x3,y3,z3)
toc
这里画了三个图。
在这里插入图片描述
eig()函数可以算出特征值和特征向量。

exmp()函数老师举的例子没看懂,据说是微分线性系统分析用的。

P13统计

x=[1 2 3 3 3 3 4 5 5 5 6 7 8];
AMax=max(x);
y=ones(1,AMax);
[M N]=size(x);
for i=1:N
switch x(i)
case 1
y(1)=y(1)+1;
case 2
y(2)=y(2)+1;
case 3
y(3)=y(3)+1;
case 4
y(4)=y(4)+1;
case 5
y(5)=y(5)+1;
case 6
y(6)=y(6)+1;
case 7
y(7)=y(7)+1;
case 8
y(8)=y(8)+1;
end
end
subplot(1,3,1);bar(1:AMax,y);
subplot(1,3,2);area(1:AMax,y);
subplot(1,3,3);stem(1:AMax,y);
在这里插入图片描述
改了数据。

kurtosis()函数看平缓程度。

P14回归与内插

clear
clc
x=[0.025 0.035 0.050 0.060 0.080];
y=[20 30 40 50 60];
fit=polyfit(x,y,1);
xfit=0:0.001:0.1;
yfit=fit(1)*xfit+fit(2);
plot(x,y,‘ro’,xfit,yfit);
legend(‘原始值’,‘最小二乘法’)
在这里插入图片描述
cftool()函数可以拟合更多样式的函数。

x=[0 0.25 0.75 1.25 1.5 1.75 1.875 2 2.125 2.25];
y=[1.2 1.18 1.1 1 0.92 0.8 0.7 0.55 0.35 0];
x_j1=x;
y_j1=y;
y_j1=interp1(x_j1,y_j1,x);%线性插值
x_j2=x;
y_j2=y;
y_j2=spline(x_j2,y_j2,x);%光滑插值
plot(x,y,‘ob’,x_j1,y_j1,’-r’,x_j2,y_j2,’-g’);
legend(‘data’,‘linear’,‘spline’);
在这里插入图片描述
xx=-2:0.5:2;
yy=-2:0.5:3;
[X Y]=meshgrid(xx,yy);
Z=X.*exp(-X.2-Y.2);
xx_j=-2:0.1:2;
yy_j=-2:0.1:3;
subplot(2,1,1);
[X_J Y_J]=meshgrid(xx_j,yy_j);
Z_J=interp2(xx,yy,Z,X_J,Y_J);%线性插值
surf(X_J,Y_J,Z_J);hold on
plot3(X,Y,Z+0.01,‘or’);%显示更清楚
subplot(2,1,2);
[X_I Y_I]=meshgrid(xx_j,yy_j);
Z_I=interp2(xx,yy,Z,X_I,Y_I,‘cubic’);%光滑插值
surf(X_I,Y_I,Z_I);hold on
plot3(X,Y,Z+0.01,‘or’);%显示更清楚
在这里插入图片描述
完结撒花啦!感谢郭老师!

  • 17
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值