投稿者 スレッド: 旧掲示板データ  (Read 71731 times)

中島 和雄

  • ゲスト
[1823] RE[1801]RE[1822]有難うございます 
« Reply #30 投稿日:: 2013年 2月 27日 , 午後 01:21:00 »
Randomizeの件ですが理解できました。
後続の数値の省略でしか使っていなくて、それに囚われていました。お騒がせして、申し訳ありません。

maximaは福袋で教わり別件で使ったことがありました。
これから、お示しのことを、なぞりたいと思います。
そして明らかになっている、4次方程式の公式へのクライムをしてみたいです。
SLOVE( )については、内部で最適解をサーチしていると考えるのは違っていますか。
WEBで、3モーメントの定理、スプライン曲線式、交わるはずの2直線の再接近点の解の公式等で、考え方と成り行きの説明だけで、公式の形での"お宝"は中々ありません。私の我儘ですが。
お忙しいのに、お煩わせで、済みませんでした。
« Last Edit: 2013年 9月 15日 , 午後 01:24:57 by takeuchi »

takeuchi

  • 管理人
  • *****
  • 投稿: 96
[1822] 解の公式はあります。 
« Reply #31 投稿日:: 2013年 2月 25日 , 午後 07:51:00 »
中島様

[1819]の訂正です。


> ④f(X)=0(fは8次多項式)
> はかなり複雑な式で,代数的に解けるようには私には思えません。
> (勿論確証はありません。私の感覚でそう感じるだけですから,
>間違っているかもしれません。)

上の感覚は,実際,間違っていました。<m(__)m>

f(X)を具体的によく見ると,確かに8次式ですが,出てくるXは
X^2,X^4,X^6,X^8しかありませんでした。ですから,X^2の方程式
と見ると,実質4次式です。4次方程式は解の公式がありますから,
解けるということになります。

ただ,かなり複雑ですから,この4次方程式を実際に解くのは中々
難しいでしょう。


結論は

■④f(X)=0は解の公式があります。ただ,かなり複雑です。

具体的にこの公式を求めるのは,根気の問題になるかもしれません。

計算結果自体は長すぎて,ここに具体的な式を書くのは不適ですが,
一応,maximaでの計算を載せておきます。これを実行すれば結果が出てきます。
(勿論 Mathematicaでも可能でしょう。)

maxima でf(X)を具体的に求める方法。

f(x,y):=x^2+y^2-2*x*y*a-A2;
g(y,z):=y^2+z^2-2*y*z*b-B2;
h(z,x):=x^2+z^2-2*x*z*c-C2;
r1:resultant(f(x,y),g(y,z),y);
r2:resultant(r1,h(z,x),z);
ratsimp(r2,x);


上は終結式を使っていますが,素朴に代入しても同じ結果がでます。


f(x,y):=x^2+y^2-2*x*y*a-A2;
g(y,z):=y^2+z^2-2*y*z*b-B2;
h(z,x):=x^2+z^2-2*x*z*c-C2;
solve(f(x,y)=0,y);
y1:a*x-sqrt(A2+(a^2-1)*x^2);
y2:sqrt(A2+(a^2-1)*x^2)+a*x;
g11(z,x):=g(y1,z);
g12(z,x):=g(y2,z);

solve(g11(z,x)=0,z);
z1:-sqrt(B2+(2*a-2*a*b^2)*x*sqrt(A2+(a^2-1)*x^2)+(b^2-1)*A2+((2*a^2-1)*b^2-2*a^2+1)*x^2)-b*sqrt(A2+(a^2-1)*x^2)+a*b*x;
z2:sqrt(B2+(2*a-2*a*b^2)*x*sqrt(A2+(a^2-1)*x^2)+(b^2-1)*A2+((2*a^2-1)*b^2-2*a^2+1)*x^2)-b*sqrt(A2+(a^2-1)*x^2)+a*b*x;

solve(g12(z,x)=0,z);
z3:-sqrt(B2+(2*a*b^2-2*a)*x*sqrt(A2+(a^2-1)*x^2)+(b^2-1)*A2+((2*a^2-1)*b^2-2*a^2+1)*x^2)+b*sqrt(A2+(a^2-1)*x^2)+a*b*x;
z4:sqrt(B2+(2*a*b^2-2*a)*x*sqrt(A2+(a^2-1)*x^2)+(b^2-1)*A2+((2*a^2-1)*b^2-2*a^2+1)*x^2)+b*sqrt(A2+(a^2-1)*x^2)+a*b*x;

EX:h(z1,x)*h(z2,x)*h(z3,x)*h(z4,x);
ratsimp(expand(EX),x);

takeuchi

  • 管理人
  • *****
  • 投稿: 96
[1821]:Re[1820]: RE[1819]有難うございます。
« Reply #32 投稿日:: 2013年 2月 25日 , 午後 07:49:00 »
> ひょっとしたら可能かなとも思っていました。

 その通りでした。これについては分けて書きます。


