کلیدستان

نسخه‌ی کامل: سوال - انتگرال از صفر تا بی نهایت (در متلب)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
می خوام با متلب انتگرال بنویسیم که از صفر تا بی نهایت هست. با چه دستوری می توانم بنویسم؟؟
نسبت به h می خوام انتگرال بگیرم و مقدارش متغییر هست که hها نسبت بهم مستقل هستند. دستور جدا داره؟؟؟
می خواستم رابطه انتگرالم را بزارم ولی نتوانستم بنویسیم اینجا حتی عکسشم نتوانستم قرار بدمSad
سوال بعدی، کسی با تابع Meijer G کار کرده؟؟ چطور می توانم در متلب پیاده سازیش کنم؟؟؟؟ صفحه خاصی باید برم تا این تابع را تعریف و مقدار دهی کنم؟؟؟؟

ممنون میشم راهنماییم کنید.
متشکرم
سلام
کلید زیر را بخوانید برای انتگرال گیری بازه ای هستش که شاید کمکتون کنه

کلید42
همچنین من جستجویی که کردم در اینترنت مطالب زیادی در مورد تابع meijerG در سایت های ایرانی پیدا نکردم ولی در یکی از انجمن های خارجی زبان یه کدی با این عنوان به چشمم خورد را میزارم شاید کمکتون کنه(که اومده تو 36 خط اول راجب عملکرد کدها توضیح مختصری داده)
فقط اجراش نکردم خودتون چک کنید

