您的位置:首页 > 编程语言 > MATLAB

Chapter 4. MATLAB语法基础

2013-12-15 23:37 316 查看

第四章课后习题解答

转载请注明链接:http://blog.csdn.net/i_love_home/article/details/17340341

1. 从键盘输入一个4位证书,按如下规则加密后,输出。加密规则:每位数字都加上7,然后用和除以10的余数取代该数字;再把第一位和第三位交换,第二位和第四位交换。

x = 0;
x = input('Enter a number of four:');
a = zeros(1, 4);
a(1) = floor(x / 1000)
a(2) = floor(rem(x/100, 10));
a(3) = floor(rem(x, 100) / 10);
a(4) = rem(x, 10);
a = rem(a + 7*ones(size(a)), 10);
A = [a(3), a(4), a(1), a(2)];
disp(['A = ' num2str(A)]);

2. 分别用if语句和switch语句实现以下计算,其中a,b,c的值从键盘输入。



x = 0.5;a = 0;b = 0;c = 0;
x = input('Enter an number[0.5, 5.5):');
a = input('a = ');
b = input('b = ');
c = input('c = ');
y = 0;
% if
if x>=0.5 & x<1.5
y = a*x^2 + b*x + c;
elseif x>=1.5 & x<3.5
y = a*(sin(b)^c) + x;
elseif x>=3.5 & x<5.5
y = log(abs(b+c/x));
end
disp(['y = ' num2str(y)]);
% switch
switch floor(x*2)
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));
end
disp(['y = ' num2str(y)]);

3. 产生20个两位随机整数,输出其中小于平均数值的偶数。

A = 10 + floor(90*rand(1, 20));
ave = sum(A) / size(A, 2);
p = find(A<ave & rem(A, 2)==0);
disp(['solution: ' num2str(A(p))]);

4. 输入20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max函数,min函数来实现。

x = rand(1, 20);
x = input('Enter 20 numbers of matrix:');
% min(), max()
disp(['min = ' num2str(min(x))]);
disp(['max = ' num2str(max(x))]);
% for
minc = inf;
maxc = -inf;
for i = 1 : size(x, 2)
if x(i) < minc
minc = x(i);
end
if x(i) > maxc
maxc = x(i);
end
end
disp(['min = ' num2str(minc)]);
disp(['max = ' num2str(maxc)]);

5. 已知:



n = 0 : 63;
s = 0;
% sum
s = sum(2.^n);
disp(['1 + 2 + 2^2 + … + 2^63 = ' num2str(s)]);
% for
s = 0; temp = 1;
for i = 1 : size(n, 2)
s = s + temp;
temp = temp * 2;
end
disp(['1 + 2 + 2^2 + … + 2^63 = ' num2str(s)]);

6. 当n分别取100,1000,10000时,求下列各式的值。



n = 1000;
n = input('n = ');
% sum + pro
% (1)
i = 1 : n;
s = sum((-1).^(i+1).*(1./i));
disp(['s = ' num2str(s)]);
% (2)
i = 2*(1:n)-1;
s = sum((-1).^(0:n-1).*(1./i));
disp(['s = ' num2str(s)]);
% (3)
s = sum(1./(4.^(1:n)));
disp(['s = ' num2str(s)]);
% (4)
i = 1 : n;
s = prod(((2*i).*(2*i))./((2*i-1).*(2*i+1)));
disp(['s = ' num2str(s)]);
% for
% (1)
s = 0;
for i = 1 : n
s = s + (-1)^(i-1)*(1/i);
end
disp(['s = ' num2str(s)]);
% (2)
s = 0;
for i = 1 : n
s = s + (-1)^(i-1)*(1/(2*i-1));
end
disp(['s = ' num2str(s)]);
% (3)
s = 0;
for i = 1 : n;
s = s + 1/(4^i);
end
disp(['s = ' num2str(s)]);
% (4)
s = 1;
for i = 1 : n
s = s * (4*i*i)/((2*i-1)*(2*i+1));
end
disp(['s = ' num2str(s)]);

7. 编写一个函数文件,求小于任意自然数n的斐波那契(Fibnacci)数列各项。斐波那契数列定义如下:



n = 1;
n = input('n = ');
disp(['f(n) = ' num2str(Fibnacci_2_7( n ))]);
function F = Fibnacci_2_7( n )
if n == 1
F = 1;
elseif n == 2
F = 1;
else
F = Fibnacci_2_7( n-1 ) + Fibnacci_2_7( n-2 );
end

8. 编写一个函数文件,用于求两个矩阵的乘积和点乘,然后在命令文件中调用该函数。

A = eye(4);
B = magic(4);
[C, P] = matmulCP_2_8(A, B);
// matmulCP_2_8.m
function [C, P] = matmulCP_2_8( A, B );
C = A * B;
P = A .* B;

9. 先用函数的递归调用定义一个函数文件



disp(['s = ' num2str(sum_2_9(100, 1) + sum_2_9(50, 2) + sum_2_9(10, -1))]);
// sum_2_9.m
function fun = sum_2_9( n, m )
i = 1 : n;
fun = sum( i.^m );

10. 写出下列程序的输出结果。



// First:
s = 108
// Second
x = 3   9  15
y = 2  4  6
// code
s = 0;
a = [12:14;
15:17;
18:20;
21:23];
for k = a
for j = 1 : 4
if rem(k(j), 2) ~= 0
s = s + k(j);
end
end
end
disp(['s = ' num2str(s)]);
global gx;
gx = 1 : 2 : 5;
y = 2 : 2 : 6;
sub_2_10(y);
disp(['x = ' num2str(gx)]);
disp(['y = ' num2str(y)]);
// sub_2_9.m
function fun = sub_2_10( z )
global gx;
z = 2 * gx;
gx = gx + z;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息