> 乱数利用の場合の、RANDOMIZEの動作を、種まき共に、自動で(キー入力無しで)させる方法はあるでしょうか。

 意味が良く分からないの外しているかもしれませんが,

Randomize

は内蔵時計でランダム化してますし,

Randomize N

でNがシードになります。適当なタイミングでNを適当な方法,RNDや時計などで
設定すれば良いのではと思いますが。外してますか。

中島 和雄

  • ゲスト
[1820]:RE[1819]有難うございます。
« Reply #33 投稿日:: 2013年 2月 25日 , 午前 01:21:00 »
丁寧にお教え下さり、大変有難うございます。
5次以上では、一般的に解く方法が無いとは、読み知ってはおりましたが、・・・・・。
3DCadでは、立体の減算ができるので、解いて動作させているのかと、思っていました。
高次方程式でも、因数定理を拡張し、整数以外を代入し、ゼロ近接させ、次数を減らせば、複素数解も含め、ひょっとしたら可能かなとも思っていました。

乱数利用の場合の、RANDOMIZEの動作を、種まき共に、自動で(キー入力無しで)させる方法はあるでしょうか。(PRINT CHR$(13)等を使って)。精度と不連続性に起因する、未収束を解消するために乱数の系列を変える為です。
代入数値を片押しで、進めた場合は、飛ばしていってしまうことが多いようです。
乱数利用でBASIC/98の場合、普通で10秒ぐらいで、10桁精度までできます。倍精度いっぱいまで辿り着けます。
Tiny Basicですと、1秒未満でできると思います。

有難うございました。

takeuchi

  • 管理人
  • *****
  • 投稿: 96
[1819]:Re[1816]: 範囲外のお願いですが
« Reply #34 投稿日:: 2013年 2月 24日 , 午後 07:12:00 »
> は可能でしょうか。


ヘルプファイルはTBasicフォルダーにあるBTutor.chmとTBWHelp.chmです。
ただ,XPではchmファイルは読めないかもしれません。
古い版Ver. 1.15bではXPでも標準的に読める HLP形式ファイルが含まれています。
もし,TBWHelp.chmが読めない場合は,Ver. 1.15bに含まれている
TBW.HLPをお試しください。

けんけん

  • ゲスト
[1769]:Re[1767][1766]: 数字の表示
« Reply #35 投稿日:: 2012年 11月 24日 , 午後 09:59:00 »
了解しました。
ご回答ありがとうございます。

Okada. K.

  • ゲスト
[1768]:
« Reply #36 投稿日:: 2012年 11月 24日 , 午後 08:29:00 »
英語版XPで使い始めたのですが、どういうわけか、ヘルプにアクセスできません。

このファイル単体のダウンロードは可能でしょうか。

takeuchi

  • 管理人
  • *****
  • 投稿: 96
[1767]:Re[1766]: 数字の表示
« Reply #37 投稿日:: 2012年 11月 24日 , 午後 05:49:00 »
こんにちは

> 今度は、PRINT 入力するときに、数字のべき乗や
> 分数を普通に表示するにはどうすればできますか?

 少し意味が不明なのところがあるのでもしかしたら外した回答に
なるかも知れませんが,一応書きます。

(1) 数字のべき乗の表示について
TBasicで扱う数値は浮動小数点型数です。この型の数は内部的的には
1.010101*2^(2)
のように2進数で表現されますが,Print文などで表示する場合は10進
表記に変換されます。(浮動小数点数については,
http://www2.cc.niigata-u.ac.jp/‾takeuchi/tbasic/BackGround/Float.html
に説明がありますので,必要なら参照してください。)
例えば今の場合
5.3125
表示されます。普通の大きさの数はこのような表示をされますが,非常に
大きい数や,小さい数は指数表示と言われる方法で表されます。
例えば,
12345*10^20
のような数は
1234500000000000000000000
ですし,
12345*10^(-20)
のような数は
0.00000000000000012345
ですが,これらはそれぞれ,Printでの表示は
1.2345E24
1.2345E-16
となります。これらのものを
1234500000000000000000000

12345*10^20
1.2345*10^24
のように表示させることはTBasicでの機能としては持っていませんが,
プログラムを書けば可能です。
1.2345*10^24
のような表示はEを*10^と書き換えれば良いだけですから簡単です。
A=1.2345E24
Print Replace$(Str$(A),"E","*10^")
で実現されます。
12345*10^20
のような表示等をするには多少プログラミングをしないといけません。
例えば,
A=1.2345e24
P$=Trim$(Str$(A))
Spt=InStr(1,P$,"E")
If Spt>0 then
  P$=Left$(P$,1)+Mid$(P$,3,Spt-3)+"*10^"+Trim$(Str$(Val(Right$(P$,Len(P$)-Spt))+Spt-3))
End If
Print P$
な感じです。面倒です。

