Matlab Function bloğuna döngü oluşturma

Akdeniz31

Üye
Katılım
6 May 2020
Mesajlar
54
Puanları
1
Merhaba, Matlab function bloğuna bir kod yazmam lazım. Kodda döngüleri oluşturamadım. Yardımcı olabilecek var mı?

U bilgisi giriş, x ve y çıkışlar. u bilgisi adc ile alınacak bir batarya gerilim bilgisi. Yapmak istediğim işlem batarya 0.9 değerinin altındaysa 1.2'ye kadar şarj olsun. 1.2 olunca 0.9 oluncaya kadar deşarj olsun. 0.9'a deşarj olduktan sonra tekrar 1.2'ye şarj olsun. Kodu şöyle oluşturmaya çalıştım:
1- u, 0.9 değerine eşitse,
2- u 1.2 değerine gelene kadar x=1 y=0 olsun
3- u 1.2 değerine eşit büyükse veya 1.2 ile 0.9 arasındaysa
4- u 0.9’a eşit olana kadar y=1 x=0 olsun
5- 0.9 değerine gelince 1. satıra giderecek sürekli aynı işlemleri yaptıracak.

Döngüler oluşturamadım. Aşağıda yazmaya çalıştığım kod var. koddaki hatalarımda ve algoritmada yarcımcı olur musunuz ?

while (1)
if (u<=0.9) %Şarj
for u=1.2
x=1;
y=0;
end
elseif (u>=1.2) || (u>0.9) && (u<1.2) %Deşarj
for u=0.9
x=0;
y=1;
end
else
x=0;
y=0;
end
end
end
 
Merhaba, öncelikle MatLab'a çok hakim değilim. For döngülerini while döngüleri ile değiştirdiğiniz zaman problemin çözüleceğini düşünüyorum.

while (1)
if (u<=0.9) %Şarj
while (u==1.2)
x=1;
y=0;
end
elseif (u>=1.2) || (u>0.9) && (u<1.2) %Deşarj
while (u==0.9)
x=0;
y=1;
end
else
x=0;
y=0;
end
end
end
 
Son düzenleme:
edonmez bey cevabınız için teşekkür ederim. Dediğinizi uyguladım fakat program derleyemedi. en baştaki while (1) 'i sildiğimde de x'in tanımsız olduğunu söylüyor. Paylaştığım kodda amacım for döngüsü ile 1.2 olana kadar x=1 y=0 veya 0.9 olana kadar x=0 y=1 yapmak. For'u while yaparsam 1.2 olduğu durumda x=1 y=0 veya 0.9 olduğu durumda x=0 y=1 yap demek değil mi
 
Özür diliyorum yanlış anlamışım, while döngülerinden 1.'sini u<= 1.2, 2.'sini de u>=0.9 olarak değiştirdiğinizde algoritma kısmının tamamlanmış olması gerekiyor. For döngülerinde değişken oluşturup ona değerler verebilirsiniz. While döngüsü ise koşul sağlanıyorsa çalışır. Kodun son hali:

while (1)
if (u<=0.9) %Şarj
while (u<=1.2)
x=1;
y=0;
end
elseif ((u>=1.2) || ((u>0.9) && (u<1.2))) %Deşarj
while (u>=0.9)
x=0;
y=1;
end
else
x=0;
y=0;
end
end
end
 
Özür diliyorum yanlış anlamışım, while döngülerinden 1.'sini u<= 1.2, 2.'sini de u>=0.9 olarak değiştirdiğinizde algoritma kısmının tamamlanmış olması gerekiyor. For döngülerinde değişken oluşturup ona değerler verebilirsiniz. While döngüsü ise koşul sağlanıyorsa çalışır. Kodun son hali:

while (1)
if (u<=0.9) %Şarj
while (u<=1.2)
x=1;
y=0;
end
elseif ((u>=1.2) || ((u>0.9) && (u<1.2))) %Deşarj
while (u>=0.9)
x=0;
y=1;
end
else
x=0;
y=0;
end
end
end

Edönmez Bey, kodu while(1) varken çalıştırdığımda simulink running deyip takılı kalıyor yani hiç çalıştırmıyor derleyemiyor. while(1) komutunu silince de " Output argument 'x' is not assigned on some execution paths.

Function 'MATLAB Function1' (#34.10.11), line 1, column 11:
"x"
Launch diagnostic report." hatasını veriyor.

Kod:
function [x,y] = fcn(u)
%#codegen
while (1)
if (u<=0.9) %Şarj
while (u<=1.2)
x=1;
y=0;
end
elseif (u>=1.2) || (u>0.9) && (u<1.2) %Deşarj
while (u>=0.9)
x=0;
y=1;
end
else
x=0;
y=0;
end
end
end
 
Edönmez Bey, kodu while(1) varken çalıştırdığımda simulink running deyip takılı kalıyor yani hiç çalıştırmıyor derleyemiyor. while(1) komutunu silince de " Output argument 'x' is not assigned on some execution paths.

Function 'MATLAB Function1' (#34.10.11), line 1, column 11:
"x"
Launch diagnostic report." hatasını veriyor.

Kod:
function [x,y] = fcn(u)
%#codegen
while (1)
if (u<=0.9) %Şarj
while (u<=1.2)
x=1;
y=0;
end
elseif (u>=1.2) || (u>0.9) && (u<1.2) %Deşarj
while (u>=0.9)
x=0;
y=1;
end
else
x=0;
y=0;
end
end
end
çok dağınık gitmişsin. x tüm koşullar için tanımlı değil. kaldığı tüm koşullar içinde bir tanım yok. yani ne istediğin bellirgin değil. kodlama seviyenizi yazarsanız daha iyi yardımcı olabiliriz.
yaklaşımınızda çok doğru olmayabilir. 5 adet durum belirlemişsiniz abcak bu 5 durum için x y değerleri belli değil.
 

Yeni mesajlar

Forum istatistikleri

Konular
127,963
Mesajlar
913,931
Kullanıcılar
449,609
Son üye
cherrywine

Yeni konular

Geri
Üst