انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سوال - انتگرال از صفر تا بی نهایت (در متلب)

سوال - انتگرال از صفر تا بی نهایت (در متلب)

#3
(۱۳۹۴/۰۳/۰۸, ۱۲:۲۱ ب.ظ)'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?? 
رابطه ای که باید انتگرال گیری کنم را گذاشتم شاید اینطوری قابل لمس تر باشه  
متشکرم


فایل‌های پیوست

عکس(ها)
   
پاسخ


پیام‌های این موضوع
RE: سوال - توسط MATLAB - ۱۳۹۴/۰۳/۰۸, ۱۲:۲۱ ب.ظ
RE: سوال - توسط mo na - ۱۳۹۴/۰۳/۰۹, ۰۹:۴۰ ق.ظ
RE: سوال - توسط MATLAB - ۱۳۹۴/۰۳/۰۹, ۰۱:۲۴ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان