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


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

انتگرال tpdf با درجه ازادی 5 (در متلب)

#1
با سلام
کد زیر رو که با توزیع نرمال نوشتم اجرا میشه اما وقتی که توزیع رو یه تی تغییر میدم (ینی D رو از یه رشته اعداد تصادفیه تی انتخاب می کنم و می خوام انتگرال tpdf با درجه ازادی 5 اجرا بشه) ارور میده . نمی دونم چطوری اصلاحش کنم.
helpمنلب در مورد مثال انتگرالا هم خووندم اما باز متوجه نمیشم منظور این ارور چیه
کد زیر درست اجرا میشه اما کد بعدی نه

کد پی‌اچ‌پی:
D=normrnd(mu,sigma,1);%generate random numbers in normal distribution
b
=0;
c=0;
q=0;
g=0;
z=0;
s=0;
for 
alfa=1:8
    
for landa=1:8
        
if D<-landa%dar vaziyat foroosh
            syms x
            f
=normpdf(x,0,1)
            b=int(f,-Inf,-landa)
       
            
elseif D>landa%dar vaziyat kharid
             syms x
             j
=normpdf(x,0,1)
             c=int(j,landa,Inf)
       
        end
        inact
(alfa,landa)=b+c
    end
    
for landa=1:8
        
if -landa<D<0
            syms x
            o
=normpdf(x,0,1)
            z=1/2*int(o,-landa-alfa,landa-alfa)
        elseif 0<D<landa
            syms x
            u
=normpdf(x,0,1)
            s=1/2*int(u,-landa+alfa,landa+alfa)
        end
        act
(alfa,landa)=z+s
    end
end
for alfa=1:8
    
for landa=1:8
         h
(alfa,landa)=act(alfa,landa)+inact(alfa,landa);
         Tact(alfa,landa)=inact(alfa,landa)/h(alfa,landa);
             end
end
[x,y]=meshgrid(1:8)
contourf(x,y,Tact,15)
colorbar 


کد پی‌اچ‌پی:
clc%calculate switching probability+Tact with T-distribution
clear all
;
close all;
Nr=100;%intial value
sigma
=Nr;
mu=0;
D=trnd(5,1,1);%generate random numbers in normal distribution
b
=0;
c=0;
q=0;
g=0;
z=0;
s=0;
for 
alfa=1:8
    
for landa=1:8
        
if D<-landa%dar vaziyat foroosh
            syms x
            f
=tpdf(x,5)
            b=int(f,-Inf,-landa)
       
            
elseif D>landa%dar vaziyat kharid
             syms x
             j
=tpdf(x,5)
             c=int(j,landa,Inf)
       
        end
        inact
(alfa,landa)=b+c
    end
    
for landa=1:8
        
if -landa<D<0
            syms x
            o
=tpdf(x,5)
            z=1/2*int(o,-landa-alfa,landa-alfa)
        elseif 0<D<landa
            syms x
            u
=tpdf(x,5)
            s=1/2*int(u,-landa+alfa,landa+alfa)
        end
        act
(alfa,landa)=z+s
    end
end
for alfa=1:8
    
for landa=1:8
         h
(alfa,landa)=act(alfa,landa)+inact(alfa,landa);
         Tact(alfa,landa)=inact(alfa,landa)/h(alfa,landa);
         Tinact(alfa,landa)=act(alfa,landa)/h(alfa,landa);
         k(alfa,landa)=((alfa^4+6*alfa^2+3)*Tact(alfa,landa)+3*Tinact(alfa,landa))/((alfa^2+1)*Tact(alfa,landa)+Tinact(alfa,landa))^2;
    end
