Sunday, June 27, 2021

Engineering Economy with Octave in real world

โดย ผศ.สราวุฎฐ์ วรสุมันต์ , ประยุทธ พันธุลาภ

Background


1) โรงงานแปรรูปไก่ขนาดใหญ่ที่ลดพนักงาน [video click]

2) โรงงานแปรรูปไก่ขนาดใหญ่ที่ใช้พนักงานค่อนข้างมาก [video click]

3) แปรรูปไก่ที่ใช้อุปกรณ์ไม่ซับซ้อน กำลังผลิตไม่มาก [video click]

"การลดจำนวนแรงงานต่างชาติ เป็นปัญหาใหญ่ที่เกิดใน ยุโรปมานานแล้ว จนในที่สุดต้องออกแบบเครื่องจักรอัตโนมัติมาทำงานแทน ในปัจจุบันโรคระบาดเป็นปัจจัยสำคัญที่ต้องนำมาใช้วิเคราะห์ในการลงทุนด้วย ซึ่งมีหลายประเด็นใน ศตวรรษที่ 21 วิชา Engineering Economy ในสมัยก่อนไม่ได้คำนึงถึงในโลกความจริง ทำให้นำวิชานี้ไปใช้ในโลกความจริงไม่ได้ผล"


Octave Online

website rextester

Lessons

Lesson 0 : About students
Lesson 1 : Equivalence & Interest
Lesson 2 : Cash Flows & Compound Interest
Lesson 3 : Multiple Cash Flows
Lesson 4 : Payback Period
Lesson 5 : Present - Worth Comparisons
Lesson 6 : Future - Worth & Equivalent Annual Worth Comparisons
Lesson 7 : Rate of Return Analysis
Lesson 8 : Rate Of Return Comparisons
Lesson 9 : Benefit / Cost Ratios
Lesson 10 : Comparison & Review Bonds
Lesson 11 : Basic Depreciation
Lesson 12 : MACRS Depreciation & Capital Gains
Lesson 13 : After Tax Cash Flow
Lesson 14 : Replacement Analysis
Lesson 15 : Inflation


Formulas

   A is a uniform series of equal payments at each compounding period;
   P is a present single sum of money at the time zero;
   F is a future sum of money at the end of period n. And i is the compound interest rate.
   i is the compound interest rate
   n is the period.



Introduction

Compound and Discount Concept

Compounding

In order to compare different alternatives in an economic evaluation, they should have the same base (equivalent base). 

Compound interest is a method that can help applying the time value of money. 

For example, assume you have 100 dollars now and you put it in a bank for interest rate of 3% per year. 

After one year, the bank will pay you 100+100*0.03 =$103. Then, you will put the 103 dollars in the bank again for another year. 

One year later, you will have 103+103*0.03 =$106.09. 

   P: Present single sum of money.
   F: A future single sum of money at some designated future date.
   n: The number of periods in the project evaluation life (can be year, quarter or month).
   i: The discount rate (interest rate).

F = P(1+i)n


Example 1-1:

Assume you put 20,000 dollars (principal) in a bank for the interest rate of 4%. 

How much money will the bank give you after 10 years?

F=P(1+i)n =20,000*(1+0.04)10=20,000*1.48024=29604.8


Discounting

In economic evaluations, “discounted” is equivalent to “present value” or “present worth” of money.
P = F(1+i)-n

   P: Present single sum of money.
   F: A future single sum of money at some designated future date.
   n: The number of periods in the project evaluation life (can be year, quarter or month).
   i: The discount rate (interest rate).

  
Example 1-2:

Assuming the discount rate of 10 %, present value of 100 dollars
which will be received in 5 years from now can be calculated as:
F = 100 dollars n = 5 i = 0.1 P = F[(1 + i)-n] = 100[(1 + 0.1)-5] = 62.1 You can see how time and discount rate can affect the value of money in the future. 62.1 dollars is the equivalent present sum that has the same value of 100 dollars in five years under the discount rate of 10%

Formulas in Octave

Octave Code

%============== copy Formulas =============
%============== start of library ==========
%%====================================
%% Engineering Economy Formula
%%====================================


function v = npv (r, p, i)

  if (nargin < 2 || nargin > 3)
    print_usage ();
  endif

  if (! (isvector (p)))
    error ("npv: p has to be a vector");
  else
    n = length (p);
    p = reshape (p, 1, n);
  endif

  if (any (any (r <= -1)))
    error ("npv: all interest rates must be > -1");
  endif
  if (isscalar (r))
    d = 1 ./ (1 + r) .^ (0 : n);
  elseif (isvector (r) && (length (r) == n))
    d = [1, (1 ./ cumprod (reshape (1 + r, 1, n)))];
  else
    error ("npv: r must be a scalar or a vector of the same length as p");
  endif

  if (nargin == 3)
    if (! isscalar (i))
      error ("npv: I_0 must be a scalar");
    endif
  else
    i = 0;
  endif

  p = [i, p];
  v = sum (d .* p);

endfunction


