সংখ্যার একীকরণ - NaNs পরিচালনা (সি / ফোর্টরান)


12

আমি একটি জটিল ইন্টিগ্রাল নিয়ে কাজ করছি যা শূন্যের কাছাকাছি নির্দিষ্ট মানগুলিতে NaN গুলি প্রদর্শন করে এবং এই মুহূর্তে আমি তাদের সাথে বেশ কুরুচিপূর্ণভাবে একটি ইসনান বিবৃতি ব্যবহার করছি যা ঘটনার সময় শূন্যের সাথে সংহতকরণ নির্ধারণ করে। আমি এটি ফরটারনে এনএমএস লাইব্রেরি দিয়ে (কিউ 1 ডি রুটিন - কিউ 1 ড্যাক্স আলাদা নয়) এবং সিতে জিএসএল লাইব্রেরি সহ (কিউএজিএস রুটিন ব্যবহার করে) চেষ্টা করেছি।

আমি সিকোয়াএডি (সি এর জন্য জিএসএল লাইব্রেরির অংশ) সন্ধান করলাম যা বিশেষত এনএনএন এবং আইএনএফকে সংহতকরণের জন্য ডিজাইন করা হয়েছে তবে রেফারেন্সে খুব কম দরকারী তথ্য আছে এবং অনলাইনে খুঁজে পাওয়া যায় নি এমন কোনও উদাহরণ প্রোগ্রাম নেই। কাজটি করতে পারে এমন সি বা ফরটারনের জন্য যে কেউ সংখ্যার একীকরণের রুটিন জানেন?



That আমি পোস্টটি মুছে ফেলেছি।
জোশ

উত্তর:


10

আমি CQUADজিএসএলে লেখক । ইন্টারফেসটি প্রায় একইরকম QAGS, সুতরাং আপনি যদি পরবর্তীটি ব্যবহার করেন তবে পূর্বেরটি চেষ্টা করা মোটেও অসুবিধা হবে না। কেবল মনে রাখবেন যে আপনার NaNগুলি এবং Infগুলিগুলিকে একীকরণে জিরোতে রূপান্তর করবেন না - কোডগুলি এগুলি নিজেই মোকাবেলা করবে।

রুটিন নামেও অক্টেভ পাওয়া যায় quadcc, এবং মতলব মধ্যে এখানে

আপনি যে ইন্টিগ্রেন্ডগুলির সাথে কাজ করছেন তার উদাহরণ সরবরাহ করতে পারেন?

হালনাগাদ

এখানে CQUADশেষ বিন্দুগুলির একটিতে এককতার সাথে একটি ফাংশন সংহত করতে ব্যবহার করার উদাহরণ রয়েছে :

#include <stdio.h>
#include <gsl/gsl_integration.h>

/* Our test integrand. */
double thefunction ( double x , void *param ) {
    return sin(x) / x;
    }

/* Driver function. */
int main ( int argc , char *argv[] ) {

    gsl_function f;
    gsl_integration_cquad_workspace *ws = NULL;
    double res, abserr;
    size_t neval;

    /* Prepare the function. */
    f.function = &thefunction;
    f.params = NULL;

    /* Initialize the workspace. */
    if ( ( ws = gsl_integration_cquad_workspace_alloc( 200 ) ) == NULL ) {
        printf( "main: call to gsl_integration_cquad_workspace_alloc failed.\n" );
        abort();
        }

    /* Call the integrator. */
    if ( gsl_integration_cquad( &f, 0.0 , 1.0 , 1.0e-10 , 1.0e-10 , ws , &res , &abserr , &neval ) != 0 ) {
        printf( "main: call to gsl_integration_cquad failed.\n" );
        abort();
        }

    /* Print the result. */
    printf( "main: int of sin(x)/x in [0,1] is %.16e +/- %e (%i evals).\n" ,
        res , abserr , neval );

    /* Free the workspace. */
    gsl_integration_cquad_workspace_free( ws );

    /* Bye. */
    return 0;

    }

যা আমি সংকলিত gcc -g -Wall cquad_test.c -lgsl -lcblas। আউটপুট হয়

main: int of sin(x)/x in [0,1] is 9.4608307036718275e-01 +/- 4.263988e-13 (63 evals).

0,94608307036718301494

দ্রষ্টব্য যে এখানে কোনও বিশেষ কিছুই নেই, CQUADএকাকীত্বটি কোথায় আছে তা জানানোর জন্য বা ইন্টিগ্রেন্ডের মধ্যেই কোনও বিশেষ চিকিত্সা নেই। আমি কেবল এটিকে ফেরত দিতে দিয়েছি NaN, এবং সংহতকারীগুলি স্বয়ংক্রিয়ভাবে সেগুলির যত্ন নেয়।

এও নোট করুন যে সর্বশেষতম জিএসএল সংস্করণ 1.15 এ একটি বাগ রয়েছে যা এককতার চিকিত্সার উপর প্রভাব ফেলতে পারে। এটি স্থির করা হয়েছে, তবে এটি সরকারী বিতরণে স্থান দেয়নি। আমি অতি সাম্প্রতিক উৎস ব্যবহার করা হয়, সঙ্গে ডাউনলোড করা bzr branch http://bzr.savannah.gnu.org/r/gsl/trunk/


দুর্দান্ত, উত্তরের জন্য ধন্যবাদ। আমি গ্রিনের ফাংশনগুলি সন্ধানের জন্য ইন্টিগ্রেটারটি ব্যবহার করছি এবং আমার সংহতকরণে এক্সপেনসিয়েন্টস এবং কিছু সাইন / কোসাইন অন্তর্ভুক্ত রয়েছে। আমি এরপরে এগুলিকে আবার একীভূত করি একটি ভিন্ন ভেরিয়েবল এবং এটিই আমি ন্যানদের পপিং করি। আপনি কি CQUAD ব্যবহার করে কোনও উদাহরণ প্রোগ্রাম জানেন? ওয়ার্কস্পেস ফাংশনগুলিতে কীভাবে এবং কোথায় রাখব সে সম্পর্কে আমি বিভ্রান্ত। আমার উল্লেখ করা উচিত যে আমি এই ধরণের জিনিসটিতে প্রায় এক শিক্ষানবিশ!
জোশ

@ জোশ: ভালো কথা, আমি অনুমান করি যে এটির ব্যবহারের ক্ষেত্রে সবার আগে হওয়া উচিত, সুতরাং এটি কীভাবে বলা যেতে পারে তার একটি নূন্যতম উদাহরণ যোগ করেছি।
পেড্রো

3

আপনি ডাবল এক্সফোনেনশিয়াল চতুর্ভুজ সূত্রগুলিও পরীক্ষা করে দেখতে পারেন। তারা ভেরিয়েবলগুলির একটি (অন্তর্নিহিত) পরিবর্তন করে তা নিশ্চিত করে যে তারা সীমানা এককতা "স্বাচ্ছন্দ্যময়" করে। খুব সুন্দর (ফোর্টরান 7777 এবং সি) বাস্তবায়ন ওউরার ওয়েবসাইটে পাওয়া যাবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.