end
[x,y]=meshgrid(1:8)
contourf(x,y,Tact,15)
colorbar
xlabel
('alfa');
ylabel('landa');
title('Tact'

اروری که کد بالا میده اینه:

کد پی‌اچ‌پی:
The following error occurred converting from sym to double:
Error using mupadmex
Error in MuPAD command
DOUBLE cannot convert the input expression
into a double 
array.If the input expression contains a symbolic variable, use the VPA
function instead.Error in tpdf (line 40)
    y(k) = term ./ (sqrt(v(k)*pi) .* (+ (x(k) .^ 2) ./ v(k)) .^
    ((v(k) + 1)/2));Error in MTact (line 36)
            u=tpdf(x,5

میشه کمکم کنین
پاسخ

انتگرال tpdf با درجه ازادی 5 (در متلب)

#2
خواهشا هرکی میدونه چجوری میشه این ایراد و ارورو برطرف کرد بگه
بدجور گیر افتادم!!!!
پاسخ

انتگرال tpdf با درجه ازادی 5 (در متلب)

#3
سلام.
کد زیر را ببینید :

کد پی‌اچ‌پی:
syms x
u
=tpdf(x,5

x باید یک بردار، ماتریس یا آرایه باشد، اما شما آن را به صورت سمبلیک تعریف کرده اید. اگر در help متلب در مورد دستور tpdf بخوانید، این مورد را تذکر داده است. بنابراین باید مقدار مناسب برای ورودی آن تعیین کنید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط ramoona

انتگرال tpdf با درجه ازادی 5 (در متلب)

#4
(۱۳۹۳/۰۹/۲۵, ۰۱:۳۶ ب.ظ)'admin' نوشته: سلام.
کد زیر را ببینید :

کد پی‌اچ‌پی:
syms x
u
=tpdf(x,5

x باید یک بردار، ماتریس یا آرایه باشد، اما شما آن را به صورت سمبلیک تعریف کرده اید. اگر در help متلب در مورد دستور tpdf بخوانید، این مورد را تذکر داده است. بنابراین باید مقدار مناسب برای ورودی آن تعیین کنید.


 

این کار رو هم الان انجام دادم اما در محاسبه  انتگرال ب مشکل بر خوردم! این ارور رو میده!
unidentified function 'int' for input argument of type 'double'
اینو چیکار کنم؟
برای نرمال خیلی راحت حساب می کرد اما برای تی نه! 
پاسخ

انتگرال tpdf با درجه ازادی 5 (در متلب)

#5
لطفا کد جدید را قرار بدهید تا ببینم تغییراتی که دادید، چی بوده.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

انتگرال tpdf با درجه ازادی 5 (در متلب)

#6
نقل قول: 
'admin' pid='8524' dateline='1418740112'
لطفا کد جدید را قرار بدهید تا ببینم تغییراتی که دادید، چی بوده.


 

این کد جدیده.
من باید انترگرال تی رو حتما حساب کنم .

کد پی‌اچ‌پی:
clc%calculate switching probability+Tact with T-distribution
clear all
;
close all;
Nr=100;%intial value
sigma
=Nr;
mu=0;
D=trnd(5,1,1);%generate random numbers in T distribution
b
=0;
c=0;
q=0;
g=0;
z=0;
s=0;
for 
alfa=1:8
    
for landa=1:8
        
if D<-landa%dar vaziyat foroosh
            
%syms x
            f
=tpdf(-5:5,5)
            b=int(f,-Inf,-landa)
       
            
elseif D>landa%dar vaziyat kharid
             
%syms x
             j
=tpdf(-5:5,5)
             c=int(j,landa,Inf)
       
        end
        inact
(alfa,landa)=b+c
    end
    
for landa=1:8
        
if -landa<D<0
            
%syms x
            o
=tpdf(-5:5,5)
            z=1/2*int(o,-landa-alfa,landa-alfa)
        elseif 0<D<landa
            
%syms x
            u
=tpdf(-5:5,5)
            s=1/2*int(u,-landa+alfa,landa+alfa)
        end
        act
(alfa,landa)=z+s
    end
end
for alfa=1:8
    
for landa=1:8
         h
(alfa,landa)=act(alfa,landa)+inact(alfa,landa);
         Tact(alfa,landa)=inact(alfa,landa)/h(alfa,landa);
         Tinact(alfa,landa)=act(alfa,landa)/h(alfa,landa);
         k(alfa,landa)=((alfa^4+6*alfa^2+3)*Tact(alfa,landa)+3*Tinact(alfa,landa))/((alfa^2+1)*Tact(alfa,landa)+Tinact(alfa,landa))^2;
    end
end
[x,y]=meshgrid(1:8)
contourf(x,y,Tact,15)
colorbar
xlabel
('alfa');
ylabel('landa');
title('Tact'
پاسخ

انتگرال tpdf با درجه ازادی 5 (در متلب)

#7
خطا از خط زیر از کدها گرفته می شود :

کد پی‌اچ‌پی:
s=1/2*int(u,-landa+alfa,landa+alfa

مقادیر را بررسی می کنیم :

کد پی‌اچ‌پی:
=

    
0.0018    0.0051    0.0173    0.0651    0.2197    0.3796    0.2197    0.0651    0.0173    0.0051    0.0018

>> -landa+alfa

ans 
=

    -
1

>> landa+alfa

ans 
=

     


از این سه متغیر درون دستور int ، دوتای آخر برای تعیین حد انتگرال به کار رفته و متغیر u هم به عنوان تابع نوشته شده است، اما متغیر u یک تابع نیست، بلکه همان طور که در بالا مشاهده می کنید، یک بردار می باشد، بنابراین دستور int که به جای تابع، یک بردار دریافت کرده، خطا می دهد. بنابراین باید ابهام این بخش از کدها را برطرف کنید. باید ببینید که درست است u به صورت بردار باشد یا خیر و اگر درست است، کدهای متناسب با آن را بنویسید.
در ضمن، این تذکر را بدهم که هیچ کس همانند خود شما بر روی برنامه تسلط ندارد (و فرصتی هم برای بررسی کامل نیست)، بنابراین بنده تنها در مورد خط هایی که خطا می دهند می توانم راهنمایی کنم و ساختار کلی برنامه (مثلا اینکه آیا u درست به دست آمده یا خیر) را تنها خودتان می توانید چک کنید.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط ramoona

انتگرال tpdf با درجه ازادی 5 (در متلب)

#8
از راهنمایی تون خیلی ممنونم
سایت شما به من خیلی کمک کرده. واقعا ازتون ممنونم با این سایت به افرادی مثل من کمک کردین تا خودمون نرم افزار متلبو یاد بگیریم و استفاده کنیم.
نحوه گرفتم انتگرال tpdf  رو هم بالاخره پیدا کردم.
در داخل محيط متلب Command Window کلمه ي tpdf رو تايپ کردم و انتخابش کردم بعد روش راست کليک کردم و گزينه ي Open Selection رو زدم در صفحه ي باز شده، بالاي خط y(v <= 0) = NaN; عبارت
if isa(x,'sym'),y=sym(y);end
رو وارد کردم و از منوي فايل، گزينه ي Save رو انتخاب کردم.
با این روش میشه انتگرال اش رو گرفت

 
پاسخ
 سپاس شده توسط admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


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