Академический Документы
Профессиональный Документы
Культура Документы
Komputasi Numerik - 01
Soal 5.8
Halaman 158
The saturation concentration of dissolved oxygen in freshwater can be calculated with the
equation
1.575701 𝑥 105
ln 𝑜𝑠𝑓 = −139,34411 +
𝑇𝑎
7
6.642308 𝑥 10 1.243800 𝑥 1010
ln 𝑜𝑠𝑓 = − +
𝑇𝑎2 𝑇𝑎3
8.621949 𝑥 1011
ln 𝑜𝑠𝑓 = −
𝑇𝑎4
where osf = the saturation concentration of dissolved oxygen in freshwater at 1 atm (mg L-1);
and Ta = absolute temperature (K). Remember that Ta = T + 273.15, where T = temperature
(oC). According to this equation, saturation decreases with increasing temperature. For typical
natural waters in temperate climates, the equation can be used to determine that oxygen
concentration ranges from 14,621 mg/L at 0oC to 6.949 mg/L at 35oC. Given a value of
oxygen concentration, this formula and the bisection method can be used to solve for
temperature in oC.
a) If the initial guesses are set as 0 and 35oC, how many bisection iterations would be
required to determine temperature to an absolute error of 0.05oC?
b) Based on a), develop and test a bisection M-file function to determine T as a function
of a given oxygen concentration. Test your function for osf = 8, 10, and 14 mg/L.
Check your results.
Jawaban :
a) Untuk menghitung berapa banyak iterasi yang diperlukan untuk menentukan suhu
dalam oC dengan error absolut sebesar 0.05oC dapat digunakan rumus berikut.
∆𝑥 𝑜 35
𝑛 = 1 + 𝑙𝑜𝑔2 ( ) = 1 + 𝑙𝑜𝑔2 ( ) = 10.45121
𝐸𝑎,𝑑 0.05
dengan ∆xo adalah selisih antara initial guess 1 dan initial guess 2 dan Ea,d adalah
absolute error. Dengan demikian, banyaknya iterasi yang diperlukan untuk
menentukan suhu dalam oC dapat dibulatkan menjadi 11 kali iterasi.
b) Bisection M-file untuk menentukan suhu dalam oC dengan iterasi sebanyak 11 kali
dengan konsentrasi oksigen sebesar yang diberikan pada soal di atas adalah sebagai
berikut.
Rizki Yuni Pratiwi / 1506674545
Komputasi Numerik - 01
Kode bisection tersebut akan menampilkan hasil di command windows sebagai berikut untuk
ketiga nilai konsentrasi oksigen.
Rizki Yuni Pratiwi / 1506674545
Komputasi Numerik - 01
1. Bisection
Kode dalam editor m-file:
function [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,varargin)
% bisect: root location zeroes
% [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,p1,p2,...):
% uses bisection method to find the root of func
% input:
% func = name of function
% xl, xu = lower and upper guesses
% es = desired relative error (default = 0.0001%)
% maxit = maximum allowable iterations (default = 50)
% p1,p2,... = additional parameters used by func
% output:
% root = real root
% fx = function value at root
% ea = approximate relative error (%)
% iter = number of iterations
if nargin<3,error('at least 3 input arguments required'),end
test = func(xl,varargin{:})*func(xu,varargin{:});
if test>0,error('no sign change'),end
if nargin<4|isempty(es), es=0.0001;end
if nargin<5|isempty(maxit), maxit=50;end
iter = 0; xr = xl; ea = 100;
while (1)
xrold = xr;
xr = (xl + xu)/2;
iter = iter + 1;
if xr ~= 0,ea = abs((xr - xrold)/xr) * 100;end
test = func(xl,varargin{:})*func(xr,varargin{:});
if test < 0
xu = xr;
elseif test > 0
xl = xr;
else
ea = 0;
end
if ea <= es | iter >= maxit,break,end
end
root = xr; fx = func(xr, varargin{:});
>> bisect
Error using bisect (line 16)
at least 3 input arguments required
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.
fx =
4.6089e-07
ea =
5.3450e-05
iter =
21
2. Newton Raphson
Kode dalam editor m-file:
% NEWTON RAPHSON
function [root,ea,iter]=newtraph(func,dfunc,xr,es,maxit,varargin)
% newtraph: Newton-Raphson root location zeroes
% [root,ea,iter]=newtraph(func,dfunc,xr,es,maxit,p1,p2,...):
% uses Newton-Raphson method to find the root of func
% input:
% func = name of function
% dfunc = name of derivative of function
% xr = initial guess
% es = desired relative error (default = 0.0001%)
% maxit = maximum allowable iterations (default = 50)
% p1,p2,... = additional parameters used by function
% output:
% root = real root
% ea = approximate relative error (%)
% iter = number of iterations
if nargin<3,error('at least 3 input arguments required'),end
if nargin<4|isempty(es),es=0.0001;end
if nargin<5|isempty(maxit),maxit=50;end
iter = 0;
while (1)
xrold = xr;
xr = xr - func(xr)/dfunc(xr);
iter = iter + 1;
if xr ~= 0, ea = abs((xr - xrold)/xr) * 100; end
if ea <= es | iter >= maxit, break, end
end
root = xr;
>> newtraph
Error using newtraph (line 17)
at least 3 input arguments required
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.
3. Tridiagonal System
Rizki Yuni Pratiwi / 1506674545
Komputasi Numerik - 01
function x = Tridiag(e,f,g,r)
% Tridiag: Tridiagonal equation solver banded system
% x = Tridiag(e,f,g,r): Tridiagonal system solver.
% input:
% e = subdiagonal vector
% f = diagonal vector
% g = superdiagonal vector
% r = right hand side vector
% output:
% x = solution vector
n=length(f);
% forward elimination
for k = 2:n
factor = e(k)/f(k-1);
f(k) = f(k) - factor*g(k-1);
r(k) = r(k) - factor*r(k-1);
end
% back substitution
x(n) = r(n)/f(n);
for k = n-1:-1:1
x(k) = (r(k)-g(k)*x(k+1))/f(k);
end
>> Tridiag
Error using Tridiag (line 11)
Not enough input arguments.
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.
4. Trapezoid
Kode dalam editor m-file:
function I = trap(func,a,b,n,varargin)
% trap: composite trapezoidal rule quadrature
% I = trap(func,a,b,n,pl,p2,...):
% composite trapezoidal rule
% input:
% func = name of function to be integrated
% a, b = integration limits
% n = number of segments (default = 100)
% pl,p2,... = additional parameters used by func
% output:
% I = integral estimate
Rizki Yuni Pratiwi / 1506674545
Komputasi Numerik - 01
>> trap
Error using trap (line 12)
at least 3 input arguments required
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.
>> trap(v,0,3,5)
ans =
41.869929590727352
5. Romberg
Kode dalam editor m-file:
function [q,ea,iter]=romberg(func,a,b,es,maxit,varargin)
% romberg: Romberg integration quadrature
% q = romberg(func,a,b,es,maxit,p1,p2,...):
% Romberg integration.
% input:
% func = name of function to be integrated
% a, b = integration limits
% es = desired relative error (default = 0.000001%)
% maxit = maximum allowable iterations (default = 30)
% pl,p2,... = additional parameters used by func
% output:
% q = integral estimate
% ea = approximate relative error (%)
% iter = number of iterations
if nargin<3,error('at least 3 input arguments required'),end
if nargin<4||isempty(es), es=0.000001;end
if nargin<5||isempty(maxit), maxit=50;end
n = 1;
I(1,1) = trap(func,a,b,n,varargin{:});
iter = 0;
while iter<maxit
iter = iter+1;
n = 2^iter;
I(iter+1,1) = trap(func,a,b,n,varargin{:});
Rizki Yuni Pratiwi / 1506674545
Komputasi Numerik - 01
for k = 2:iter+1
j = 2+iter-k;
I(j,k) = (4^(k-1)*I(j+1,k-1)-I(j,k-1))/(4^(k-1)-1);
end
ea = abs((I(1,iter+1)-I(2,iter))/I(1,iter+1))*100;
if ea<=es, break; end
end
q = I(1,iter+1);
>> romberg
Error using romberg (line 15)
at least 3 input arguments required
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.
6. Eulode
Kode dalam editor m-file:
>> eulode
Error using eulode (line 15)
at least 4 input arguments required
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.
>> rk4sys
Error using rk4sys (line 16)
at least 4 input arguments required
Rizki Yuni Pratiwi / 1506674545
Komputasi Numerik - 01
Agar m-file tersebut dapat berjalan, diperlukan kode dalam m-file lain yang berisi fungsi
dydtsys sebagai berikut.
function dy = dydtsys(t, y)
dy = [y(2);9.81-0.25/68.1*y(2)^2];
>> dydtsys
Error using dydtsys (line 2)
Not enough input arguments.
Agar m-file tersebut dapat berjalan, maka perlu diberikan kode tambahan di command
windows sebagai berikut beserta hasilnya.