• Tidak ada hasil yang ditemukan

TAP CHI KHOA HQC - BAI HOC BONG NAI, SO 03

N/A
N/A
Protected

Academic year: 2024

Membagikan "TAP CHI KHOA HQC - BAI HOC BONG NAI, SO 03"

Copied!
9
0
0

Teks penuh

(1)

TAP CHI KHOA HQC - BAI HOC BONG NAI, SO 03 - 2016 ISSN 2354-1482 PHAT TRIEN CHU'ONG TRINH CON L A M KHOtP D U ^ L l f U

v d l N H I E U M O HINH

TkS. Nguyin NggcAnh^

ThS. Tnrang Vdn Minh^

TOM TAT

Hiin nay, ed rdt nkiiu phdn mem mdy tinh cho phip ngu&i ditng ldm khdp die lieu thuc nghiem v&i dgng hdm tuy y nhgp b&i ngu&i dimg. Tuy nhien. cde chuang trinh ndy cd dgng ddng (ddi v&i cdc chuang tiinh thuang mgi) hodc cd hi thdng thu viin liin kit rdt phicc tgp (ddi v&i cdc ehuang tiinh md nguon m&). Do do, viec tdn dung thu viin eda edc ehucmg tiinh ndy de nhiing vdo cdc chuong tiinh pkdn mim nhd tu thiit ki Id khdng thich hgp. Bdi bdo ndy dua ra bp chuang trinh con. cho phep ngu&i diing ldm kh&p sd lieu tkuc nghiim v&i dgng hdm tuy y, duge viit bdng ngdn ngic C++, cd cdu trdc dan gidn, gdi ggn tiong mpt tap tin ehi ddi 438 ddng, thudn tien de nhung vdo cde chuang tiinh tu phdt triin. Kit qud thu duge bdng chuong trinh dugc so sdnh v&i ROOT.

Tir kh6a:Chucmg trinh ldm kh&p nin C++, thudt todn ldm kh&p Levenberg- Marquardt

1. Gidi thieu

Ldm khdp dft heu theo mdt md hinh (dang hara) la mgt thft tue dugc tien hdnh rdt phd bidn frong phdn tich sd hdu (phan tich phd, xay dung md hinh, xdc dinh cdc thara sd dd ngi suy, ngogi suy).

Cac thft tuc ndy cd thd dugc thuc hidn bdi cdc chuang trinh cd giao didn true quan nhu Origin [1], SciDavis [2] hodc cdc chuong trinh dudi dgng lenh thue thi nhu ROOT [3], R [4], Matlab [5], Gnuplot [6]. Tuy nhien, radt sd la cac chuang trinh thuang ragi (Origin, Matiab), do do ngudi sft dung se phdi bd ra radt chi phi khdng nhd de trang bi phdn mem. Tidp niia, cac chuang trinh nay thudng cd bd thu vien di kera rat ldn, va hen ket vdi nhau rdt phftc tgp. Do, dd viec nhung cae thu vidn ndy vdo cde chuong trinh nhd tu viet la rat phftc tgp, vd lam tang kich thudc cfta chuang trinh.

Trong thgc te, tiiy thudc vao tinh hudng cu the, vide sft dung edc phdn mem ldn kd fren dd Iam khdp khdng phdi Iftc ndo cung thuan lgi: chuong

trinh qud ngng; hd didu hdnh khdng hd trg; ... Khi dd cac phan mem tu viet se la mgt gidi phdp thich hgp.

Bg chuong trinh con dugc cung cap frong bdi bao nay cho phep ngudi dftng nhftng vdo frong cdc phdn mera tu viet, dd thuc thi tdc vg ldm khdp sd heu theo md hinh bdt ky do ngudi diing khai bao, sft dung thudt toan LEVENBERG- MARQUARDT [7]. Chuong ttinh cho phep ngudi dung lua chgn Iam khdp cd frgng sd hogc khdng cd frgng sd. Bd chuang trinh con nay cd kich thudc rdt nhd, chi ~12 kb, gdi ggn frong mgt tap tin *.h, thudn tidn dd ngudi dftng khai bao frong chuang triiih chinh. Ngdn ngu dugc sft dung la C++.Bien dich bang GNU g++ [8].

