admin menu ≫  image  writes  admin
スポンサーサイト 
--.--.--.-- 
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
VBAで○次方程式を解く・・・ 
2009.05.19.Tue 
○次方程式を解く「ニュートン法」のCプログラムコードです。
精々3次方程式まで解ければいいと思いながらも、
長ったらしいコードを使い続けて○○年が経ち↓(^^;

newton( int n, double a[ ], double *x )
{
int i, ic, m;
double ep;
double w, wx, a1, p, q, r, d, dx;

ep = 0.000001;

wx = a[0];
a1 = fabs( wx );

if( a1 == 0.0 || n < 2 || ep <= 0.0 ) return( -1 );

for( i=1; i<=n; i++ ){
w = a[i];
wx += w;
if( a1 < fabs( w ) ) a1 = fabs( w );
}
wx = - wx / ( n + 1 );
for ( ic=1; ic<=100; ic++ ){
p = a[0];
for( i=1; i<=n; i++ )
p = p * wx + a[i];
m = n;
q = m * a[0];
for( i=1; i<n; i++ ){
m--;
q = q * wx + m * a[i];
}
if( q == 0.0 ){
m = n;
r = m * ( n - 1 ) * a[0];
for( i=1; i<(n-1); i++ ){
m--;
r = r * wx + m * ( m - 1 ) * a[i];
}
d = p * ( p - 2.0 * r );
if( d > 0.0 ){
w = sqrt( d );
if( q >= 0.0 )
dx = 2.0 * p / ( - q - w );
else
dx = 2.0 * p / ( - q + w );
}
else
dx = - q / p;
}
else
dx = - p / q;
wx += dx;
if( ( fabs( dx ) / a1 ) <= ep ){
*x = wx;
return( 0 );
}
}
*x = wx;
return( 0 );
}

今日、↑をVBAに移植したけど・・・?待てよ
ネット検索すればもっと簡単なプログラムコードが見つかるかもしれない!?
でもって、やっぱありましたぁ??!!「a*x^3+b*x^2+c*x+d=0」の3次方程式限定だけど
充分使えまぁ??す(^^v

Function NewTon#(xn#()) 'VBA
Const ep = 0.0000001
Dim a#, b#, c#, xo#, x1#
xo = 0
Do
a = xn(0) * xo * xo * xo + xn(1) * xo * xo + xn(2) * xo + xn(3)
b = 3 * xn(0) * xo * xo + 2 * xn(1) * xo + xn(2)
x1 = xo - a / b
c = Abs(x1 - xo)
xo = x1
If c < ep Then Exit Do
Loop
NewTon = xo
End Function


関連記事
スポンサーサイト
* スポンサーサイトVBAで○次方程式を解く・・・へのコメント *
   

台風画報


ナショジオニュース

降水短時間予報

RSSフィード

月別アーカイブ

ブログ内の検索

プロフィール


  • Designed by Il mio diario
  • Powered by FC2BLOG
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。