function r = irr (p, i = 0)
  ## Check input
  if (nargin != 1 && nargin != 2)
    print_usage ();
  elseif (! (isvector (p)))
    error ("irr: p must be a vector");
  elseif (! isscalar (i))
    error ("irr: i must be a scalar");
  endif

  ## Solve system
  f = @(x) npv (x, p) - i;
  r = fsolve (f, 0);

endfunction


function p = pmt (r, n, a, l, m)

  if (nargin < 3 || nargin > 5)
    print_usage ();
  endif

  if (! (isscalar (r) && r > -1))
    error ("pmt: rate must be a scalar > -1");
  elseif (! (isscalar (n) && n > 0))
    error ("pmt: n must be a positive scalar");
  elseif (! (isscalar (a) && a > 0))
    error ("pmt: a must be a positive scalar");
  endif

  if (nargin == 5)
    if (! ischar (m))
      error ("pmt: `method' must be a string");
    endif
  elseif (nargin == 4)
    if (ischar (l))
      m = l;
      l = 0;
    else
      m = "e";
    endif
  else
    l = 0;
    m = "e";
  endif

  p = r * (a - l * (1 + r)^(-n)) / (1 - (1 + r)^(-n));

  if (strcmp (m, "b"))
    p = p / (1 + r);
  endif

endfunction



function v = pv (r, n, p, l, m)

  if (nargin < 3 || nargin > 5)
    print_usage ();
  endif

  if (! (isscalar (r) && r > -1))
    error ("pv: r must be a scalar > -1");
  elseif (! (isscalar (n) && n > 0))
    error ("pv: n must be a positive scalar");
  elseif (! isscalar (p))
    error ("pv: p must be a scalar");
  endif

  if (r != 0)
    v = p * (1 - (1 + r)^(-n)) / r;
  else
    v = p * n;
  endif

  if (nargin > 3)
    if (nargin == 5)
      if (! ischar (m))
        error ("pv: `method' must be a string");
      endif
    elseif (ischar (l))
      m = l;
      l = 0;
    else
      m = "e";
    endif
    if (strcmp (m, "b"))
      v = v * (1 + r);
    endif
    if (isscalar (l))
      v = v + pvl (r, n, l);
    else
      error ("pv: l must be a scalar");
    endif
  endif

endfunction

function v = npv (r, p, i)

  if (nargin < 2 || nargin > 3)
    print_usage ();
  endif

  if (! (isvector (p)))
    error ("npv: p has to be a vector");
  else
    n = length (p);
    p = reshape (p, 1, n);
  endif

  if (any (any (r <= -1)))
    error ("npv: all interest rates must be > -1");
  endif
  if (isscalar (r))
    d = 1 ./ (1 + r) .^ (0 : n);
  elseif (isvector (r) && (length (r) == n))
    d = [1, (1 ./ cumprod (reshape (1 + r, 1, n)))];
  else
    error ("npv: r must be a scalar or a vector of the same length as p");
  endif

  if (nargin == 3)
    if (! isscalar (i))
      error ("npv: I_0 must be a scalar");
    endif
  else
    i = 0;
  endif

  p = [i, p];
  v = sum (d .* p);

endfunction


function v = fv (r, n, p, l, m)

  if (nargin < 3 || nargin > 5)
    print_usage ();
  endif

  if (! (isscalar (r) && r > -1))
    error ("fv: r must be a scalar > -1");
  elseif (! (isscalar (n) && n > 0))
    error ("fv: n must be a positive scalar");
  elseif (! isscalar (p))
    error ("fv: p must be a scalar");
  endif

  if (r != 0)
    v = p * ((1 + r)^n - 1) / r;
  else
    v = p * n;
  endif

  if (nargin > 3)
    if (nargin == 5)
      if (! ischar (m))
        error ("fv: `method' must be a string");
      endif
    elseif ischar (l)
      m = l;
      l = 0;
    else
      m = "e";
    endif
    if strcmp (m, "b")
      v = v * (1 + r);
    endif
    if isscalar (l)
      v = v + fvl (r, n, l);
    else
      error ("fv: l must be a scalar");
    endif
  endif

endfunction

%%====================================
%% Engineering Economy Basic Formulas
%%====================================
%P/F
function p = f_p(i ,n)
   p = ((1 + i)^n );
endfunction

%F/P
function f = p_f(i ,n)
   f = ((1 + i)^-n );
endfunction

%F/A
function f = f_a(i ,n)
   v = ((1 + i)^n );
   f = (v - 1) / i;
endfunction

%A/F
function a = a_f(i ,n)
   a = 1 / f_a(i ,n);
endfunction


%P/A
function v = p_a(i ,n)
   v = ((1 + i)^n );
   v = (v - 1) / i;
   v = v / ((1 + i)^n );
endfunction

%A/P
function a = a_p(i ,n)
   a = 1 / p_a(i ,n);
endfunction


%============== end of library ==========

%========================================




Week#1