このようにプログラミングをすれば本来備わっていない機能を追加することができます。
これがプログラミングの醍醐味ですが,本質的でない問題は余りこだわらないで,
備わっている機能を利用するというのも一つの見識です。

(2) 分数について
TBasic では数値は浮動小数点型のみ扱いますので,分数と言うものは
ありません。ですから,数を分数の形にPrint することはできません。
勿論,2/3 のようなものをPrint することはできますが,それは分数と言うより,
文字列としてものです。
Print "2/3"
で可能です。でもこれは期待しているものではないでしょう。
分母が,3で分子が2である数を
A=2/3
としてしまうと,Aの中身は分数でなくそれを小数展開したものとして保持します。
ですから,このとき,
Print A
とすれば,
0.666666666666666667
と表示されます。
2/3 から0.666666666666666667への変換は,自動的ですが,この変換は近似
小数への変換ですから元に戻すことはできません。実際,例えば
2/3と0.666666666666666667は異なる値ですから,戻しようがありません。
プログラムの中で特別な数を定義して,例えば,配列A(1),A(2)を用意して
A(1)に分子,A(2)に分母を格納して,それらの組で分数を表すことにすれば,
例えば,A(1)=2, A(2)=3 に対して,
Print A(1);"/";A(2)
として,2/ 3 と表示することはできます。
TBasic での分数の表示はこのような何らかのプログラムで処理をしたものでないと
普通に表すことはできません。


けんけん

  • ゲスト
[1766]:数字の表示
« Reply #38 投稿日:: 2012年 11月 23日 , 午前 10:10:00 »
何回も質問に答えて頂いて、助かります。
今度は、PRINT 入力するときに、数字のべき乗や
分数を普通に表示するにはどうすればできますか?

いろいろ調べましたが、無理です。
入力は、IMEでバージョン10、OSはWINDOWS7です。

けんけん

  • ゲスト
[1761]:治りました
« Reply #39 投稿日:: 2012年 11月 01日 , 午前 12:18:00 »
旧バージョンのベーシックを再インストールし、iniファイル
が作成されたら正常になりました。

アドバイスありがとうございます!

takeuchi

  • 管理人
  • *****
  • 投稿: 96
[1760]:Re[1759]: 続き
« Reply #40 投稿日:: 2012年 10月 31日 , 午前 12:47:00 »
> 状況依存型ヘルプがインストールされていませんというメッセージがでます。
>

 新バージョンで起きたものでしょうか。それとも,今迄使っていたバージョン
で起きたものでしょうか。いずれにしても次を確認してください。
・ヘルプ単独で起動できるか確認してください。
 (TBasicフォルダーの中にあるTBWHelp.chmです。これをダブルクリックして
  起動してください。)
・これが起動できなければ,ファイルの破損です。再インストールしてください。
・単独で起動できて,TBから起動できない場合は,TBのiniファイルが破損した
 可能性があります。同じフォルダにある TBasic.iniを別のフォルダに移動して,
 TBを起動し直してから,TBから起動してみてください。
・TBasicフォルダーの中にTBasic.exeとTBWHelp.chmがあり,TBasic.iniが無い状況で
 それでも ヘルプが呼べなければ,何らかのシステム破損です。その場合,
 TBを別のフォルダにインストールして試してみてください。
・それでもだめで,インストールしたものが,新バージョンなら,旧バージョン
 で試してみてください。

・新旧バージョンで再インストールしても,いずれもうまくいかない場合は,
 TBの問題ではなく,PCに何らかの問題が起きた可能性があります。


けんけん

  • ゲスト
[1759]:続き
« Reply #41 投稿日:: 2012年 10月 30日 , 午後 11:21:00 »
状況依存型ヘルプがインストールされていませんというメッセージがでます。

けんけん

  • ゲスト
[1758]:ヘルプ機能が使えません
« Reply #42 投稿日:: 2012年 10月 30日 , 午後 11:13:00 »
急にヘルプ機能が使えなくなりました。あと、BASIC入門も見れなくなりました。原因がわかりません。不便です。
何とかなりませんか?

takeuchi

  • 管理人
  • *****
  • 投稿: 96
[1757]:久しぶりの更新
« Reply #43 投稿日:: 2012年 10月 20日 , 午後 07:28:00 »
いくつかの不具合を修正した, Ver. 1.231 を公開しました。
この掲示板等で指摘されたものは修正したつもりですが,もし不具合がありましたらご指摘ください。

ver. 番号が飛んでいるのは,実は公開はしませんでしたが,途中の修正した ver.番号のものもあるからです。

リードオンリーファイルに対するFileLen の不具合も修正しました。

けんけん

  • ゲスト
[1756]:Re[1753]: Integer.tbtについて
« Reply #44 投稿日:: 2012年 10月 13日 , 午前 06:48:00 »
> プログラムの背景項目にある、Integr.Tbtのプログラムが見当たりません。Bin.tbtはありますが、どこに存在するのですか?
>
>
わかりました。ありがとうございます。