zeroieme 发表于 2016-3-25 19:25:35

和为定值的实数有理化

假设r_1,r_2,......+r_n, 有r_1+r_2......+r_n=1, 令它们有理化后保持和为1
两个数可以辗转相除,数量超过2呢?觉得简单按误差要求取舍粗暴了点。

顺便编的例子 ,求Pi/A , E/A,sqrt(2)/A,sqrt(3)/A,sqrt(4)/A的有理化。其中:A=Pi+E+sqrt(2)+sqrt(3)+sqrt(5)
有理化要求 1 绝对对误差小于10^-6的时候,通分后分母最小;2 相对误差小于10^-5的时候,通分后分母最小



引申问题n个实数平方和为定值呢?两个数的以前问过,用半角正切公式。感谢mathe

zeroieme 发表于 2016-3-25 19:26:53

我想过分治,也想过引入误差变量的辗转求余

mathe 发表于 2016-3-26 06:27:42

这个属于整数规划问题,有现成线性规划软件可以解决类似问题

zeroieme 发表于 2016-3-26 13:19:56

mathe 发表于 2016-3-26 06:27
这个属于整数规划问题,有现成线性规划软件可以解决类似问题

一般是O(?)的,算一上午了。如果线性规划几百来个变量少于一千,几秒的事情。

zeroieme 发表于 2016-6-12 20:19:08

当和不为1时因为牵涉约分,辗转求余不理想。而且明显不是线性问题。
谁有兴趣试试这个例子:
求a=0.002160483553604424025466442893759450341952916788852534829548668018164395400194020041504253671686684975376208489894167343486367024390700133011865043740441751584535540617163806377211970275852147451611023737408426155009466123663075374240493556528971599411210331909389518713388078707578357549750740048310274571668632518013615441586731455004590795172403261317725275734004540351910099258778481356159938574097094895687457703893582322
和b=0.01306074016368030957271473949603132954370417817796134146637873808649896775274163004224142719229217280391805410850457780161346157287858109623291155029974121831821002791358921084771688775752984110219201577157852963209093423824414072735472956465102657823170535938081566529328492563538472408106975859567099947999449259798213251269319494178952556754543502525338626598940582399086886756995552823678253849687796170773456397506413560

的近似分数。误差小于±5*10^-13,而且和近似分数和为354/23257。
让两近似分数分母之和尽量小。

补充内容 (2016-6-15 21:01):
两数字的例子不显著,换个6数字的

补充内容 (2016-6-15 21:01):
两数字的例子不显著,换个6数字的

补充内容 (2016-6-15 21:01):
两数字的例子不显著,换个6数字的

zeroieme 发表于 2016-6-15 21:08:08

同样是小于±5*10^-13,近似分数和为354/23257。
2.146601303690269523108129560481048099805209868141325528319157949621695162763447562040907303878910296901365467863151184297239927671908975917344894381922980722394230957222169909659122468614154512308285703062121106381361738850898759631457248885978885778869783729298909877647010680237850001275384502575043652031434630723267296981385009144492637164719585470068073952549076893614744350730909445020989843921601639199847925585150406*10^-7,0.0003619164140035311295571020306619870823170599896692444158138197210617661754609841313411214025137977572867314338983457313251338760651445226673748112724167602372577691028993879309412291200687784731047207378955930662921727107006615160083254944224777799303185632403887615770040525340946777895452116839982265466225499465872330039917651135461083853911943250891896926668993608045726865301184174897295104349726140831683311001757533202,0.0005224640484322513503750582971483376678724849111951379834855797478933075944804425614584532884025782266415426769751949425157292966025307439849542816644007349698286815864595535443779152491598465891128348243980197054910956706516786206226693029972132319427139763959295554648540615088777670778928139309327073457212684120566204868092104040542644333988299366670889780959433816855569293391938150181506150716316063212014238863662483420,0.001798352479470523868957030050141415154825876278196476281182016381307667055216759565406928178442499327059786919449035297042803424332788419446898497978586799049205532091168696229279775243536507563055072170942526876606655276788528768356204916381605221592313881690627827245396261472415655975205400825861790520680879427963310110865268202957567960517492464269988576259709924639648051254224990775485926040140088652355206618925270487,0.002365632747847829439365803393902477128947322036877360035317471328280955576577448664120628353103117418229342086687475320116056466270765766632961415661415358496409468076651893606410905385921897455936771242569714423956732255568546699762395093632007379075308203627721739737422689560935668892228701526947815621788008343679275293427035782127860528056707447932197008269723855126802583414773816873046547377188702670155545872830197253,0.01017264336740022878297387780498051474688437122988884344757568701032470458168373881666234555078647715904716934484190753898167581000528458561499585297392512485197187825047776369692806712244809705714240970461079550264310631202391540696966516802180596721368317935716437009100817456557128811094824313779047651248521584224623673245694875560740060608989764065410027962373858717850935481598789634558537604805765271637759421586769001

若假设同一分母作整数规划,得18617/86727818242,31388221/86727818242,45312167/86727818242,155967187/86727818242,205166167/86727818242,882251165/86727818242;
而分治之后,得18337/85423588939,30916199/85423588939,38892980/74441447483,153621723/85423588939,176101126/74441447483,757266297/74441447483。这是更好的结果。
而为6个分数设各自的未知数,是6次方程,我家机器已经算不动了。而这是500个数分割出来的一小块。5楼其实是这里分治的基础。

zeroieme 发表于 2016-8-3 01:51:54

折腾了这么久,结果还是不满意。我上传数据出来看谁有兴趣试一下。


这是人眼三色刺激值数据,XYZ三色每色一个文件。文件内每行有两个数,代表 a±b 形式的数值和容许误差。
想把每色的数据转化为分数形式,分数在容许误差以内以及总和为1的前提下,使分子的乘积最小。
页: [1]
查看完整版本: 和为定值的实数有理化