「ニュートン法」の編集履歴(バックアップ)一覧はこちら

ニュートン法」(2005/11/07 (月) 06:34:44) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<dl> <dt>332 :<font color="green"><b>デフォルトの名無しさん</b> ◆.bx/RmFBek</font>:2005/11/06(日) 20:22:35</dt> <dd>おねがいします。<br> [1]数値解析<br> [2]3sin(x)+ln(x)=0<br> を ニュートン・ラフトン法によって、xを導け<br> [3]WindowsXP , lcc ,C言語<br> [4]11/8までの宿題</dd> <dt>334 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a> :2005/11/06(日) 21:26:01</dt> <dd>#include &lt;stdio.h&gt;<br> #include &lt;math.h&gt;<br> <br> double func(double x);<br> double funcd(double x);<br> double neuton(double x);<br> int main(void)<br> {<br> double x = 4.0;<br> int i;<br> for(i=0;i&lt;100;i++){<br> printf("%e\n",x);<br> x = neuton(x);<br> if(x == neuton(x))break;<br> }<br> printf("[x] = %lf",func(x));<br> return 0;<br> }<br> <br> double func(double x)<br> {return (3*sin(x)+log(x));}<br> double funcd(double x)<br> {return (3*cos(x)+1/x);}<br> double neuton(double x)<br> {return (x-func(x)/funcd(x));}<br> <br> ニュートン法ならこれで、xに近い点にある解が求まる<br> ラフトンてのはシラネ</dd> <dt>338 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a> :2005/11/06(日) 21:36:35</dt> <dd>#include &lt;stdio.h&gt;<br> #include &lt;math.h&gt;<br> #include &lt;string.h&gt;<br> <br> double func(double x);<br> double funcd(double x);<br> double neuton(double x);<br> int main(int argc,char** argv)<br> {<br> double _t = 3.0;<br> int i;<br> for(i=0;i&lt;100;i++){<br> _t = neuton(_t);<br> if(func(_t)==0.0)break;<br> }<br> printf("func(%lf) = 0.0",_t);<br> return 0;<br> }<br> <br> double func(double x)<br> {return (3*sin(x)+log(x));}<br> double funcd(double x)<br> {return (3*cos(x)+1/x);}<br> double neuton(double x)<br> {return (x-func(x)/funcd(x));}<br> <br> ちょっと変更</dd> <dt>341 :<font color="green"><b>332</b> ◆.bx/RmFBek</font>:2005/11/06(日) 21:58:32</dt> <dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/334" target= "_blank">&gt;&gt;334</a><br> 本当にありがとうございます。ただ、よければwhile文で<br> 精度まで分かるように プログラムできませんか?<br> 0.1 ,0.01 ,0.001 ,0.0001 ,0.00001 ,0.000001 の精度で<br> 繰り返し回数 まで出るようにしたいのです。</dd> <dt>344 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a> :2005/11/06(日) 22:07:51</dt> <dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/341" target= "_blank">&gt;&gt;341</a><br> いや、精度の意味がわかんね<br> ニュートン法自体理解してないんじゃないか?<br> <br> 繰り返し回数はi自体が繰り返し回数だよ</dd> <dt>348 :<font color="green"><b>341</b> ◆.bx/RmFBek</font>:2005/11/06(日) 22:21:23</dt> <dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/344" target= "_blank">&gt;&gt;344</a><br> 344の場合は繰り返し回数によってxの精度が変わっていますが<br> (繰り返し回数を多くすることで答えの精度が上がる)、<br> 今回はあらかじめ精度を決めて 何回繰り返したらその精度に<br> 達するか というプログラムを作成したいのです。<br> 下に書くプログラムは 今回の問題とはちがいますけど<br> 「x=5sin(x)」をみたすxの値を 求めたものです。<br> #include &lt;stdio.h&gt;<br> #include &lt;math.h&gt;<br> float f(float x);<br> float g(float g);<br> float main()<br> {<br> float a,b,c=4.0,h=0.01;<br> int k=0;<br> while(fabs(f(c))&gt;10e-6){<br> k++;<br> b=c+h;<br> a=(f(b)-f(c))/h;<br> c=c-f(c)/a;<br> }<br> printf("%f\n",c);<br> printf("\n%d",k);<br> }<br> float f(float x){<br> return(x+5*sin(x));<br> <br> }</dd> <dt>349 :<font color="green"><b>デフォルトの名無しさん</b></font> :2005/11/06(日) 22:26:38</dt> <dd>double epsilon = 0.1;<br> ってやっといて<br> &gt;if(x == neuton(x))break;<br> これを<br> if( fabs(x - neuton(x)) &gt;= episilon ) break;<br> にして<br> &gt;printf("[x] = %lf",func(x));<br> これを<br> printf("[x] = %lf [loops] = %d",func(x) , i);<br> <br> 動くかどうかはしらね。</dd> <dt>354 :<font color="green"><b>デフォルトの名無しさん</b></font> :2005/11/06(日) 22:38:43</dt> <dd>349<br> if( fabs(x - neuton(x)) &lt;= episilon ) break;<br> <br> 「誤差量がep以下になったら」breakする。<br> <br></dd> <dt>355 :<font color="green"><b>348</b> ◆.bx/RmFBek</font>:2005/11/06(日) 22:45:03</dt> <dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/354" target= "_blank">&gt;&gt;354</a><br> なぜか[loops]の値が0になるのですけど・・・</dd> <dt>357 :<font color="green"><b>デフォルトの名無しさん</b></font> :2005/11/06(日) 22:46:55</dt> <dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/355" target= "_blank">&gt;&gt;355</a> 条件文間違ってる。これだと最初の一回しか処理しない。<br> <a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/354" target= "_blank">&gt;&gt;354</a><br></dd> <dt>359 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a> :2005/11/06(日) 22:47:16</dt> <dd>#include &lt;stdio.h&gt;<br> #include &lt;math.h&gt;<br> <br> #define ACC 1e-3<br> <br> double func(double x);<br> double funcd(double x);<br> double neuton(double x);<br> int main(int argc,char** argv)<br> {<br> printf("%d回", get_acc(12.0,ACC));<br> }<br> int get_acc(double _x, double acc){<br> int i=0;double x=_x;<br> printf("%lf\n",x);<br> while(fabs(neuton(x)-x)&gt;acc){<br> x=neuton(x);i++;<br> printf("%lf\n",x);<br> }<br> printf("func(%lf)=%lf\n",x,func(x));<br> return i;<br> }<br> <br> double func(double x)<br> {return (3*sin(x)+log(x));}<br> double funcd(double x)<br> {return (3*cos(x)+1/x);}<br> double neuton(double x)<br> {return (x-func(x)/funcd(x));}<br> <br> こういうこと?</dd> <dd><br></dd> </dl>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー