MATLAB程序解读.docx
《MATLAB程序解读.docx》由会员分享,可在线阅读,更多相关《MATLAB程序解读.docx(16页珍藏版)》请在冰点文库上搜索。
MATLAB程序解读
Matlab程序
一.可视化绘图。
1.二维图形绘制:
绘制方程
表示的一组椭圆,其中
;
t=[0:
pi/50:
2*pi]';
a=[0.5:
.5:
4.5];
x=cos(t)*a;
y=sin(t)*sqrt(25-a.^2);
plot(x,y);
xlabel('x','FontSize',12);
ylabel('y','FontSize',12);
title('一组椭圆','FontSize',15);
2.用曲面图表示函数
;
x=-10:
10;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;
surf(X,Y,Z);
title('z=x^2+y^2');
3.列出求下列空间曲面交线的程序,并做图
clc
clearall
x=-10:
0.1:
10;
y=x;
[X,Y]=meshgrid(x,y);
z1=X.^2-2*Y.^2;
z2=2*X-3*Y;
k=find(abs(z1-z2)<0.1);
x1=X(k);
y1=Y(k);
z3=2*x1-3*y1;
plot3(x1(1:
2:
end),y1(1:
2:
end),z3(1:
2:
end),'r','LineWidth',2);
holdon
plot3(x1(2:
2:
end),y1(2:
2:
end),z3(2:
2:
end),'r','LineWidth',2);
title('z=2x-3y与z=x^2-2y^2的交线','FontSize',15)
gridon
4.设
要求以0.01秒为间隔,求出y的151个点,并求出其导数的值和曲线,画两个子图。
symst
f(t)=sqrt(3)/2*exp(-4*t).*sin(4*sqrt(3)*t+pi/3);
g(t)=diff(f(t));
t=0:
0.01:
150*0.01;
subplot(211);
plot(t,f(t),'r','LineWidth',2);
xlabel('t(s)','FontSize',12);
ylabel('原函数值','FontSize',12);
title('原函数f(t)','FontSize',15)
subplot(212);
plot(t,g(t),'LineWidth',2);
xlabel('t(s)','FontSize',12);
ylabel('导函数值','FontSize',12);
title('导函数f(t)','FontSize',15);
5.在同一图上分别用红色实线和绿色虚线绘制y1=sin(x)和y2=cos(x)在区间[0,4*pi]的曲线,及建立图例。
clearall
clc
t=0:
pi/50:
4*pi;
y1=sin(t);
y2=cos(t);
plot(t,y1,'r');
holdon
plot(t,y2,'g--');
xlabel('t','FontSize',12);
ylabel('y','FontSize',12);
legend('y1=sin(t)','y2=cos(t)');
二.符号运算(写m文件)
1.采用符号运算,研究
取何值时,如下的齐次方程组有非零解?
(编写m文件)。
clearall
symsa
A=[1-a-24;23-a1;111-a];
f(a)=det(a);
a=solve('-a^3+5*a^2-6*a=0','a');
a=
0
2
3
从而当
不等于0,2,3时,该方程组有非零解。
2.设f(x)=x^5-4x^4+3x^2-2x+6(编写m文件)
(1)取x=[-2,8]之间函数的值(取100个点),画出曲线,看它有几个零点。
(2)用roots函数求此多项式的根.
从图中可以看出有三个实根。
clearall
clc
x=linspace(-2,8,100);
y=x.^5-4*x.^4+3*x.^2-2*x+6;
plot(x,y);
axis([-28-2020]);
p=[1-403-26];
x=roots(p)
运行结果:
x=
3.7999+0.0000i
-1.2607+0.0000i
1.3479+0.0000i
0.0564+0.9623i
0.0564-0.9623i
x确实有三个实数跟。
3.(写m文件)设
为符号变量,
,
,试进行如下运算。
(1)
,
(2)
,
(3)对
进行因式分解,
(4)求
的反函数。
clearall
clc
symsx
f(x)=x^4+2*x^2+1;
g(x)=x^3+6*x^2+3*x+5;
F(x)=f(x)+g(x)
G(x)=f(x)*g(x);G(x)=expand(G(x))
f(x)=factor(f(x))
g(x)=factor(g(x))
运行结果:
F(x)=
x^4+x^3+8*x^2+3*x+6
G(x)=
x^7+6*x^6+5*x^5+17*x^4+7*x^3+16*x^2+3*x+5
f(x)=
(x^2+1)^2
g(x)=
x^3+6*x^2+3*x+5
4.
(1)将(x-6)(x-3)(x-8)展开为系数多项式的形式。
symsx
y=(x-6)*(x-3)*(x-8);
y=expand(y)
y=
x^3-17*x^2+90*x-144
(2)求解多项式x3-7x2+2x+40的根。
x=roots([1-7240])
x=
5.00004.0000-2.0000
(3)求解在x=8时多项式(x-1)(x-2)(x-3)(x-4)的值。
x=8;
y=(x-1)*(x-2)*(x-3)*(x-4)
y=
840
(4)计算多项式乘法(x2+2x+2)(x2+5x+4)。
symsx
y=(x^2+2*x+2)*(x^2+5*x+4);
y=expand(y)
y=
x^4+7*x^3+16*x^2+18*x+8
(5)计算多项式除法(3x3+13x2+6x+8)/(x+4)。
symsx
y=(3*x^3+13*x^2+6*x+8)/(x+4);
y=simple(y)
y=
3*x^2+x+2
5.
(1)
,用符号微分求df/dx。
symsxa
f=[ax^21/x;exp(a*x)log10(x)sin(x)];
g=diff(f,x)
g=
[0,2*x,-1/x^2]
[a*exp(a*x),1/(x*log(10)),cos(x)]
(2)求代数方程组
关于x,y的解。
symsxabc
[x,y]=solve('a*x^2+b*y+c=0','x+y=0','x','y')
x=
(b+(b^2-4*a*c)^(1/2))/(2*a)
(b-(b^2-4*a*c)^(1/2))/(2*a)
y=
-(b+(b^2-4*a*c)^(1/2))/(2*a)
-(b-(b^2-4*a*c)^(1/2))/(2*a)
三,基本编程序
1.表1给出x0,y0的一组数据,首先建立一个excel表格,读取这个表格的数据,并且分别采用3阶和11阶多项式拟合表1数据画图。
x0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
y0
-0.4470
1.9780
3.1100
5.2500
5.0200
4.6600
4.0100
4.5800
3.4500
5.3500
9.2200
clearall
clc
A=xlsread('shuju.xlsx');
x0=A(1,2:
11);
y0=A(2,2:
11);
p1=polyfit(x0,y0,3);
p2=polyfit(x0,y0,11);
figure
(1)
plot(x0,y0,'r+','LineWidth',8);
holdon
x=0:
0.05:
1;
Y1=p1
(1)*x.^3+p1
(2)*x.^2+p1(3)*x+p1(4);
Y2=0;
fori=1:
12
Y2=Y2+p2(i)*x.^(12-i);
end
plot(x,Y1,'r','LineWidth',2);
plot(x,Y2,'k','LineWidth',2);
legend('原始数据','3阶多项式拟合','11阶多项式拟合')
2..A是一个維度m×n的矩阵.写一段程序,算出A中有多少个零元素(m文件)
functionN=zeroshu(A)
[n,m]=size(A);
N=0;
fori=1:
n
forj=1:
m
ifA(i,j)==0
N=N+1;
end
end
end
end
运行结果
>>a=[2356;5094;6802];
>>N=zeroshu(a)
N=
2
3.某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):
price<200没有折扣
200≤price<5003%折扣
500≤price<10005%折扣
1000≤price<25008%折扣
2500≤price<500010%折扣
5000≤price14%折扣
输入所售商品的价格,求其实际销售价格。
functionmoney=price(p)
ifp<=0
fprintf('输入错误,请重新输入');
elseifp<200
n=p;
elseifp<500&p>=200
n=p*(1-0.03);
elseifp<1000&p>=500
n=p*(1-0.05);
elseifp<2500&p>=1000
n=p*(1-0.08);
elseifp<5000&p>=2500
n=p*(1-0.1);
elseifp>=5000
n=p*(1-0.14);
end
end
end
end
end
end
end
money=n;
end
运行结果
money=price(3000)
money=
2700
money=price(1100)
money=
1012
4.请编写一个M-函数,用来实现级数和
functionS=jishu(x,n)
S=1;
fori=1:
n
S=S+(x^i)/(2*i-1);
end
end
运行结果
>S=jishu(0.9,100)
S=
2.7251
>>S=jishu(3,100)
S=
3.9047e+45
5.如果一个矩阵A中存在这样的一个元素A(i,j)满足下列条件:
A(i,j)是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
编写一个函数文件,对于输入的矩阵A,计算A中的所有马鞍点。
将结果写入一个文件。
functionmaandian(A)
[n,m]=size(A);
k=0;
fori=1:
n
forj=1:
m
ifA(i,j)==min(A(i,:
))&A(i,j)==max(A(:
j))
k=k+1;
ma(k)=A(i,j);
end
end
end
ifk==0
fprintf('此矩阵中没有马鞍点');
return
end
fid=fopen('maanshu.txt','wt');
forl=1:
length(ma)
fprintf(fid,'%g',ma(l));
end
fclose(fid);
end
运行结果;
>>a=rand(10);
>>maandian(a)
此矩阵中没有马鞍点
>>a=[9,7,6,8;20,26,22,25;28,36,25,30;12,4,2,6]
a=
9768
20262225
28362530
12426
>>maandian(a)