Bg chuong trinh con dugc hidu luc hda bang cdch so sdnh kdt qud vdi chuong trinh ma ngudn md dd dugc chftng nhdn va sft dung rdng rai fren cdc phdng thi nghiem frdn the gidi, ROOT.Trong bao cdo nay, 5 bg so lieu dd dugc sft dgng de so sanh.

Vien Nghien cihi Hat nhin

^ Tnrang D^i hoc Dong Nai 122

(2)

TAP CHl KHOA HOC - BAI HOC B 6 N G NAI, SO 03 - 2016 2. Thudt toan va each sii dung

chinmg trinh

ISSN 2354-1482

Thuat todn LEVENBERG- MARQUARDT

Xet bo s6 lieu voi n di6m thuc nghiem {X„Y,), m6 hinh cfci lam khop la F(X,a), vdi a lii vecta tham so {ai,a2,a3,....,a„0. Theodo:

Yi=F(X„ai,a2,a3,... .,a„) (1) Dd xdc dinh cac tham sd tu do, ta sft dgng phuong phap binh phuang tdi thieu [9]. Phuong phap ndy ddi hdi phdi xae dinh asao eho Id cue tieu:

;t^=2'*'»-t>''"^(''''">]

(2)

Trong dd la frgng sd tuong ftng vdi ffidm sd lieu thft i. cue tidu khi:

da, ' (3)

Ddi vdi cac hdm tuydn tinh, he ra phuong trinh ndi tten ed the dugc gidi ra nghiem xac dinh bang phuang phdp Gauss-Jordan.Tuy nhidn, vdi cdc bdi toan phi tuydn, hd phuang ttinh tten khdng the giai dugc. Khai tridn F(X,a) theo chudi Taylor, ta thu duge bidu thftc dudi dgng raa frdn:

b = M.da ("^^

Trong dd M la ma frgn [ra m] ma:

dF(Xi,a) dFiXi.a') (5

M.,=X'

da, 3«fc )

^ - ^ w , . ( y , - F ( x , , a ) ) . dF{x^i^&)

la vecto bidn thien cua vecto thara so

Giai phuang trinh (3) cho phep xdc dinh , tft dd xac dinh dugc radi. Thu tuc nay lap di lap lai nhieu ldn cho tdi khi hdi tg. Phuang phdp LEVENBERG-MARQUARDT, bd sung thdra vdo thuat toan 2 tham sd vd

, nham edi thidn khd nang hdi tu cua qud trinh khdp.

Thudt toan cd the dugc rad ta ngdn ggn, tftng budc radt nhu sau, luu do thuat toan dugc dua ra frong Hinh 1:

1. Dat 2. Xac dinh

6 = M'.da

Vol

1, n=0.

tii phuang trinh:

(7) M' = , la raa frgn don vi.

n=n+i

Vd

5. Tinh

6. Neu n<2, di tdi bude 9 7. Neu n<3, di tdi budc 8 8. Ndu X^ia"") > x^a"",

frong do £ thi tiep tuc vdng lap, ndu khdng, thodt ra khdi vdng lap.

9. Dgt A = 0.1/; Quay lai budc 2.

(3)

TAP c m KHOA HOC - BAI HOC SONG NAI. SO 03 - 2016 ISSN 2354-1482 Bat diu

da = M'-^b *

n = n -1-1 Dtp = aj""^ + kda

I

X = O.IA, fc = 1

Hinh 1. Luu do thuat toan 124

(4)

TAP C H ! KHOA HQC - BAI HQC BONG NAI, SO 03 - 2016 ISSN 2354-1482 Sir dung chuomg trinh con

Thft tuc lam khdp du lieu duge thuc hien bdi hai chuang trinh con LSfitNL (khdng cd frgng sd) vd LSfit_NLW (cd frgng sd). Cft phap khai bao nhu sau:

LSfit_NL(matrix X, matrix Y, int par_num, matrix par) LSfit_NLW(matrix X, matrix Y, matrix W, int par_num, matrix par)

Trong do X, Y la hai raa frdn tuong ftng vdi bd sd lieu thgc nghiera (X,Y), W Id ma fran frgng sd, p a r n u m Id sd tham sd tu do eua md hinh lam khdp, par la raa trdn tuong ftng vdi gia tri ban dau cua thara sd.

Mdng hai chieu hoae mdt chidu cd thd dugc chuydn thdnh raa frgn (raatrix) thdng qua chuong frinh con array_to_matrix vdi cft phdp nhu sau:

