matlab简单编程21个题目及问题详解Word格式.docx
《matlab简单编程21个题目及问题详解Word格式.docx》由会员分享,可在线阅读,更多相关《matlab简单编程21个题目及问题详解Word格式.docx(29页珍藏版)》请在冰点文库上搜索。
第三题的matlab源程序如下:
t=0:
0.1:
10;
%t的取值以0.1的步长从0到10
r=2;
%r=2
x=r*cos(t)+3*t;
%x的表达式
y=r*sin(t)+3;
%y的表达式
plot(x,y,'
r-'
)%用红色线绘制曲线
holdon%保持窗口figure窗口不关闭
r=3;
%r=3
b-.'
)%用蓝色点划线绘制曲线
holdon%保持窗口figure窗口不关闭
r=4;
%r=4
m-'
)%用红紫色线绘制曲线
图形如下:
4、设f(x)=x5-4x4+3x2-2x+6
(1)在x=[-2,8]之间取100个点,画出曲线,看它有几个过零点。
(提示:
用polyval函数)
(2)用roots函数求此多项式的根。
(1)matalab的源程序如下:
(利用的是在同一图中展现两条线,通过放大看交点)
x=-2:
8;
%x的取值范围
y=0;
%y=0
m'
)%用红紫色表示绘制出的y=0的图像
holdon%保持figure窗口不关闭
p=[1,-4,0,3,-2,6];
%p表示函数表达式的系数矩阵
y=polyval(p,x),plot(x,y)%y=polyval表示求多项式x处的y值,绘制图像
将图形进行放大(如下),发现在实数域上有3个零点。
(2)matlab源程序如下:
roots(p)%求函数的根
ans=
3.7999
-1.2607
1.3479
0.0564+0.9623i
0.0564-0.9623i
可见实数解有三个,复数解有两个。
5、建立一个字符串向量,然后对该向量做如下处理:
(1)取第1~5个字符组成的子字符串。
(2)将字符串倒过来重新排列。
(3)统计字符串中小写字母的个数。
整个题的源程序如下所示:
ch='
abcj245DFGK'
;
%建立一个字符串
subch=ch(1:
5)%取1~5个字符
subch=
abcj2
revch=ch(end:
-1:
1)%倒序排列
revch=
KGFD542jcba
a=find(ch>
='
a'
&
ch<
z'
);
%找到小写字母的位置
length(a)%输出小写字母的个数
4
6、设x=sint,y=sin(nt+a),
(1)若a=1,令n=1,2,3,4,在四个子图中分别画出其曲线。
(2)若n=2,取a=0,π/3,π/2,及π,在四个子图中分别画出其曲线。
(1)matlab源程序如下;
t=-pi:
pi;
%t的取值范围
a=1;
n=1;
%a=1,n=1
x=sin(t);
y=sin(n*t+a);
subplot(221),plot(x,y)%在子图第一张,画出图像
holdon%保持figure不关闭
n=2;
%a=1,n=2
subplot(222),plot(x,y)%在子图的第二张画出图像
n=3;
%a=1,n=3
subplot(223),plot(x,y)%在子图的第三张,画出图像
n=4;
%a=1,n=4
subplot(224),plot(x,y)%在子图的第四张上,绘制图像
图形如下所示:
(2)matlab源程序如下所示:
%t的取值
a=0;
%a与n的取值
subplot(221),plot(x,y)%在子图的第一张绘制图像
a=pi./3;
subplot(222),plot(x,y)%在子图的第二张绘制图像
holdon%保持figure窗口不关闭
a=pi./2;
subplot(223),plot(x,y)%在子图的第三张绘制图像
a=pi;
subplot(224),plot(x,y)%在四个字图的第四张画出图像
7、绘制
在定义域x=[-2,2],y=[-2,2]内的曲面。
Matlab源程序如下:
[x,y]=meshgrid([-2:
2]);
%此处描述x,y的范围
z=x.^2.*exp(-(x.^2+y.^2));
%z的表达式
surf(x,y,z)%绘制曲面
经过旋转之后的图形:
8、
,画出在
上的曲线
所建立的M文件如下所示:
functiony=A(x);
%文件名为A
ifx>
=-3&
x<
-1%在-3《x<
-1的条件下
y=(-x.^2-4*x-3)./2;
%y所对应上述条件下的表达式
elseifx>
=-1&
1%-1《x<
1
y=-x.^2+1;
%y所对应的上述条件下的表达式
elsex>
=1&
=3%1《x《3
y=(-x.^2+4*x-3)./2;
end%结束
在commandwindows中输入:
fplot('
A'
[-3,3])%绘制在-3到3上的曲线
所得图形如下所示:
9、
(1)设
求
symsx%定义变量x
y=x.*exp(2.*x);
s=diff(y,x,20)%对y求x的20阶导数
s=
10485760*exp(2*x)+1048576*x*exp(2*x)
(2)设
symsx%定义变量x
y=sin(x).^4+cos(x).^4;
s=diff(y,x,10)%对y求x的10阶导数
-262144*cos(x)^4+1572864*cos(x)^2*sin(x)^2-262144*sin(x)^4
(3)设
symsxy%定义自变量x,y
z=y.^4.*(sin(x).^4)+x.^4.*(cos(y).^4);
%z的表达式
s=diff(z,x)%对z求x的偏导数
s=
4*x^3*cos(y)^4+4*y^4*cos(x)*sin(x)^3
(4)
symsx%定义自变量x
i=int(1/((x.^2+1).*(x.^2+x)));
%不定积分表达式
pretty(i)%求解不定积分
/i\log(x+1)/i\
log(x)+log(x+i)|---1/4|-----------+log(x-i)|--1/4|
\4/2\4/
(5)
symsx%定义自变量x
i=int(sqrt((9-x.^2).^3)./(x.^6));
pretty(i)%求解不定积分
/9\231/2
|---1|(-(x-9))
|2|
\x/
----------------------------
3
45x
(6)
i=int(1./(x+x.^3),2,1)%定积分表达式
i=%定积分的解
log(10^(1/2)/4)
(7)求级数的和:
symsn%定义自变量n
f=(n+2)./(2.^n);
%级数的表达式
symsum(f,n,n-1,inf)%对级数求和
2*2^(1-n)*(n+2)
(8)利用函数int计算二重不定积分
i=int(int((x+y).*exp(-x.*y)));
%二重不定积分表达式
pretty(i)%求解二重不定积分
2
y+xy+2
------------
yexp(xy)
10、编制m文件,输入n(正整数),显示所有小于n的质数。
编制的m文件如下所示:
functionxin10;
%定义文件名为xin10
clc,clear%清屏,清内存
n=input('
输入一个正整数:
'
)%输入数据
fori=1:
1:
n%i的变化范围
ifisprime(i)%判断是否为质数
disp(i)%输出质数
end%结束if
end%结束for
end%结束function
11、从键盘输入若干个数,当输入0时结束输入,求这些数的平均值以及平方和。
假设输入数据结束时输入0作为结束,不考虑输入的数据中出现会结束输入的现象,则程序如下:
functionlin11;
%定义文件名为lin11
m=input('
以1*n矩阵的形式输入数据并以0结尾:
k=size(m)%m的大小
k
(2)%i的变化范围
ifm(i)==0%m=0时的每一个k值
k
(2)=i-1;
%另k
(2)=i-1
end%结束if循环
end%结束for循环
M=m(1:
k
(2))%将若干个数输出
B=sum(M)./k
(2)%对若干个数求和再求平均值
C=sum(M.^2)%输出m的值,进行求值
end%结束function
12、利用rand产生10个随机数,利用for循环对其进行排序(从大到小)。
functionlin12;
%定义文件名为lin12
a=rand(10,1)%产生10个随机数,这个地方可加可不加‘;
’
length(a)%i的取值范围
forj=1:
length(a)-1%j的取值范围
ifa(j)<
a(j+1)%冒泡法进行排序,判断两个数的大小
t=a(j);
%将小的数赋值给t
a(j)=a(j+1);
%将大数赋值给a(j)
a(j+1)=t;
%将t赋值给a(j+1)
end%结束for循环
a%输出数据a此处一定要写上a,不然没有数据输出
end%结束function
13、将一个整型数组的元素按逆序重新存放(如原序为:
8,6,5,4改为:
4,5,6,8)。
functionlin13;
%定义文件名为lin13
a=input('
请输入数据:
)%输入数据
n=length(a);
%判断数据的长度
n/2%i的变化范围
b=a(i);
%将a(i)赋值给b
a(i)=a(n+1-i);
%将对应位置的值复制给a(i)
a(n+1-i)=b;
%将b值赋值给a(n+1-i)
fprintf('
%d'
a)%这个地方%d之前有一个空格,保证输出数据时分开的
14、输入一个整数,写一程序输出它是几位数。
functionlin14;
%定义文件名为lin14
'
s'
)%此处由于输入的整数是以整体的形式输入,所以‘s’
%计算a的长度
位数%d'
n);
%输出a的位数
15、从键盘上输入a与n的值,计算sum=a+aa+aaa+aaaa+…(共n项)的和。
例a=2,n=4,则sum=2+22+222+2222.
functionlin15;
%定义文件名为lin15
请输入a='
)%输入a的值
请输入n='
)%输入b的值
i=1;
sum=0;
he=0;
%定义i,sum,he的初始值
whilei:
he=he+a*10^(i-1);
%通过i值得变化得到不同的数值
sum=sum+he;
%令sum为总和
i=i+1;
%i的变化
end%结束while
sumis%ld'
sum);
%输出总和
end%结束function
16、设计一个用于计算个人所有税的程序。
假设个人所得税的缴纳标准为:
月收入少于等于800元者不纳税;
超出800元的部分,纳税5%;
超出2000元的部分,纳税10%;
超出5000元的部分,纳税20%;
超出10000元的部分,纳税30%;
超出100000元的部分,纳税40%。
functionxin16;
%定义文件名为xin16
请输入月收入:
ifa>
100000%工资数目大于100000时
j=(a-100000)*0.4+90000*0.3+5000*0.2+3000*0.1+1200*0.5;
%交税计算公式
elseifa>
10000%工资数目大于10000且小于100000的条件下时
j=(a-10000)*0.3+5000*0.2+3000*0.1+1200*0.5;
5000%工资数目大于5000且小于10000时
j=(a-5000)*0.2+3000*0.1+1200*0.5;
2000%工资数目大于2000且小于5000时
j=(a-2000)*0.1+1200*0.05;
800%工资数目大于800且小于2000时
j=(a-800)*0.05;
else%工资低于800时
j=0%不交税
end%结束if循环
j)%输出交税数目
17、求爱因斯坦数学题。
有一条长阶,若每步跨2阶,则最后剩余1阶;
若每步跨3阶,则最后剩2阶;
若每步跨5阶,则最后剩4阶;
若每步跨6阶,则最后剩5阶;
若每步跨7步,最后正好一阶不剩。
functionxin17;
%建立文件xin17
fora=7:
1000%a的取值变化范围
ifrem(a,2)==1&
rem(a,3)==2&
rem(a,5)==4&
rem(a,6)==5&
rem(a,7)==0
%判断条件就是题目的要求
break%跳出if,再进行循环
end%结束for循环
台阶is%d'
a);
%输出台阶数目
通过计算结果显示为119阶台阶。
18、将一个正整数n输出成“千分位”形式,即从个位数起,每三位之间加一个逗号,例如,将7654321输出成7,654,321.
functionxin18;
%建立文件名为xin18
请输入数据'
b=[];
%令b为空集
e=[];
%令e为空集
d='
%令d为‘,’
z=fix(n/3);
%z为对三求商然后对零取整,z是添加几个‘,’的标志
ifrem(n,3)~=0;
%如果n对三取余不等于0
c=rem(n,3);
%c为对三取余数之后的余数,为1或2
fori=1:
c%i的取值范围
b=[b,a(i)];
%将a的最高位赋值给b,如果c=1,b=a最高位上的一位数,如果c=2,b=a最高位上的两位数
end
ifc==1%讨论c=1的情况
z%i的变化范围
e=[e,d];
%将逗号放到e中去
fori=(3*i-1):
(3*i+1)%i的变化范围
e=[e,a(i)];
%根据i随z的变化,将2,3,4。
5,6,7。
……等位置上的数据放到e中的逗号后面
end%结束for循环。
此处的for循环,就是输入一个逗号,输入三个数据,以此类推
elsec==2%讨论c=2的情况
%将逗号放到e中去
fori=(3*i):
(3*i+2)%i的取值范围
%将3,4,5。
6,7,8。
…等位置上的数据放到逗号后面
end%结束for循环
else%此处讨论恰好整除的情况
3%i的取值范围
b=[b,a(i)];
%整除的情况下把前三位直接赋值到b中去
(z-1)%i的取值范围。
由于恰好整除,所以前三位不用加逗号,所以逗号数为z-1
%将逗号放到e中
fori=3*i+1:
3*i+3%i的取值范围
%根据i随z的变化,将4,5,6。
7,8,9。
end%结束if循环
f=[b,e]%将b得到的前几位与e得到的逗号数据放入f中去
19、求出矩阵a中每行元素的平均值和平均最大的行号。
functionlin19;
%定义文件名为lin19
输入矩阵:
%输入矩阵
%定义b为空集
[i,j]=size(a);
%对a求行列数,放到[i,j]中
i%i的取值范围
s=0;
%令s=0
j%j的取值范围
s=s+a(i,j);
%对i一定时对行累加,改变i值,不同的行重新进行求和
end%结束for循环
fprintf('
平均值(i=%d)=%d\n'
i,s/j)%输出每行平均值
b=[b,s/j];
%平均值放入b中去
w=0;
%令w=0
forp=1:
i%p的取值范围
ifb(p)>
w%每一行的平均值与w比较
w=b(p);
%如果平均值大于w,将平均值赋值给w