کد پی‌اچ‌پی:
function MeijerG(a,b,z)
MeijerG
%     A wrapper for MATLAB symbolic library implementation of the 'MeijerG' G^{m,n}_{p,q}(...|z) function.
%   
It uses Maple with MATLAB 2008a or earliermuPad with later versions
%
%   
Syntax    
%       
MeijerG({[a_1,...a_n],[a_n+1,...a_p]},{[b_1,...b_m],[b_m+1,...b_q]},z)
%   
Input arguments 
%       
- {[a_1,...a_n],[a_{n+1},...a_p]}
%       
- {[a_1,...a_m],[a_{m+1},...a_q]}
%       
matrix of (possibly complexnumbers
%   Output:
%       
has same dimensions as 'z'
%
%   
Notes:
%   
1.) For invalid arguments'double' function for converting results back
%   from symbols would return an error.
%   
'MeijerG' catches the errordisplays a warning, and sets corresponding
%   position of 'y' to 'nan'.
%   
2.'double' to 'string' conversion used for forming the symbolic
%   expressions causes a precision loss, and possiblyround of errors.
%   
3.Sometimeseven the slightest changes to arguments 
%   could produce unacceptable results.
%       
e.g.
%       >> 
MeijerG({[1,1], },{11},[1,2,3])
%       
ans =
%           
NaN   0.666666666666667   0.750000000000000
%       >> MeijerG({[1,1], },{11},[1+1e-5,2,3])
%       
ans =
%           
0.500002499987500   0.666666666666667   0.750000000000000
%       Here the second result appears correctsince
%            MeijerG({[1,1], },{11},) = z/(z+1)
%   
Please let me know if such issues can be circumvented.
%
%   
Author        Damith Senaratne, (http://www.damiths.info)
%   Released date 16th August 2011 

if verLessThan('matlab','7.7.0')
    
useMaple true;
    
maple('MeijerGi := sqrt(-1);');
else
    
useMaple false;
    
SE symengine;
    
evalin(SE,'MeijerGi := sqrt(-1)');
end
NoteGiven the performance penalty and other implications,
the symbolic engine is not reset within 'MeijerG'.
Hencethe choosing a simple identifier for imaginary unit (e.g'i')
appears difficult
The identifier 'MeijerGi' is chosen above hoping that it won't conflict
% with any already defined symbolic variable.
    
% extract the arguments
a1 = a{1}; a2 = a{2};
b1 = b{1}; b2 = b{2};

a1 = a1(:); a2 = a2(:);
b1 = b1(:); b2 = b2(:);

zvec = z(:); % vectorize (to make the computation independent of the dimensions)
y = zeros(size(zvec));
for k=1:length(y)
    % iterate for each element of '
z'!
    if imag(z(k))>=0
        zStr = sprintf('
%MeijerGi* %g',real(z(k)),imag(z(k))); 
    else
        zStr = sprintf('
%MeijerGi* %g',real(z(k)),abs(imag(z(k)))); 
    end
   
    if useMaple
        cmd = sprintf('
evalf(MeijerG([%s,%s],[%s,%s],%s))',intVecToStr(a1),intVecToStr(a2),intVecToStr(b1),intVecToStr(b2),zStr);
        [r,s] = maple(cmd);
        
        if s ~= 0
            warning('
MeijerGfailed evaluating for = %d',k);
            y(k) = nan;
        else
            r = str2double(r);
            y(k) = r(1);
        end
    else
       expr = sprintf('
meijerG([%s,%s],[%s,%s],%s)',intVecToStr(a1),intVecToStr(a2),intVecToStr(b1),intVecToStr(b2),zStr);
       [r,s] = evalin(SE,expr); 
       if s ~= 0
            warning('
MeijerGfailed evaluating for = %d',k);
            y(k) = nan;     
       else
            try
                y(k) = double(r(1));                  
            catch err
                warning('
MeijerGfailed evaluating for = %d',k);
                y(k) = nan;
            end
       end
    end
end
y = reshape(y,size(z));

% -----------------------
% function: intVecToStr
% -----------------------
% converts elements of an integer array '
a' to a string
function s = intVecToStr(a)
s = ['
[', sprintf(' %ld,',a)];
s = [s(1:end-1), ' 
]']; 


(همچنین شما برای ارسال عکس به داخل پست تون می تونید که از قسمت ارسال پیوست استفاده کنید
)
(۱۳۹۴/۰۳/۰۸, ۱۲:۲۱ ب.ظ)'MATLAB' نوشته: [ -> ]سلام
کلید زیر را بخوانید برای انتگرال گیری بازه ای هستش که شاید کمکتون کنه

کلید42
همچنین من جستجویی که کردم در اینترنت مطالب زیادی در مورد تابع meijerG در سایت های ایرانی پیدا نکردم ولی در یکی از انجمن های خارجی زبان یه کدی با این عنوان به چشمم خورد را میزارم شاید کمکتون کنه(که اومده تو 36 خط اول راجب عملکرد کدها توضیح مختصری داده)
فقط اجراش نکردم خودتون چک کنید
کد پی‌اچ‌پی:
function MeijerG(a,b,z)
MeijerG
%     A wrapper for MATLAB symbolic library implementation of the 'MeijerG' G^{m,n}_{p,q}(...|z) function.
%   
It uses Maple with MATLAB 2008a or earliermuPad with later versions
%
%   
Syntax    
%       
MeijerG({[a_1,...a_n],[a_n+1,...a_p]},{[b_1,...b_m],[b_m+1,...b_q]},z)
%   
Input arguments 
%       
- {[a_1,...a_n],[a_{n+1},...a_p]}
%       
- {[a_1,...a_m],[a_{m+1},...a_q]}
%       
matrix of (possibly complexnumbers
%   Output:
%       
has same dimensions as 'z'
%
%   
Notes:
%   
1.) For invalid arguments'double' function for converting results back
%   from symbols would return an error.
%   
'MeijerG' catches the errordisplays a warning, and sets corresponding
%   position of 'y' to 'nan'.
%   
2.'double' to 'string' conversion used for forming the symbolic
%   expressions causes a precision loss, and possiblyround of errors.
%   
3.Sometimeseven the slightest changes to arguments 
%   could produce unacceptable results.
%       
e.g.
%       >> 
MeijerG({[1,1], },{11},[1,2,3])
%       
ans =
%           
NaN   0.666666666666667   0.750000000000000
%       >> MeijerG({[1,1], },{11},[1+1e-5,2,3])
%       
ans =
%           
0.500002499987500   0.666666666666667   0.750000000000000
%       Here the second result appears correctsince
%            MeijerG({[1,1], },{11},) = z/(z+1)
%   
Please let me know if such issues can be circumvented.
%
%   
Author        Damith Senaratne, (http://www.damiths.info)
%   Released date 16th August 2011 

if verLessThan('matlab','7.7.0')
    
useMaple true;
    
maple('MeijerGi := sqrt(-1);');
else
    
useMaple false;
    
SE symengine;
    
evalin(SE,'MeijerGi := sqrt(-1)');
end
NoteGiven the performance penalty and other implications,
the symbolic engine is not reset within 'MeijerG'.
Hencethe choosing a simple identifier for imaginary unit (e.g'i')
appears difficult
The identifier 'MeijerGi' is chosen above hoping that it won't conflict
% with any already defined symbolic variable.
    
% extract the arguments
a1 = a{1}; a2 = a{2};
b1 = b{1}; b2 = b{2};

a1 = a1(:); a2 = a2(:);
b1 = b1(:); b2 = b2(:);

zvec = z(:); % vectorize (to make the computation independent of the dimensions)
y = zeros(size(zvec));
for k=1:length(y)
    % iterate for each element of '
z'!
    if imag(z(k))>=0
        zStr = sprintf('
%MeijerGi* %g',real(z(k)),imag(z(k))); 
    else
        zStr = sprintf('
%MeijerGi* %g',real(z(k)),abs(imag(z(k)))); 
    end
   
    if useMaple
        cmd = sprintf('
evalf(MeijerG([%s,%s],[%s,%s],%s))',intVecToStr(a1),intVecToStr(a2),intVecToStr(b1),intVecToStr(b2),zStr);
        [r,s] = maple(cmd);
        
        if s ~= 0
            warning('
MeijerGfailed evaluating for = %d',k);
            y(k) = nan;
        else
            r = str2double(r);
            y(k) = r(1);
        end
    else
       expr = sprintf('
meijerG([%s,%s],[%s,%s],%s)',intVecToStr(a1),intVecToStr(a2),intVecToStr(b1),intVecToStr(b2),zStr);
       [r,s] = evalin(SE,expr); 
       if s ~= 0
            warning('
MeijerGfailed evaluating for = %d',k);
            y(k) = nan;     
       else
            try
                y(k) = double(r(1));                  
            catch err
                warning('
MeijerGfailed evaluating for = %d',k);
                y(k) = nan;
            end
       end
    end
end
y = reshape(y,size(z));

% -----------------------
% function: intVecToStr
% -----------------------
% converts elements of an integer array '
a' to a string
function s = intVecToStr(a)
s = ['
[', sprintf(' %ld,',a)];
s = [s(1:end-1), ' 
]']; 
(همچنین شما برای ارسال عکس به داخل پست تون می تونید که از قسمت ارسال پیوست استفاده کنید)
 

 

 
ممنونم از راهنمایی شما

 کلید 42 را خوانده بودم ولی کمکی بهم نکرد Sad می خوام با دستور Sum  انتگرال گیری کنم چون تابع من به صورت گسسته هست. میشه با دستور Sum?? 
رابطه ای که باید انتگرال گیری کنم را گذاشتم شاید اینطوری قابل لمس تر باشه  
متشکرم
خواهش می کنم
تا جایی که بنده میدونم از دستور sum هم برای انتگرال گیری استفاده مشه  کرد به این صورت که  ما با تعریف تابع sum داخل برنامه به برنامه می فهمونیم که این تابع مقادیر  موجود را باهم جمع کنه .
یعنی این کار را زمانی انجام می دیم که بنا به دلایلی نخواهیم از دستورات مربوط به انتگرال استفاده کنیم و بخواهیم به صورت عددی انتگرال تابعی را حساب کنیم

ولی یک مقداری رابطه تابع  مورد نظرتون پیچیده هست
در این مورد حتما  آقای مدیر می تونن کمکتون کنن صبر کنید