Sabtu, 08 Oktober 2016

why result eigen value between matlab and numpy is different

Ulasan berikut menjadi jawaban atas why result eigen value between matlab and numpy is different
http://stackoverflow.com/questions/18884212/conflicting-eigen-vector-outputs-between-matlab-and-numpy


Disimpulkan bahwa jika suatu matriks bujur sangkar, dikali dengan sebuah vektor bukan nol, diatur sedimikian rupa sehingga hasilnya sama dengan perkalian sebuah bilangan skalar dengan vektor tak nol itu sendiri, inilah yang dinamakan Nilai Eigen dan Vektor Eigen.
Referensi : https://istanamengajar.wordpress.com/2014/01/28/soal-dan-pembahasan-nilai-dan-vektor-eigen-suatu-matriks/

Berikut adalah 2 contoh soal bagaimana menentukan nilai dan vektor Eigen suatu matriks:
Penyelsaian




Menghasilkan vektor_eigen = [-2,1; 1,-1]
Nilai_eigen = [2,3]
Bila anda tertarik, silahkan untuk mengunjungi:
https://istanamengajar.wordpress.com/2014/01/28/soal-dan-pembahasan-nilai-dan-vektor-eigen-suatu-matriks/

penulis disini bukan membahas mengenai cara diatas, akan tetapi mengungkap persoalan hasil perhitungan eigen di Matlab dan Numpy (Pustaka matrix di python) koq berbeda??
Coba perhatikan berikut

Jika anda gunakan code matlab berikut


clc;clear all;close all;
A = [1,-2;1,4]
[vektor_eigen,nilai_eigen] = eig(A);
vektor_eigen
nilai_eigen = diag(nilai_eigen) 

menghasilkan
Mari kita uji apakah masih berlaku?
Kita akan menggunakan nilai eigen ke 1 yaitu bernilai 2

%lakukan uji
no_uji = 1;
sisi_kiri = A*vektor_eigen(:,no_uji)
sisi_kanan = nilai_eigen(no_uji)*vektor_eigen(:,no_uji) 

Ternyata menghasilkan yang sama
Kalaupun no_uji diganti dengan nilai eigen ke 2 yaitu bernilai 3, pun akan sama hasil nya
Menghasilkan vektor_eigen = [-0.8944, 0.7071; 0.4472,  -0.7071]
Nilai_eigen = [2,3]

Mari kita coba versi python dengan numpy sebagai pustaka nya!



import numpy as np

print '\n'*100
A = np.array([[1,-2],[1,4]])
[nilai,vektor] = np.linalg.eig(A)

index = 0
sisi_kiri = np.dot(A,vektor[:,index])
sisi_kanan = nilai[index]*vektor[:,index]
print 'sisi_kiri\n',sisi_kiri
print 'sisi_kanan\n',sisi_kanan

Menghasilkan yang sama
Itu artinya bisa solusi non trivial (kebetulan saja menggunakan data ukuran 2*2, bila saja menggunakan ukuran data yang agak besar, maka hasil di matlab dan numpy-python bisa berbeda!) tapi sebetulnya itu sama bila mengacu definisi berikut:





Posting Komentar