問題1

  • 以下の数列$a_n$について、$n=15$まですべての項を計算して、配列に格納しなさい。
$$ a_1=10, \quad a_2=90, \quad a_n=0.55\times a_{n-1} + 0.45\times a_{n-2} (n>2) $$
  • 計算した数列のグラフを描きなさい。
In [3]:
% --- ここでは数列a_nを生成します。---
a = [10,90];
for i = 3:15
 a(i) = 0.55 * a(i-1) + 0.45 * a(i-2);
end

% --- ここではグラフを表示します。---
plot(a,"-o")
grid on

問題2:

関数$f(x)$は以下のように定義されている。 $$ f(x):=\sin(x+\frac{\exp(x)}{10}) $$ $f$が$[0,1]$で単調増加である。以下の積分を上界と下界を計算しなさい。 $$ \int_0^1 f(x) dx $$ ただし、上界と下界の差を0.01以下に抑えることが必要です。

In [8]:
%ここにコードを書きなさい。
% --- 関数f(x)を定義します。---
function y = f(x)
 y = sin( x + ( exp(x) ./ 10 ));
end

% --- ここでは関数f(x)のグラフを表示して、確認します。---
n = 100; %[0,1]の区間をn分割します。
dx = 1/n;
x_list = 0:dx:1;
y_list = f(x_list);
plot(x_list,y_list,"-")
grid on

% --- ここでは関数f(x)の積分の上下界を計算します。---
%グラフからf(x)は単調増加であることがわかるので、積分の上界の計算には、分割した小区間の右端の関数値を使用します。
%同様に、積分の下界の計算には分割した小区間の左端の関数値を使用します。

S_lower = 0; %下界
S_upper = 0; %上界
for i = 1:n
 y1 = y_list(i); 
 y2 = y_list(i+1);
 
 S_lower = S_lower + y1 * dx;
 S_upper = S_upper + y2 * dx;
end

% --- 計算結果を表示します。---
printf('積分の下界: %f \n', S_lower)
printf('積分の上界: %f \n', S_upper)
printf('積分の上界と下界の差: %f \n', S_upper - S_lower )
積分の下界: 0.583037 
積分の上界: 0.591596 
積分の上界と下界の差: 0.008558 

問題3:

変数xと変数yの値を入れ替えるコードを書いてください。

注意:変数xとyの値は動的に変わる場合も対応できるコードを作りなさい。特に、以下のコードは不可です。

y=5;
x=7;
In [19]:
x=5;
y=7;

% --- ここでは入れ替えを行います。---
z = y;
y = x;
x = z;

% --- 結果を表示します。---
x
y
x =  7
y =  5

問題4

配列のxの中で最大値を求めるコードを作成しなさい。MATLABのmax関数を使用しないこと。

x=[ 47   67   53   35    8   87   21   26   83   87   81   90   11   91   99 68   72   53   98   26 ]
In [9]:
x=[ 47   67   53   35    8   87   21   26   83   87   81   90   11   91   99 68   72   53   98   26 ];

% --- ここでは最大値の探索を行います。---
% 最初に暫定的な最大値x_maxとして最初の要素x(1)を与えます。
% xのi番目の要素が暫定的な最大値x_max以上のとき、暫定的なmaxの値を更新します。
%上の操作を配列のすべての要素について行ったとき、maxは配列の最大値になります。
x_max = x(1);
n = length(x);
for i = 2:n;
 if x(i) > x_max
  x_max = x(i);
 end
end

% --- 結果を表示します。---
x_max
x_max =  99
In [ ]: