Machine Learning

Indlela Yokukhiqiza Iziza Zezithombe Ze-Ultra-Compact Vector Nge-Orthogonal Distance Fitting

1. Isingeniso

ziyindlela yemvelo yokubuka imisebenzi yezibalo. Ngezithombe zevekhtha, umsebenzi ulinganiselwa ngamasegmenti amajika e-cubic Bézier axhunyiwe ahlelwe ngendlela egqamile (okungukuthi aguqulelwa abe amaphikseli) uma eboniswa. [1]. Ngenxa yokuthi i-rasterization ibambezelekile, izithombe zezithombe zevekhtha ngokwemvelo ziphatheka kakhulu kunezithombe ezisuselwe kumaphikseli njengoba ukunikezwa kungahlotshaniswa nendawo yakho yokubonisa. Kungakhathaliseki ukuthi usondeza kangakanani kusakhiwo sezithombe zevekhtha, uzohlala ubona amasegimenti emigqa ehlanzekile; kanti uma usondeza isithombe esine-rasterized ngokwanele, ekugcineni uzobona amabhlogo aluhlaza amele amaphikseli.

Nakuba izithombe zevekhtha ziyifomethi enhle kakhulu yokuhlela, ukukhiqiza izithombe ezinhle zevekhtha kungaba inselele. Cabanga, ngokwesibonelo, ukuthi singasithatha kanjani lesi sakhiwo esiyisibonelo esivela ku-matplotlib [2] kumsebenzi othi f

import matplotlib.pyplot as plt
import numpy as np
def f
  return np.exp(-t) * np.cos(2*np.pi*t)
t = np.arange(0.0, 5.0, 0.02)
plt.plot(t, f
plt.savefig('fig.svg')
Isiqephu somugqa somugqa womsebenzi we-exp(−t)cos(−2πt), 0 ≤ t ≤ 5, namasegimenti angu-250. Umfanekiso ngombhali.

I-Matplotlib ilinganisa isakhiwo esibushelelezi ngamasegimenti emigqa axhumeke izingxenye ezingu-250 (aboniswe ngemibala eshintshanayo). Nakuba isakhiwo sibukeka sisihle, sikhulu kakhulu kunalokho okudingeka sibe yikho. Uma, esikhundleni salokho, besikhiqiza isithombe esine-rasterized njenge-PNG, imininingwane yokuthi ijika lakhiwe kanjani ibingeke ibe nandaba; kodwa ngesithombe se-vector amasegimenti omugqa ngamunye adluliswa futhi agcinwe esithombeni esikhishiwe. Ngokulungiswa okuthile, nokho, singakwazi ukuthuthukisa usayizi kakhulu ngaphandle kokudela ikhwalithi yesithombe.

I-primitive eyisisekelo yezithombe zevekhtha yi-cubic yepharamitha, emelelwa njengejika eliyi-cubic Bézier. Ngamajika e-cubic e-Bézier ahlukene, sinamafindo amaningi kakhulu esingawalungisa ukuze alinganisele imisebenzi kunalapho sizikhawulela kumasegimenti e-cubic alayini noma ama-piecewise (nonparametric). Sisebenzisa i-algorithm ye-orthogonal distance fitting (ODF) kusuka kuleli phepha, singakwazi ukukhiqiza isakhiwo somsebenzi esidinga amasegimenti angu-8 kuphela e-Bézier futhi asibonakali kumfanekiso we-matplotlib. Ngezansi ngikhombisa ukumelwa kwesakhiwo ku-TikZ. Kamuva ngizokhombisa ukuthi singawuguqula kanjani kalula umyalo we-TikZ ube yisithombe se-SVG kuwebhu sisebenzisa i-MetaPost.

draw  (0.00000, 2.50000) ..  controls (0.39088, 2.10882) and (0.61233, -1.05415) ..
       (1.18750, 0.36510) ..  controls (1.60393, 1.31193) and (1.71252, 2.10800) ..
       (2.37500, 0.95127) ..  controls (2.88922, 0.15365) and (3.15477, 0.95162) ..
       (3.56250, 1.11921) ..  controls (3.98299, 1.31658) and (4.26123, 0.78781) ..
       (4.75000, 0.82415) ..  controls (5.02221, 0.81871) and (5.38203, 1.12388) ..
       (5.93750, 0.99939) ..  controls (5.96426, 1.01981) and (6.36975, 0.82102) ..
       (7.12500, 0.95127) ..  controls (8.08129, 1.04760) and (7.44859, 0.87986) ..
       (9.50000, 0.96171);
Isakhiwo somsebenzi exp(−t)cos(−2πt), 0 ≤ t ≤ 5, namajika e-Bézier alingana kusetshenziswa i-ODF. Umfanekiso ngombhali.

I-algorithm yakhela emsebenzini ka-Alvin Penner [3]. Njengoba kunikezwe umsebenzi wepharamitha f, iqala ilingana nochungechunge lwe-Chebyshev ukuze lulingane no-f. Ngemisebenzi yokuhlaziya, ukuhumusha kumanodi e-Chebyshev kunikeza ukuhlangana okusheshayo kwejometri [4]. Lokhu kungcono kakhulu kunokuhlangana okujwayelekile kwe-oda lesine ozokuthola ngokuhunyushwa ku-cubic splines futhi kungcono kakhulu kunokuhlangana kwe-quadratic ozokuthola ngokuhunyushwa okukodwa komugqa. [5]. Ngokufaka phakathi ama-node e-Chebyshev, singakwazi ukunciphisa inani lezikhathi okudingeka sihlole u-f. Isebenzisa i-trust-region optimizer, i-algorithm bese ibheka ijika le-cubic Bézier elicishe lifane nomsebenzi oqondiwe. Uma ibanga elikhulu le-orthogonal phakathi kwejika le-Bézier elifakiwe kanye nochungechunge lwe-Chebyshev luka-f lingaphansi komkhawulo oqondiwe, khona-ke, kuhle, sesiqedile; ngaphandle kwalokho, sihlukanisa isizinda kabili futhi siphinda inqubo. Ngemininingwane ngezinyathelo ezingezansi.

I-algorithm F (hlanganisa indlela ye-Bézier kumsebenzi). Uma kunikezwe umsebenzi wepharamethrikhi u-f

F1. Kusetshenziswa i-algorithm eyakhiwe nguJared Aurentz noLloyd Trefethen kusuka [7]lingana uchungechunge lwe-Chebyshev f~_x , f~_y ukuya ku-f_x, f_y. Uma u-f ehlaziya noma ehlukaniseka ngezinga eliphezulu, ukulingana kuvame ukusondelene nokunemba komshini ngakho ukuya phambili sicabanga ukuthi singasebenzisa u-f~ njengommeleli we-f nokuthi noma yikuphi ukulahlekelwa ngokunemba ngeke kubonakale.

F2. Ukusebenzisa i-trust region optimizer [8] kanye ne-algorithm kaPenner [3]linganisa ijika le-Bezier g ukuze unciphise

Imininingwane eyengeziwe yalesi sinyathelo inikezwe ku-§3.

F3. Bala

Uma u-M engaphansi komkhawulo ohlosiwe, nqamula; kungenjalo, setha

bese uphinda izinyathelo F1 ukuya ku-F3 ze-f_l kanye ne-f_r kuze kufinyelelwe umkhawulo. Bona i-§4 ukuze uthole imininingwane eyengeziwe.

Esigabeni esilandelayo, ngichaza indlela yokuhlanganisa imisebenzi engafanele nge-Algorithm F usebenzisa iphakethe lePython bbai (

2. Uhambo Lokusebenza

Ikhodi engezansi ibonisa umsebenzi oyisisekelo wokufaka umsebenzi efasiteleni elishiwo:

from bbai.graphics import BezierPath
import numpy as np
def f
  return np.exp(-t * t)
path = BezierPath(
     dst_xmin=0, dst_xmax=9.5,
     dst_ymin=0, dst_ymax=2)
path.fit(f, -2, 2)
print(path.tikz_)

imiphumela

draw (0.000, 0.000)..controls (2.684, 0.092) and (3.273, 1.952)
..    (4.750, 2.000)..controls (6.229, 1.951) and (6.815, 0.092)
..    (9.500, 0.000);
I-Gaussian, ilingana namajika amabili e-Bézier. Umfanekiso ngombhali.

Ngokuzenzakalelayo, umtapo wolwazi uzokala isiqephu ukuze umsebenzi uvele ulingane efasiteleni elichazwe ngokuthi dst_xmin, dst_xmax, dst_ymin, kanye ne-dst_ymax; kodwa lokho kungashintshwa ngokucacisa iwindi lomthombo eline-src_xmin, src_xmax, src_ymin, ne-src_ymax. I-algorithm isebenzisa u-1.0 × 10^-2 njengomkhawulo webanga le-orthogonal ozenzakalelayo, okuthi uma ubuka, uyingxenye yekhulu yobubanzi bomugqa omisiwe we-TikZ.

Singakwazi futhi ukufaka imisebenzi yepharamethikhi ngokunikeza kokubili umsebenzi we-x kanye no-ay.

from bbai.graphics import BezierPath
import numpy as np
R, r, d = 5, 3, 5
def fx
  return (R-r)*np.cos
def fy
  return (R-r)*np.sin
path = BezierPath(
    dst_xmin=0, dst_xmax=2.5,
    dst_ymin=0, dst_ymax=2.5)
path.fit(fx, fy, 0, 2*np.pi*r*d/R)
print(path.tikz_)

imiphumela

draw (2.500, 1.250)..controls (2.533, 1.060) and (1.400, 0.745)
..    (0.850, 0.578)..controls (-0.049, 0.321) and (-0.145, 0.403)
..    (0.148, 0.876)..controls (0.197, 0.986) and (1.203, 2.351)
..    (1.405, 2.450)..controls (1.594, 2.564) and (1.722, 2.598)
..    (1.716, 1.250)..controls (1.722, -0.033) and (1.609, -0.085)
..    (1.405, 0.049)..controls (1.203, 0.149) and (0.197, 1.514)
..    (0.149, 1.624)..controls (-0.137, 2.086) and (-0.067, 2.185)
..    (0.851, 1.921)..controls (1.203, 1.809) and (2.534, 1.455)
..    (2.5000, 1.2500);
I-Hypotrochoid, ilingana namajika angu-8 e-Bézier. Umfanekiso ngombhali.

3. I-algorithm yokufaka

Lesi sigaba sihlahlela Isinyathelo F2 ngokuningiliziwe lapho sifana khona ijika le-Bézier, g, ukuze silingane no-f~. I-algorithm ifana ne-algorithm kaPenner kusuka [3] kodwa ngezinguquko ezimbalwa. Ijika le-cubic Bézier lihlukaniswa ngamaphoyinti amane. Ku-algorithm efanelekayo, sifanisa izindawo zokugcina ze-f~ esinikeza amaphuzu amabili noma amapharamitha amane esingawalungisa. Vumela u-θ ukhombise amapharamitha alungisekayo; vumela u-B_θ ubonise ijika le-cubic Bézier elinamapharamitha θ afana namaphoyinti okugcina u-f~(a) kanye no-f~(b); futhi uchaze

I-Basic calculus isitshela ukuthi s_t kumele kube iphoyinti lokugcina noma kufanele yenelise isibalo

Njengoba u-B_θ kuyicubic yepharamitha, amanani ka-s anelisa isibalo ayizimpande ze-quintic engaxazululwa kalula ngokuthola ama-eigenvalues ​​e-matrix yozakwethu ehlobene nayo. [4].

Singasebenzisa i-Clenshaw Curtis quadrature ukuze silinganisele umsebenzi wenhloso

Igradient kanye ne-Hessian ye-h ingabalwa kusetshenziswa ithiyori yokusebenza engacacile. Bheka [3] okwezibalo. Manje sesingakwazi ukuhlanganisa i-algorithm efanelekile.

I-algorithm B (hlanganisa ijika le-Bézier kumsebenzi). Kunikezwe umsebenzi wepharamitha f~

B1. Uma kungenzeka, khetha u-θ_0 ukuze B_{θ_0} ifane nokugoba kuka-f~ kokuthi a kanye no-b; uma kungenjalo, khetha u-θ_0 ukuze B_{θ_0} kube ingxenye yomugqa edlula ku-f(a) kanye no-f(b).

B2. Kusukela ku-θ_0 nokusebenzisa u-h, ∇h, kanye no-∇^2 h, gibela i-trust-region optimizer [8] kuze kube yilapho sesisondele ngokufanelekile kokuhle noma seqe inombolo enkulu enqunywe kusengaphambili yezinyathelo

Inzuzo enkulu yokusebenzisa i-trust-region optimizer yesinyathelo B2 ukuthi ngeke ibhajwe ezindaweni zesihlalo. Ngokusebenzisa ulwazi lwe-oda lesibili oluhlanganiswe “nendawo yokuthembana” eguquguqukayo, isilungiseleli sesifunda sokuthembana sisengakwazi ukwenza inqubekelaphambili ngisho noma okuthi ∇h kuseduze kuziro futhi ∇^2h engapheli.

4. I-Max Distance Algorithm

Lesi sigaba sihlahlela Isinyathelo F3 ngokuningiliziwe lapho kunikezwe ijika le-cubic Bézier, g, sibala ibanga eliphakeme le-orthogonal ukusuka ku-g ukuya ku-f. Nge-s_t echazwe njengokuthi §3, faka

bese uchaza i-algorithm elandelayo:

I-algorithm ye-M (thola ibanga eliphezulu le-orthogonal). Uma kunikezwe umsebenzi wepharamitha u-f~

M1. Setha i-D_max ← 0.

M2. Usebenzisa indlela yokuhlukanisa kabili, qala kusukela kusikhawu [a, b] futhi uthole umkhawulo wendawo ongu-t_0 we-r. Setha i-D_max ← max(D_max, r(t_0)).

M3. Faka u-s_0 ← s_{t_0} bese uvumela u-s_l0′ , s_l0′′ , s_r0′ , kanye no-s_r0′′ asho okuphuma kwesokunxele nakwesokudla kokuthi

Qaphela ukuthi amanani esandleni sobunxele nasesandleni sokudla angase ehluke. Chaza imisebenzi

futhi

M4. Thola okuncane kakhulu okuthi h_l>0 kanye no-h_r>0 kanjalo

Uma u-h_l kanye no-h_r ekhona, phinda Izinyathelo M2 ukuya ku-M4 ukuze [a, t_0 −h_l] futhi [t_0 +h_r,b]. Uma kungenjalo, buyisela u-D_max.

Khumbula kusukela ku-Algorithm F ukuthi i-f~ imelwe njengochungechunge lwe-Chebyshev ngakho-ke kuyisinyathelo esilula ukubala izethulo zochungechunge lwe-Chebyshev lwe-r~_l kanye no-r~_r. Ngakho, Isinyathelo M4 singafezwa ngokusebenzisa i-algorithm yokuthola impande kaBoyd [6].

Isibalo esingezansi sibonisa umphumela we-algorithm yebanga elikhulu lapho uzama ukulingana nomsebenzi f

draw (0.000, 1.800)..controls (4.484, 4.660) and (8.448, -3.442)..(9.500, 1.800);

Siyabona ukuthi noma ngabe kunokuningi kwasendaweni okuhle, i-Algorithm M ikhomba ngokulungile okuhle komhlaba.

Iphutha elikhulu elitholwe i-Algorithm M uma kusondele (.1 + t)sin

5. Indlela Yokukhiqiza Izithombe ze-SVG

Kulesi sigaba, ngizobonisa ukuthi singasikhiqiza kanjani isithombe se-SVG endleleni ye-TikZ ekhiqizwa yi-bbai. Ngizophinde ngibonise ukuthi singadweba kanjani izimbazo futhi sichaze. Enye indlela yokukhiqiza izithombe ze-SVG ukushumeka imiyalo yomdwebo we-TikZ kudokhumenti ye-latex, sebenzisa i-lualatex ngenketho -output-format=dvi, bese usebenzisa i-dvisvgm ukuguqula ifayela le-dvi libe yisithombe se-SVG, njengoba kuchazwe kumanuwali we-TikZ (bona §10.2.4 of [9]). Kodwa-ke, uma inhloso kuwukukhiqiza isithombe se-SVG, ngikuthola kulula ukusebenzisa ithuluzi le-MetaPost elingakhipha ku-SVG ngqo. [10].

I-MetaPost inikeza ulimi lokudweba izithombe. Sisebenzisa umugqa wayo womyalo wensiza i-mpost, okufanele ifakwe njengengxenye yokufakwa kwe-TeX Live, singakhiqiza ngokushesha isakhiwo se-SVG. Yamukela umyalo ofanayo wokudweba izindlela njenge-TikZ. Nansi, ngokwesibonelo, indlela esingakhiqiza ngayo isithombe se-SVG sesakhiwo esivela ku-§1.

% plt.mp
outputformat := "svg";
outputtemplate := "%j-%c.svg";
prologues:=3;
beginfig(1);
draw (0.00000, 2.50000) .. controls (0.39088, 2.10882) and (0.61233, -1.05415) ..
      (1.18750, 0.36510) .. controls (1.60393, 1.31193) and (1.71252, 2.10800) ..
      (2.37500, 0.95127) .. controls (2.88922, 0.15365) and (3.15477, 0.95162) ..
      (3.56250, 1.11921) .. controls (3.98299, 1.31658) and (4.26123, 0.78781) ..
      (4.75000, 0.82415) .. controls (5.02221, 0.81871) and (5.38203, 1.12388) ..
      (5.93750, 0.99939) .. controls (5.96426, 1.01981) and (6.36975, 0.82102) ..
      (7.12500, 0.95127) .. controls (8.08129, 1.04760) and (7.44859, 0.87986) ..
      (9.50000, 0.96171);
endfig;
end.

Isebenzisa umyalo

mpost plt.mp

izokhiqiza i-SVG yendlela njenge-plt-1.svg. Singasebenzisa umcibisholo we-MetaPost wemiyalo kanye nelebula ukwengeza izimbazo. Nansi ikhodi yomthombo ngemva kokukala kabusha nokwengeza izimbazo:

% plt.mp
outputformat := "svg";
outputtemplate := "%j-%c.svg";
prologues:=3;
beginfig(1);
path pth;
pth := (0.00000, 2.50000) .. controls (0.39088, 2.10882) and (0.61233, -1.05415) ..
       (1.18750, 0.36510) .. controls (1.60393, 1.31193) and (1.71252, 2.10800) ..
       (2.37500, 0.95127) .. controls (2.88922, 0.15365) and (3.15477, 0.95162) ..
       (3.56250, 1.11921) .. controls (3.98299, 1.31658) and (4.26123, 0.78781) ..
       (4.75000, 0.82415) .. controls (5.02221, 0.81871) and (5.38203, 1.12388) ..
       (5.93750, 0.99939) .. controls (5.96426, 1.01981) and (6.36975, 0.82102) ..
       (7.12500, 0.95127) .. controls (8.08129, 1.04760) and (7.44859, 0.87986) ..
       (9.50000, 0.96171);
draw pth scaled 50;
numeric xlim, ylim;
xlim := xpart urcorner currentpicture;
ylim := ypart urcorner currentpicture;
drawarrow (-10, -10) -- (xlim, -10);
drawarrow (-10,-10) -- (-10, ylim);
label.bot(btex $x$ etex, (xlim, -10));
label.lft(btex $y$ etex, (-10, ylim));
endfig;
end.
Isibonelo se-SVG esikhiqizwe nge-MetaPost. Umfanekiso ngombhali.

6. Izilinganiso

Kulezi zigaba ngikala ukuthi kungithatha isikhathi esingakanani ukubala izindlela ze-Bezier zemisebenzi ehlukahlukene. Angizange ngichithe isikhathi esiningi ngilungiselela ukusetshenziswa kwe-algorithm ngakho nginesiqiniseko sokuthi lezi zinombolo zingathuthukiswa kakhulu. I-takeaway eyinhloko kufanele kube ukuthi i-algorithm ishesha okungenani ngokwanele ukuze isebenziseke ezimweni eziningi ezivamile. Izibonelo zonke zithathwe kuyo [4]futhi yonke imisebenzi ilingana phezu kobubanzi −1 ≤ t ≤ 1.

Amabhentshimakhi wokulinganisa izindlela ze-Bézier zemisebenzi ehlukahlukene. Umfanekiso ngombhali.

7. Iziphetho

Ngokuhlaziya noma imisebenzi ehlukaniseka ngezinga eliphezulu, sibonile ukuthi i-Algorithm F inikeza indlela ephumelelayo nesebenzayo yokukhiqiza ukumelela okuncane njengendlela ye-Bézier, engase isetshenziselwe ukukhiqiza umfanekiso wevekhtha.

Indawo eyodwa yomsebenzi wesikhathi esizayo kungase kube ukunweba i-algorithm ukuze isebenze kangcono kumisebenzi ngama-kinks (okungukuthi amaphoyinti lapho umsebenzi ungahlaziywa).

Izinkomba kanye namanothi

[1] Ngokwazi kwami, wonke amafomethi amakhulu wezithombe zevekhtha (isb. SVG, postscript) asebenzisa amajika e-cubic Bézier njengawokuqala. Ngenkathi amanye amafomethi ehlinzeka ngezinye ihluzo eziyisisekelo njengemibuthano, njll, lawo wonke ama-wrappers phezulu kwe-cubic curve approximations ye-Bézier.

[2] Isibonelo sithathelwe ku

[3] Alvin Penner. Ukufaka i-cubic Bézier kumsebenzi wepharamitha. I-College Mathematics Journal, 50(3): 185–196, 2019.

[4] Lloyd N. Trefethen. I-approximation theory kanye ne-approximation practice. SIAM, 2020.

[5] IHholo le-CA. Emingceleni yephutha yokuhumusha kwe-spline. Ijenali ye-Approximation Theory, 1: 209–218, 1968.

[6] John Boyd. Ukwenza i-zero ngekhompyutha ngesikhawu sangempela ngokusebenzisa ukunwetshwa kwe-Chebyshev kanye ne-polynomial rootfinding.SIAM Journal on Numerical Analysis, 40(5): 1666–1682, 2003.

[7] Jared Arentz, Lloyd N. Trefethen. Ukuqopha uchungechunge lwe-Chebyshev. I-ACM Transactions ku-Mathematical Software, 43(4): 1–21, 2017.

[8] Jorge Nocedal, Stephen J. Wright. Ukwenza kahle kwezinombolo, uhlelo lwesibili. Springer, 2000.

[9] I-TikZ kanye ne-PGF Packages, 2026.

[10] John D. Hobby, Metapost, 2024.

Source link

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button