matlab习题文档格式.docx
《matlab习题文档格式.docx》由会员分享,可在线阅读,更多相关《matlab习题文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
![matlab习题文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/807f39ff-0917-44ec-93f6-08bee00f6dd1/807f39ff-0917-44ec-93f6-08bee00f6dd11.gif)
function[x,y]=line_solution(A,b)
[m,n]=size(A);
y=[];
ifnorm(b)>
0
ifrank(A)==rank([A,b])
ifrank(A)==n
disp('
原方程组有唯一解x'
);
x=A\b;
else
原方程组有无穷个解,特解为x,齐次方程组的基础解系为y'
y=null(A,'
r'
end
else
方程组无解'
x=[];
else
原方程组有零解x'
x=zeros(n,1);
ifrank(A)<
n
方程组有无穷个解,基础解系为y'
end
程序:
A=[21-11;
42-21;
21-1-1];
b=[121]'
[x,y]=line_solution(A,b)
A=[2731;
3522;
9417];
b=[642]'
rank(A)
ans=
2
rank([A,b])
x=pinv(A)*b
x=
-0.0571
0.7429
0.3429
-0.1143
3、求下列方程的根。
在
附近的根。
f=inline('
x-sin(x)./x'
x=fzero(f,0.5)
0.8767
(sin(x).^2).*exp(-0.1.*x)-0.5.*abs(x)'
x=fzero(f,1.5)
x=1.6738
(3)在给定的初值
下,求方程组的数值解
functionF=myfun(X)
x=X
(1);
y=X
(2);
z=X(3);
F
(1)=sin(x)+y^2+log(z)-7;
F
(2)=3*x+2^y-z^3+1;
F(3)=x+y+z-5;
X=fsolve('
myfun'
[1,1,1],optimset('
Display'
'
off'
))
X=
0.59912.39592.0050
4、求非线性方程组在(0.5,0.5)附近的数值解。
functionf=fxy(u)
x=u
(1)
y=u
(2)
f
(1)=x-0.6*sin(x)-0.3*cos(y)
f
(2)=y-0.6*cos(x)+0.3*sin(y)
x=fsolve('
fxy'
[0.5,0.5],optimset('
0.63540.3734
5、求函数在指定区间上的极值。
在(0,1)内的最小值。
functionf=f(x)
f=(x^3+cos(x)+x*log(x))/exp(x);
[x,fval]=fminbnd(f,0,1)
在[0,0]附近的最小值点和最小值。
functionfxy(u)
x=u
(1);
y=u
(2);
f=2.*x.^3+4.*x.*(y.^3)-10.*x.*y+y.^2;
[U,fmin]=fminsearch('
[0,0])
6、求常微分方程数值解
functiony=funt(x,y)
y=2*x/y+2*x;
x0=0;
xf=20;
y1=0;
[x,y]=ode45('
funt'
[x0,xf],y1);
functionydot=sys1(x,y)
ydot=[(-4*x*y
(1)-2*y
(2))/(x^2);
y
(1)];
[t,x]=ode45('
sys'
[x0,xf],[-3,2]);
7、已知线性方程组
,其中
,
运用稀疏存储矩阵的方式求解。
A=[-120;
-12-1;
02-1];
d=[-1;
0;
1];
B=spdiags(A,d,5,5);
b=[10000]'
x=(inv(B)*b)'
0.83330.66670.50000.33330.1667
1、从键盘输入一个4位整数,按照如下规则加密后输出。
加密规则:
每位数字都加上7,然后用和除以10的余数取代该数字;
再把第一位与第三位交换,第二位与第四位交换。
a=input('
请输入一个4位数:
'
while(a<
1000|a>
9999)
a=input('
输入错误,请重新输入一个4位数:
b=fix(a/1000);
c=rem(fix(a/100),10);
d=rem(fix(a/10),10);
e=rem(a,10);
b=b+7;
c=c+7;
d=d+7;
e=e+7;
b=rem(b,10);
c=rem(c,10);
d=rem(c,10);
e=rem(e,10);
g=b;
b=d;
d=g;
g=c;
c=e;
e=g;
a=1000*b+100*c+10*d+e;
disp(['
加密后:
num2str(a)])
1234
9189
2、分别用if和switch语句实现以下计算,其中a、b、c的值从键盘输入。
If语句法:
请输入a:
'
b=input('
请输入b:
c=input('
请输入c:
forx=0.5:
1:
5.5
ifx>
=0.5&
x<
1.5
y=a.*(x.^2)+b.*x+c
elseifx>
=1.5&
3.5
y=a*(sin(b)^c)+x
=3.5&
y=log(abs(b+c./x))
switch语句法:
switchfloor(x/0.5)
case{1,2}
y=a.*(x.^2)+b.*x+c;
case{3,4,5,6}
y=a*(sin(b)^c)+x;
case{7,8,9,10}
y=log(abs(b+c./x));
disp(y)
3、产生20个两位随机整数,输出其中小于平均值的偶数。
x=fix(rand(1,20)*89)+10;
x1=mean(x);
n=find(rem(x,2)==0&
x1);
disp(['
小于平均数的偶数是:
num2str(x(n))]);
306450644646
4、输入20个数,求其中最大数和最小数。
要求分别用循环结构和调用Matlab的max函数、min函数来实现。
(1)循环结构法:
A=input('
请输入20个数的一个行向量:
a=A
(1);
b=A
(1);
form=A
ifa>
=m
a=m;
elseifb<
b=m;
最小数是:
最大数是:
num2str(b)])
[12232312157834452672323234782567]
1
78
(2)调用法:
maxval=max(A)
minval=min(A)
maxval=
78
minval=
1
5、已知:
分别用循环结构和调用Matlab的sum函数求
的值。
s=0;
fora=0:
63
c=2^a;
s=s+c;
2的0次方到63次方的和是:
num2str(s)])
184********709552000
k=0:
n=2.^k
s=sum(n)
6、当n分别取100、1000、10000时,求下列各式的值。
(1)
(2)
(3)
要求分别用循环结构和向量运算(使用sum或prod函数)来实现。
sum1=0;
forn=1:
100
x=(-1)^(n+1)*(1/n);
sum1=sum1+x;
当n取100时:
sum='
num2str(sum1)])
sum2=0;
1000
sum2=sum2+x;
当n取1000时:
num2str(sum2)])
sum3=0;
10000
x=(-1)^(n+1)*(1/n);
sum3=sum3+x;
当n取10000时:
sum='
num2str(sum3)])
sum=0.68817
sum=0.69265
sum=0.6931
n1=0;
2:
x=(-1)^n1*(1/n);
n1=n1+1;
n2=0;
x=(-1)^n2*(1/n);
n2=n2+1;
sum3=0;
n3=0;
x=(-1)^n3*(1/n);
n3=n3+1;
sum=0.7804
sum=0.7849
sum=0.78535
x=1/(4^n);
sum3=sum3+x;
sum=0.33333
sum=0.33333
7、编写一个函数文件,求小于任意自然数n的Fibnacci数列各项。
Fibnacci数列定义如下:
functionf=fibnacci(n)
ifn==1|n==2
f=1;
else
f=fibnacci(n-1)+fibnacci(n-2);
命令文件:
shulie=[];
fork=1:
shulie=[shuliefibnacci(k)];
shulie
8、编写一个函数文件,用于求两个矩阵的乘积和点乘,然后在命令文件中调用该函数。
function[f1,f2]=juzhenji(x1,x2)
f1=x1*x2;
f2=x1.*x2;
clearall
请输入一个矩阵:
请再输入一个矩阵:
(注意:
两矩阵要可以相乘)'
[f1,f2]=juzhenji(a,b);
disp(f1)
disp(f2)
9、先用函数的递归调用定义一个函数文件求
,然后调用该函数求
。
functionsum=qiuhe(n,m)
ifn<
=1
sum=0;
sum=n^m+qiuhe(n-1,m);
y=qiuhe(100,1)+qiuhe(50,2)+qiuhe(10,-1);
10、写出下列程序的输出结果。
(1)s=0;
a=[12,13,14;
15,16,17;
18,19,20;
21,22,23];
fork=a
forj=1:
4
ifrem(k(j),2)~=0
s=s+k(j);
s
s=108
(2)命令文件exe.m:
globalx
x=1:
5;
y=2:
6;
exsub(y);
x
y
函数文件sub.m:
functionfun=sub(z)
z=3*x;
x=x+z;
41220
y=
246