Polinomial Lagrange,
Metode lagrange merupakan salah
satu metode dari polinomial, metode ini menggunakan konsep interpolasi yakni
langsung menentukan nilai suatu titik terhadap titik - titik polinomial tertentu.
x | f(x) |
3.35 | 0.298507 |
3.40 | 0.294118 |
3.50 | .285714 |
3.60 | 0.277778 |
P1 = | (x - b)f(a) | + | (x - a)f(b) |
(a - b) | (b - a) |
Pn = | (x - b)(x - c) ... (x - k) f(a) | + | (x - a)(x - c) ... (x - k) f(b) | + ..+ | (x - a)(x - c) ... (x - j) f(k) |
(a - b)(a - c) ... (a - k) | (b - a)(b - c) ... (b - k) | (k - a)(k - c) ... (k - j) |
P1 = | (3.44 - 3.5)(0.298507) | + | (3.44 - 3.4)(0.298507) | = | 0.298507 |
(3.4 - 3.5) | (3.5 - 3.4) |
Dari penjelasandiatas kita dapat membuat metode lagrange yang dimplementasikan pada program C++, berikut penjelasan rincinya:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <conio.h>
float x[100],f[100],xp,penyebut,pembilang,P;
int i,j,k,n,jlh;
char option;
int main() {
FILE *fp; //fp -> Type File
//Jika File data.txt tidak bisa di buka
if(!(fp = fopen("data.txt","r"))) {
fprintf(stdout,"cannot open file\n");
return(0);
}
jlh=0; //jlh = jumlah data
//Perulangan Membaca Data
while(!feof(fp)) {
fscanf(fp,"%f",&x[jlh]);
fscanf(fp,"%*c");
fscanf(fp,"%f", &f[jlh]);
fscanf(fp,"%*c");
jlh++;
}
fclose(fp);
//Menampilkan Data X[i] dan F[i]
cout<<"Jumlah Data = "<<jlh<<endl<<endl;
for(i=0;i<=jlh-1;i++)
{
cout<<" "<<x[i]<<"\t"<<f[i]<<endl;
}
//Memnentukan Nilai Xp yang akan dicari
orde: cout<<"\nnilai xp = ";cin>>xp;
cout<<"Pilhan Order 1 - "<<jlh-1<<" = ";cin>>n;
cout<<endl;
//P di set nol
P=0;
for(i=0;i<=n;i++) //Perulangan untuk penjumlahan berikutnya
{
penyebut=1;pembilang=1;
for(j=0;j<=n;j++) // perulangan untuk menentukan penyebut
{ // dan pembilang
if(x[j]!=x[i]) // selain dari x[i] agar tidak terjadi
{ // pengurangan x[i]- x[j] = 0
pembilang=pembilang*(xp-x[j]);
penyebut=penyebut*(x[i]-x[j]);
}
}
//Hasil penjumlahan P dengan P sebelumnya
P=P+((pembilang/penyebut)*f[i]);
cout<<"Penyebut = "<<pembilang<<endl;
cout<<"Pembilang = "<<penyebut<<endl;
cout<<" P"<<i<<" = "<<P<<endl<<endl;
}
cout<<"Pilih Order lain y/n -> "; cin>>option;
cout<<endl;
if(option=='y')
{
goto orde;
}
}
#include <iostream.h>
#include <string.h>
#include <conio.h>
float x[100],f[100],xp,penyebut,pembilang,P;
int i,j,k,n,jlh;
char option;
int main() {
FILE *fp; //fp -> Type File
//Jika File data.txt tidak bisa di buka
if(!(fp = fopen("data.txt","r"))) {
fprintf(stdout,"cannot open file\n");
return(0);
}
jlh=0; //jlh = jumlah data
//Perulangan Membaca Data
while(!feof(fp)) {
fscanf(fp,"%f",&x[jlh]);
fscanf(fp,"%*c");
fscanf(fp,"%f", &f[jlh]);
fscanf(fp,"%*c");
jlh++;
}
fclose(fp);
//Menampilkan Data X[i] dan F[i]
cout<<"Jumlah Data = "<<jlh<<endl<<endl;
for(i=0;i<=jlh-1;i++)
{
cout<<" "<<x[i]<<"\t"<<f[i]<<endl;
}
//Memnentukan Nilai Xp yang akan dicari
orde: cout<<"\nnilai xp = ";cin>>xp;
cout<<"Pilhan Order 1 - "<<jlh-1<<" = ";cin>>n;
cout<<endl;
//P di set nol
P=0;
for(i=0;i<=n;i++) //Perulangan untuk penjumlahan berikutnya
{
penyebut=1;pembilang=1;
for(j=0;j<=n;j++) // perulangan untuk menentukan penyebut
{ // dan pembilang
if(x[j]!=x[i]) // selain dari x[i] agar tidak terjadi
{ // pengurangan x[i]- x[j] = 0
pembilang=pembilang*(xp-x[j]);
penyebut=penyebut*(x[i]-x[j]);
}
}
//Hasil penjumlahan P dengan P sebelumnya
P=P+((pembilang/penyebut)*f[i]);
cout<<"Penyebut = "<<pembilang<<endl;
cout<<"Pembilang = "<<penyebut<<endl;
cout<<" P"<<i<<" = "<<P<<endl<<endl;
}
cout<<"Pilih Order lain y/n -> "; cin>>option;
cout<<endl;
if(option=='y')
{
goto orde;
}
}
Penjelasan:
Program Plonomial lagrange ini menggunakan input data dari file txt, dengan nama file data.txt dengan isi file tersebut dengan data sebagai berikut:
3.20 0.312500
3.30 0.303030
3.35 0.298507
3.40 0.294118
3.50 0.285714
3.60 0.277778
3.65 0.273973
3.70 0.270270
setelah data terbaca sekarang kita memasuki program lagrange. variabel yang digunakan adalah P, Pembilang, Penyebutpembilang digunakan untuk melakukan perulangan perkalian pada rumus lagrang (x - a)(x - c) ... (x - k) dan penyebut digunakan untuk melakukan perulangan perkalian pada rumus lagrang (b - a)(b - c) ... (b - k) dari rumus lagrange telihat bahwa tidak ada rmus (a-a) sehingga dari programkita menggunakan kode if(x[j]!=x[i]) tujuannya agar tidak terjadi (x[j]-x[i])=0
Setelah didapat nilai pembilang dan penyebut kita bisa mendapatkan nilai P=P+((pembilang/penyebut)*f[i]); maksudnya: nilai P sebelumnya ditambah dengan nilai P sesudahnya sesuai dengan rumus
Setelah didapat nilai pembilang dan penyebut kita bisa mendapatkan nilai P=P+((pembilang/penyebut)*f[i]); maksudnya: nilai P sebelumnya ditambah dengan nilai P sesudahnya sesuai dengan rumus
P0 | P1=P0+P1 | ||
P1 = | (x - b)f(a) | + | (x - a)f(b) |
(a - b) | (b - a) |
tetapkunjungi www.julkahendri.co.cc untukdapatkan recomendasi berbagai informasi untuk anda semua.
0 komentar:
Posting Komentar
Anda dapat menggunakan beberapa tag HTML, seperti <b>, <i>, <a>
Penting: Jika anda tidak memiliki account gmail pilih Name/URL pada form ini