%%==================================== %% Engineering Economy Basic Formulas %%==================================== %P/F function p = f_p(i ,n) p = ((1 + i)^n ); endfunction %F/P function f = p_f(i ,n) f = ((1 + i)^-n ); endfunction %F/A function f = f_a(i ,n) v = ((1 + i)^n ); f = (v - 1) / i; endfunction %A/F function a = a_f(i ,n) a = 1 / f_a(i ,n); endfunction %P/A function v = p_a(i ,n) v = ((1 + i)^n ); v = (v - 1) / i; v = v / ((1 + i)^n ); endfunction %A/P function a = a_p(i ,n) a = 1 / p_a(i ,n); endfunction %============start of Examples=========== %=========Example#1====================== %%https://www.e-education.psu.edu/eme460/node/654 % A is a uniform series of equal payments at each compounding period; % P is a present single sum of money at the time zero; % F is a future sum of money at the end of period n. And i is the compound interest rate. % i is the compound interest rate % n is the period. disp("=========Example 1-1=========") %Assume you put 20,000 dollars (principal) in a bank for the interest rate of 4%. %How much money will the bank give you after 10 years? n = 10 i = 4/100 p = 20000 f = p * f_p(i ,n); printf("F = %10.2f\n",f) %disp("===================") disp("=========Example 1-2=========") % Assuming the discount rate of 10 %, present value of 100 dollars
% which will be received in 5 years from now can be calculated as: n = 5 i = 10/100 f = 100 p = f * p_f(i ,n); printf("P = %10.2f\n",p) %disp("===================") disp("=========Example 1-2-1=========") % Assuming the interest rate of 10 %, present value of 10,000 dollars % How many years from now it will be double in value: i = 10/100 p = 10000 for n = 1:10 f = p * f_p(i ,n); printf("n= %d : F = %10.2f\n",n,f) if f > (2*p) break endif endfor %disp("===================") disp("=========Example 1-3=========") n = 20 i = 6/100 a = 4000 f = a * f_a(i ,n); printf("F = %10.2f\n",f) %disp("===================") disp("=========Example 1-4=========") n = 20 i = 6/100 f = 200000 a = f * a_f(i ,n); printf("A = %10.2f\n",a) %disp("===================") disp("=========Example 1-5=========") n = 10 i = 12/100 a = 2000 p = a * p_a(i ,n); printf("P = %10.2f\n",p) %disp("===================") disp("=========Example 1-6=========") p = 25000 i =4/100 n = 5 A = p * a_p(i,n); printf("A = %10.2f\n",A) %disp("===================") disp("=========Example 1-7=========") i = 8/100 P = 1000 * p_f(i,1)+ 1500 * p_f(i,2)+ 1800 * p_f(i,3)+ 1200 * p_f(i,4)+ 2000 * p_f(i,5) disp("===================")

Free Sofwares for SME

by ประยุทธ พันธุลาภ

WPS Office Personal

WPS Office Personal is available in Free, Premium, and Professional versions, along with versions for Android and iOS. The free version provides basic features and supports Microsoft Office file formats. Some features, such as printing and mail-merge, can be temporarily accessed only after viewing an advertisement, which WPS Office refers to as sponsored access
  

Libre Office

LibreOffice is offered in a free and open source "Community" version officially intended for personal use. This is the full suite, not a cut-down version. Enterprise-supported versions of LibreOffice can also be obtained from TDF's corporate partners.
  

NanoCAD

Free version nanoCAD 5.0 32bit for CAD 2D
Videos Tutorial
NanoCAD free download and install
Part 1
Part 2
Part 3
nanoCAD india channel
  

Paint.net

Paint.net is a freeware raster graphics editor program for Microsoft Windows, alternative for Photoshop developed on the .NET Framework.

Plugins
BoltBait's Plugin Pack
dpys Plugin Pack

All Plugin Packs
All plugins

Videos Tutorial
Tutorials
  

Project Libre

Free and simple Project Gantt Chart
Videos Tutorial
ProjectLibre Tutorial Channel
  

imagetopdf

On-line convert image files to PDF file
  

PDF Fill FREE Basic Version

Free PDF Tools
  

Inkscape

Inkscape is a free and open-source vector graphics editor used to create vector images, primarily in Scalable Vector Graphics (SVG) format. Other formats can be imported and exported.
  

Photo Scape

Everything you need to edit photos.
PhotoScape X is an all-in-one photo editing software which provides photo-related features such as Photo Viewer, Editor, Cut Out, Batch, Collage, Combine, Create GIF, Color Picker, Screen Capture, RAW images and More.
  

GIMP

The Free & Open Source Image Editor.
GIMP is a high quality framework for scripted image manipulation, with multi-language support such as C, C++, Perl, Python, Scheme, and more!

Flexsim Express

The Free 3D Simulation Assembly Line Process
FlexSim Express is available for anybody to use. It’s a 100% free evaluation version of our simulation software, allowing you to model a system with 30 or fewer objects. There are no time restrictions, but it can only be used to evaluate and test FlexSim’s capabilities.

Sketchup Make 2017

Currently SketchUp is the best software for 3D modelling which is equipped with loads of features which are unavailable in alternative software. And requiring low performance while working very smooth is great. Some complications will occur if you do complex designs but for general purposes this is the best. Can be used even by a beginner without facing issues.