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

Akdeniz31

Üye
Katılım
6 May 2020
Mesajlar
54
Puanları
3
Yaş
23
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
 

edonmez

Üye
Katılım
29 Eki 2020
Mesajlar
2
Puanları
3
Yaş
20
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:
Konu Sah
A

Akdeniz31

Üye
Katılım
6 May 2020
Mesajlar
54
Puanları
3
Yaş
23
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
 

edonmez

Üye
Katılım
29 Eki 2020
Mesajlar
2
Puanları
3
Yaş
20
Ö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
 
Konu Sah
A

Akdeniz31

Üye
Katılım
6 May 2020
Mesajlar
54
Puanları
3
Yaş
23
Ö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
 

Sponsor Bağlantı

Forum istatistikleri

Konular
112,989
Mesajlar
795,216
Kullanıcılar
414,843
Son üye
zaferturgut

Yeni konular

Üst