1. ホーム
  2. matlab

[解決済み] Matlabでシンプソンの1-3 (h / 3)メソッド

2022-02-09 09:50:13

質問

シンプソンの 1-3 (h / 3) 法に従って次の積分を求める C のコードは次のとおりである。コードの空欄を適切に埋めよ。 この問題をMatlabで解きたいのですが、解けませんでした。これは簡単な質問ですが、私はそれを行うことはできません。もし誰かが私を助けてくれるなら、私は非常に幸せになるでしょう。

Cコードバージョン

[Cコード版 2

このコードブロックをMatlabで試してみました。

% Ask for user input
% Lower bound (a)
a = input('What is your lower bound (a)?')
% Upper bound (b)
b = input('What is your upper bound (b)?')
% Subintervals
N = input('How many subintervals (N)?')
% Defining function
f = @(x,e) (e*x+sin(x))
% Finding h
h=(b-a)/N; 
% Finding the values of x for each interval
x=linspace(a,b,N);
% Calculating the integral
for i = 1:N-1
I(i)= (h/3)*(f(x(i))+(4*f((x(i)+x(i+1))/2))+f(x(i+1)));
end
answer1 = sum(I)
disp(I)
% adding f(b) to sum
val2=ff(length(xx));
sum=val1+val2+sum;% set sum
% set result
result=sum*h/3;

解決方法は?

MATLABはシンボル e をネペリアン数(オイラー数)と呼びます。MATLAB でオイラー数を生成するには、指数関数 exp(x) , e = exp(1) ,

したがって、まず、関数の定義を修正します。

F = @(x) exp(1).^x + sin(x)  % Always try to use Upper-Case letters for your variable/function name

次に、以下のスニペットを使って、シンプソンの1/3を使って積分を計算することができます。

a = 0; b = 3; N = 1e4;

F = @(x) exp(1).^x + sin(x);

h = ((b-a)/2)/N; 
x = linspace(a,b,N);

I = 0;
for i = 1:N-1
    I = I + h/3*(F(x(i)) + 4*F((x(i)+x(i+1))/2) + F(x(i+1)));
end

disp(I)
% To compare your result:
Itz = trapz(x, F(x))