array_to_matrix((double *)array, int row, int col);

array Id mdng 1 chidu hogc 2 ehieu, row Id sd ddng, vd col Id sd cot cua raa frgn tgo thdnh. Vi dg, radng hai chieu A[3][2] cd the dugc chuydn ddi thdnh raa frdn MA[3][2] thdng qua cau ldnh sau: MA = array_to_matrix((double*)A, 3, 2)

Md hinh lam khdp dugc khai bdo ben frong chuang trinh con uf double uf(double x, matrix par)

{

double result;

result = par.E[0]*exp(x/par.E[1]); //par.E[i] la tham s6 t y d o t h i j ' i , x i a bien.

return result;

}

Doan chuong trinh thuc hien tac vu lam khop bp so lieu 15 diem theo mo hinh fl;x)=a*exp(x^) voi a, b la cac tham s6 tu do dugc dua ra ducri day:

double uf(double x, matrix par)

#include <iostream>

#include "matrix.h"

#include <math.h>

using namespace std;

{

double result;

result par.E[0l*exp{x/par.E[1]); // par.E[0]=a;

par.E[1l=b return result;

(5)

TAP CHi KHOA HOC - BAI HOC BONG NAI, S6 03 - 2016 ISSN 2354-1482 }

Int main() {

double A[15l={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

double

B[15l={20,39,66,113,180,300,497,816,1346,2230,3674,6050,9 976,16454,27122};

double C[15] = {0.222851, 0.160098, 0.122793, 0.094265, 0.074557 ,0.057718, 0.044859, 0.035006, 0.027256, 0.021178, 0.016497, 0.012857, 0.010012, 0.007796, 0.006072};

double para[2]={10,2};

matrix X = array_to_matrix(A,15,1);

matrix Y = array_to_matrlx(B,15,1);

matrix W = array_to_matrix(C,15,1);

matrix par = array_to_matrlx{para,2,1);

c o u t « " N o Welghted:"«endl;

Mprint(LSflt_NL(X,Y,2,par));

par=array_to_matrlx{para,2,1); //khoi tao I9I tham sfl ban dSu

cout«"Welghted:"«endl;

Mprlnt(LSflt_NLW(X,Y,W,2,par));

return 0;

}

Mdng A, B, C ldn lugt tuong ung vdi cae ma fran X, Y, W.

De hieu lue hda chuong trinh, ket qud tinh todn thuc hidn bdi chuang trinh tren nhieu bd sd lieu khdc nhau vdi cdc md hinh liet ke dudi day dugc so sdnh vdi chuong trinh ROOT.

Cdc rad hinh lara khdp dugc thft nghidra bao gdra:

- Md hinh hdm luy thfta eo sd tu nhien: f(x)=a*exp(x^);

- Md hinh hdra gauss g(x)^A*exp(-(x- )^/2 ), vdi A, , la cdc thara sd tu do.

- Md hinh hara gauss ndm frdn mdt ndn phdng tuong ftng vdi da thftc bac I:

f(x) = g(x) + ai.x + ao

- Md binh hai ham gauss ndm chap len nhau chdng frdn mgt nen phdng tuong ftng vdi da thftc bac 1: f(x) = gi(x) +g2(x)+ai«x + ao

(6)

TAP CHI KHOA HOC - DAI HOC DONG NAI, SO 03 - 2016 ISSN 2354-1482 - Md hinh ba hdra gauss chap frdn ndn phdng tuong ftng vdi da thftc bgc 1:

f(x)=f(x) = gi(x) + g2(x)+g3(x)+ ai*x + ao

3. Hi^u lu-c hda chuoTig trinh thdng qua so sanh vdi ROOT

Kdt qua thu dugc bdi chuang trinh dugc so sanh vdi ROOT, phdn radra dugc sft dung rgng rai bdi nhieu phdng thi nghiera fren thd gidi. Kdt qud so sdnh vdi mgt sd rad hinh dugc trinh bay frong Bang 1.

Bdng 1. So sanh gid tri tham sd ldm khdp cua chuang trinh vdi ROOT Tham so Gia tli ban dau Chuvng trinh

n^y ROOT

Bo Ifch giira hai chinmg

trinh (%) Wan lily thira ctf so tif nhiSn: y=a*exp(x/b)

Khong trong so a

b Co trpng so a b

10 2 10 2

15,0015 2,0000 14,9828 1,9997

15,0015 2,0000 15,0119 2,0002

0 0 0,19 0,03 Ham gauss: y = A*exp(-(x-n)Vo^)

Khong trong so A

t^

o Co trong s6 A C o

80 52 20 80 52 20

99,7945 50,0195 10,0041 99,3681 50,1327 10,0439

99,7951 50,0195 10,0041 99,9418 50,0060 9,9759

0,00 0,00 0,00 0,58 0,25 0,68 Gauss + da thiirc bSc 1: v = A*expr-(x-n)WH a l * x + aO

Khong trong so A

H a al aO Co trong so A

M

a al aO

80 52 10 2 3 80 52 10 2 3

99,8306 50,0090 10,0198 2,0047 2,7612 99,7179 50,0157 10,0227 2,0026 2,8558

99,8308 50,0090 10,0198 2,0047 2,7611 99,9112 50,0015 10,0274 2,0076 2,5562

0,00 0,00 0,00 0,00 0,00 0,19 0,03 0,05 0,25 10,49 127

(7)

TAP c m KHOA HOC - BAI HOC BONG NAI, SO 03 - 2016 ISSN 2354-1482 2 ham gauss ch^p + da thurc b^c 1: y = iL*»xp(3tx-(i)W)-h al*x -I- aO -f Al*exp(-(!i*J

lilflaV) - i - i Khong trong so

Al Hi o l al aO A2 H2 o2 Co trong so Al Hi o l al aO A2 H2 o2

80 31 8 2 3 90 51 10 80 31 8 2 3 90 51 10

79,8317 29,9800 7,9845 0,9997 2,0129 99,9497 49,9717 12,0307 79,6992 29,9754 7,9896 0,9999 2,0053 99,8090 49,9667 12,0467

79,8321 29,9801 7,9845 0,9997 2,0128 99,9500 49,9717 12,0307 79,8282 29,9798 7,9745 0,9997 2,0195 99,9412 49,9676 12,0371

0,00 0,00 0,00 0,00 0,00

0,16 0,01 0,19 0,03 0,71 0,13 0,00 0,08

" f ^ i ' g a u s s c h i p -1- da thiic bac 1: Al*cxp(-(x-^l)'/<J1 V a l * x -^ aO -1- A2*cxp(-(i- p 2 ) % 2 V A3*exp(-(x-(l3)^/<l3^)

Khong trong so Al Hi ol al aO A2 H2 o2 A3 H3 a3 Co trong s6 A l Hi o l al aO A2

75 25 10 1 2 100 45 8 210 65 8 75 25 10 1 2 100

80,1944 31,0066 7,9983 1,9997 2,9995 90,0007 50,9908 9,9805 200,2460 60,9977 4,9986 80,6545 31,1255 8,1015 2,0004 2,9873 88,8030

80,2094 31,0096 8,0012 1,9998 2,9983 89,9736 50,9791 9,9628 200,4460 60,9968 5,0010 80,3449 31,0127 8,0189 2,0020 2,8098 90,0044

0,02 0,01 0,04 0,00 0,04 0,03 0,02 0,18 0,10 0,00 0,05 0,38 0,36 1,02 0,08 5,94 1,35 128

(8)

TAP CHi KHOA HOC - BAI HOC BONG NAI, S6 03 - 2016 ISSN 2354-1482 H2

o2 A3 H3 o3

45 8 210 65 8

50,5029 9,2869 208,4220 60,9426 5,0936

50,9623 9,9319 200,7630 60,9965 5,0069

0,91 6,95 3,67 0,09 1,70

4. Ket qua

Md hinh ddu tien duge su dung de so sdnh la rad hinh hara luy thua co so tu nhidn. Md hinh hara luy thfta Id dang md hinh dien hinh nhdt khi tidn hanh thu tuc lam khdp phi tuydn, do tham sd anh hudng rat raanh tdi gid tri cfta hara. Chi mdt lugng nho thay ddi frong tham sd cung khidn gid tri cua ham thay ddi mdt lugng Idn.Kdt qud frong Bang 1 cho thdy, khi lara khdp khdng frgng sd, chuang trinh hgi tu ve gia tri tham sd hoan toan gidng vdi ROOT. Ddi vdi qua trinh lam khdp cd frgng sd, ket qua thuldch so vdi ROOT radt lugng nhd hon 0.2%.

Cac rad binh gauss, gauss frdn nen da thftc bac radt, chap 2 hara gauss frdn ndn da thuc bgc 1, va chap 3 hdm gauss frdn ndn da thuc b|ic ragt deu cho kdt qua tuong dong vdi ROOT. Do ehenh Igch cua gia tri thara so lara khdp thu dugc bdi chuong trinh vdi gia tri thu dugc tft ROOT phdn ldn ddu nhd hon 1%. Chi cd mdt sd it ttirdng hgp, gia tri tham sd lara khdp thu dugc bdi chuang trinh lech so vdi ROOT cao hon 1%.

Tuy nhidn frong cac ttirdng hgp dd, eae tham sd cd do lech cao Id cdc tham sd cd mftc dd dnh hudng tdi gia tri cua ham sd

rat nhd. Vi du nhu trudng hgp thara sd aO thu dugc khi lam khdp vdi rad hinh gauss fren nen da thftc bgc 1, do leeh cua chuong trinh vdi ROOT la 10,4%

(2,8585 so vdi 2,5562). Mgc dft do l?ch cao, nhung dnh hudng eua thara sd nay tdi gia tri cua hdra Id rdt nhd.

Ket qua cd su tuong ddng cao giua chuong trinh vdi ROOT khi ap dung vao cac rad hinh chap gauss cho thdy, chuong trinh hodn todn ddp ftng tdt bdi todn tdch dinh chdp, vdn rdt phd bidn khi phdn tich phd gamma.

5. Kit Iuan

Chuong trinh lam khdp cd ket qud cd dg tuong ddng eao vdi ROOT.

Cdu true cua chuang trinh don gidn, thudn tuy chi sft dgng cdc thu vidn cd sdn cfta C++, thuan tidn cho vide nhung vao cdc chuang trinh con khac.

Chuong trinh rdt thich hgp dd tich hgp vdo cdc chuang tiinh phan tieh phd tu thidt kd, qua dd giup gidm chi phi mua phan radra phdn tich ddt tidn, vdi cac tinh nang it hoac khdng bao gid dugc su dung.

Ngodi ra, viec dd dang chinh sfta raa ngudn, giup ngudi dftng de dang xdy dung cdc md-dun ehuyen bi§t nhdm thuc hien cdc tac vu theo yeu cdu cu the mgt each thuan tien va nhanh chong.

(9)

TAP c m KHOA HOC - BAI HOC BONG NAI, SO 03 - 2016 ISSN 2354-1482 TAX LIEU THAIVI KHAO

1. [Online]. Available: http://www.originlab.com/.

2. [Online]. Available: http://seidavis.sourceforge.net/.

3. [Online]. Available: https://root.eem.ch/.

4. [Online]. Available: https://www.r-project.org/.

5. [Online]. Available: http://www.raathworks.com/produets/matlab/.

6. [Online]. Available: http://www.gnuplot.iiifo/.

7. Gill, P. R.; Murray, W.; and W r i ^ t , M. H. "The Levenberg-Marquardt Method." §4.7.3 in Practical Optimization. London: Academic Press, pp. 136-137, 1981..

8. [Online]. Available: http://www.iningw.org/.

9. Rao, C. R.; Toutenburg, H.; et al. (2008). Linear Models: Least Squares and Altematives. Springer Series m Statistics (3rd ed.). Berlin: Springer. ISBN 978- 3-540-74226-5

DEVELOPMENT O F SUBROUTINE F O R DATA FITTING W I T H VARIOUS MODELS

ABSTRACT

Currently, there are many computer programs, wkick allow users to fit experimental data to any mathematical models. However, these programs either do not give users their source codes (commercial sofware) or have complicated libraries (open source software). Consequently, using their libraries to form homemade software becomes a difficult task, and even impossible, in case of commercial software. This work presents a group of sub-programs, written in C++, which permit users to fit experimental data to any mathematical models, including weighted fit and non-weighted fit. The sub-programs are packaged in one file with only 438 code lines; hence, make it easy to develop programs based on these sub- programs. The quality of these sub-programs wets proved by comparing with ROOT.

Keywords:Fitiing C++ code, Levenberg-Marquardt algorithm

Referensi

Dokumen terkait