کلیدستان

نسخه‌ی کامل: اعداد فازی
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام. من میخوام اعمال ریاضی بین سه تا عدد فازی مثلثی انجام بدم. مثلا P=(P1,P2,P3 و Q=(Q1,Q2,Q3 و V=(V1,V2,V3. برای به دست آوردن رابطهI=(P-jQ)/V تو متلب باید چه کار کنم؟ تو مقالات خوندم که مثلا P-Q=(P1-Q3,P2-Q2,P3-Q1. ممنون میشم اگه کمکم کنید.
(آیا نیازی به استفاده از توابع مثلثی مثل trimf و ... می باشد ؟)
سلام.
در زمینه عملیات های اصلی برای اعداد فازی مثلثی (triangular fuzzy numbers) تا حالا کار نکردم، ولی نگاهی به دستور fuzarith بیندازید. 
 
از دستور fuzarith استفاده کردم جواب داد
خدا خیرت دهد
باز اگه سوالی پیش امد می پرسم
تشکر
خواهش می کنم. 
فقط حتما پاسخ را بر اساس مقالات چک کنید تا اطمینان پیدا کنید که این دستور، از همان فرمول مقالات استفاده می کند.
 
با سلام مجدد
اعمال ریاضی با همان دستور fuzarith درست انجام میشه فقط یه مشکلی که هست اینه که P+jQ انجام نمیشه یعنی در واقع مشکل در تشکیل عدد فازی مختلط Q است و به سادگی و ضرب کردن در j به دست نمیاد.
اگر میتونید کمکی کنید ممنون میشم
تشکر
فکر کنم باید بخش حقیقی و موهومی عدد مختلط را جداگانه به دست آورید و سپس آنها را تبدیل به یک عدد مختلط کنید (این چیزیه که به ذهنم میرسه، ولی حتما درستی این موارد را در مقالات چک کنید).
اگر نشد، کدها را اینجا بنویسید، اگر مورد دیگری به ذهنم رسید، تذکر می دهم.
 
هدف به دست آوردن کانجوکیت این رابطه (P+jQ)/V)  
هست که البته با روش تکراریه و باید مثلا 20 بار این رابطه رو حساب کنیم. حالا فرض می کنیم همون یکبار این رابطه رو میخایم به دست بیاریم. ما اطلاعاتP,Q,V رو برای 32تا باس(گره، نقطه) داریم اول این پارامترها رو فازی میکنیم بعد باید رابطه رو به دست بیاریم.این jam اولی رو همینطوری بدون مختلط کردن نوشتم بعد تقسیم واینا.
بعدش به نظرم رسید از complex استفاده کنم جواباش به نظر منطقی نمیاد.
ممنون

کد:
clc
clear all
Sbase=10000000; %VA
j=sqrt(-1);
PM=[0 100 90 120 60 60 200 200 60 60 45 60 60 120 60 60 60 90 90 90 90 90 90 420 420 60 60 60 120 200 150 210 60]*1000/Sbase; % load active power
QM=[0 60 40 80 30 20 100 100 20 20 30 35 35 80 10 20 20 40 40 40 40 40 50 200 200 25 25 20 70 600 70 100 40]*1000/Sbase; % load reactive power
e1=0.2; e2=0.1;
PL=PM*(1-e1);
QL=QM*(1-e1);
PR=PM*(1+e2);
QR=QM*(1+e2);
ادامش

کد:
x=0:0.0001:1; y=0:0.00001:1;
for o=1:33
 Pfuzzy(:,o)=trimf(x, [PL(o) PM(o) PR(o)]);
end

for o=1:33
 Qfuzzy(:,o)=trimf(x, [QL(o) QM(o) QR(o)]);
end

for u=1:32
 V0(u,:)=trimf(x, [1 1 1]);
end
کد:
for i=2:33
    pp=Pfuzzy( :,i);
    qq=Qfuzzy( :,i);
    
    jam(i-1,: )=fuzarith(x,pp,qq,'sum');
    tagh(i-1,: )=fuzarith(y,jam(i-1,: ),V0(i-1,: ),'div');
    I(i-1,: )=conj(tagh(i-1,: ));
    
    jjam(i-1,: )=complex(pp,qq);
    taghj(i-1,: )=fuzarith(y,jjam(i-1,: ),V0(i-1,: ),'div');
    I(i-1,: )=conj(taghj(i-1,: ));
   
end
یک نگاهی به کدها انداختم، ابتدا کد زیر را حذف کنید :

کد:
j=sqrt(-1);

دلیلش هم اینه که خود نرم افزار متلب، دو علامت i و j را به همین صورت (موهومی) می شناسد و نیازی به تعریف کردن آن نیست. البته این تغییر، تاثیری در نتایج ندارد.

من فکر کردم کدها خطا داده، اگر کدها خطا نمی دهد و تنها جواب ها به نظر غلط می آیند، بهترین کار این است که به کتاب های درسی و مقالات مراجعه کنید و فرمول ها را بررسی نمایید.
در ضمن، بنده فکر می کنم که شما ابتدا باید یک برنامه مختصر و کوتاه بنویسید و همین عملیات های مورد نظرتان را تنها با یک عدد (یک مورد) انجام بدهید، سپس اگر جواب ها درست بود، آنگاه به سراغ برنامه اصلی خود بروید. زیاد بودن تعداد عددها (موارد) باعث سردرگمی شما خواهد شد. خود من نیز اینگونه موارد را ابتدا در یک برنامه چند خطی، تست می کنم. آن مورد نیز می تواند از یک کتاب درسی گرفته شود تا پاسخ را از کتاب داشته باشید و بعد بتوانید پاسخ کتاب و پاسخ برنامه متلب را با هم مقایسه کنید.
تشکر لطف کردی
این کد ساده رو هم نوشتم تو جواب میگه که قسمت موهومی به حساب نمیاد. باز اگه چیزی به نظرتون اومد ممنون میشم بگید. 
clc
clear all
w=0:400;e=400;
a=trimf(w,[180 200 210]);
b=trimf(w,[140 150 170]);
plot(w,a,w,b)
sum=fuzarith(w,a,b,'sum');
figure
plot(w,sum)
g=complex(a,b);
figure
plot(w,g)
جمع  معمولیش درسته همون موهومیشو مشکل دارم