विजुअल स्टूडियो 2008 के साथ C ++ लगातार सन्निकटन एल्गोरिथ्म को लागू करने के साथ समस्या

वोट
0

मैं एक एल्गोरिथ्म हम संख्यात्मक तरीके वर्ग में किया था लागू करने के लिए कोशिश कर रहा हूँ। मैं मेपल में लिखा एक समान प्रक्रिया है और यह ठीक काम करता है। मैं नहीं समझ सकता क्यों यह सी ++ में काम नहीं कर रहा है।

कोई मदद या सुझाव के सराहना की होगी; अग्रिम में धन्यवाद।

#include stdafx.h
#include math.h
#include <iostream>

using namespace std;

double absval(double val)
{
   if (val >= 0) return val;
   else return -val;
}
double G(double x)
{
   double g;

   g = 1/((x*x)+12);
   return g;
}
int main()
{
double c = 0.011834; /* constant */
double eps = 0.00001; /* precision */
double x0 = 0; /* initial aproximation */
double x1,x2,c1;
int i,no;
i = 1;

cout << enter max nr of iterations ;
cin >> no; 

x1 = x0;
x2 = G(x1);
c1 = (1-c)*eps/c;

while (absval(x1-x0) > c1)
{
    i = i+1;
    x1 = x2;
    x2 = G(x1);

}
cout << x2;
if (i<no) cout <<  solution found in allowed nr of iterations ;
else cout << allowed nr of iterations surpassed ;

}

कोड चलाने जब यह पुनरावृत्तियों की अनुमत संख्या के लिए और डालने कि यह बंद कर देता है के बाद पूछता है।

11/01/2010 को 16:36
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

मैं इसे करने की कोशिश की और यह काम करता है।

0.0833333 solution found in allowed nr of iterations

संपादित करें (रों) :

आप डिजाइन बदलने के लिए इतना है कि यह जाँच करता है चाहते हो सकता है iबजाय इंतजार कर रहे है जब तक यह जवाब है की पाश के आसपास हर बार हालांकि,। यह है के रूप में, अगर यात्रा diverges इसे हमेशा के लिए जा सकते हैं।

हाँ, ओह, और के रूप में Moonshadow कहते पाश दर्ज नहीं है: डी

मुझे लगता है कि आप गलत चीजों की तुलना कर रहे? यह अधिकार (परीक्षण x1-x2, x 1-x0 के बजाय) है:

...

do 
{
    x1 = x2;
    x2 = G(x1);
} while (i++ < no && absval(x1-x2) > c1);


cout << x2 << endl;
if (i<no) cout << " solution found in allowed nr of iterations " << endl;
else cout << "allowed nr of iterations surpassed " << endl;


cout << "Press enter to exit." << endl;
cin.get();
11/01/2010 को 16:42
का स्रोत उपयोगकर्ता

वोट
7
double x0 = 0; /* initial aproximation */
.
.
x1 = x0;
.
.
while (absval(x1-x0) > c1)

इस बिंदु पर, x1 == x0और c1सकारात्मक है, तो पाश शरीर में प्रवेश किया कभी नहीं है; यह शायद तुम क्या इरादा नहीं है।

11/01/2010 को 16:45
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more