Chapter 4. MATLAB语法基础

第四章课后习题解答

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;

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值