2017-03-10 4 views
0
(%i2) x : expand(cosh(1)*sqrt(3+5*t)); 
(%o2)      cosh(1) sqrt(5 t + 3) 
(%i3) expand(float(x)); 
                0.5 
(%o3)     1.543080634815244 (5.0 t + 3.0) 

どのようにしてプリファクタをラジカルに組み込むことができますか?私はこれらのような小さな、これは大したことではありませんが、数値的評価にMaximaは非常に大きな分母を伴うことが合理的な近似値を代入する傾向があるとして、この場合には番号についてMaximaの急進的な数値にprefactorを組み込む方法は?

            0.5 
(%o3)     (11.90548922 t + 7.143293537) 

のようなものを生み出す何かを探しています、前置素子が(6.35324353×10 -23のような)非常に小さい数であり、平方根内の数字が(5212548545863256475196584785455844385452665612552468のような)非常に大きな数である式で終わるので、結果の大きさの順番は次のとおりです。

答えて

0

パターンマッチングを使用するソリューションは次のとおりです。

(%i1) matchdeclare (cc, numberp, [bb, aa], all) $ 
(%i2) defrule (r1f, cc*bb^0.5, foof(cc,bb)); 
           0.5 
(%o2)     r1f : bb cc -> foof(cc, bb) 
(%i3) defrule (r2f, aa*cc*bb^0.5, aa*foof(cc,bb)); 
           0.5 
(%o3)    r2f : aa bb cc -> aa foof(cc, bb) 
(%i4) foof(a,b):= (expand(a^2*b))^0.5 $ 
(%i5) apply1 (1.543080634815244*(5.0*t + 3.0)^0.5, r1f, r2f); 
                  0.5 
(%o5)   (11.90548922770908 t + 7.143293536625449) 
(%i6) apply1 (1.543080634815244*x*y*(5.0*t + 3.0)^0.5, r1f, r2f); 
                 0.5 
(%o6)   (11.90548922770908 t + 7.143293536625449) x y 
(%i7) apply1 (1/(1 + 345.43*(2.23e-2*u + 8.3e-4)^0.5), r1f, r2f); 
             1 
(%o7)   -------------------------------------------- 
                 0.5 
       (2660.87803327 u + 99.03716446700001) + 1 

それは、適切なルールr1fr2fを把握するために、いくつかの実験をしました。これらのルールは...^0.5と一致しますが、sqrt(...)(つまり、指数= 0.5ではなく1/2)と一致します。もちろん、sqrt(...)と一致させたい場合は、追加ルールを作成することができます。

あなたのために働くことが保証されていません - ルールが多すぎたり少なすぎたりする可能性があります。とにかく試してみる価値がある。

関連する問題