[Matlab][C] Tłumaczenie na język C

woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Cześć,nie używalem nigdy Matlaba i mam pewnien problem. Potrzebuje użyć pewnego algorytmu, który jest zapisany w Matlabie i wygląda on następująco:

Kod: Zaznacz cały

P=(uc.*ic+us.*is)/2 . 
Jest to wzór na moc.
Podobny wzór na amplitudę , który zapisany w matlabie jest tak :
Um=sqrt(uc.^2+ us.^2) udało zapisać mi się w języku C w następujący sposób:

Kod: Zaznacz cały

for(int i=0;i<500;i++)
{

amp_tmp+=uc[i]*uc[i]+us[i]*us[i];

}
amp_tmp=amp_tmp/500;
amp=sqrt(amp_tmp);

gdzie, uc, us są to tablice danych. Próbując w analogiczny sposób postąpić z drugim algorytmem mam problem. Próbuje robić to w taki sposób:

for(int i=0;i<500;i++)
{
        moc_p_tmp+=0.5*(uc[i]*ic[i]+us[i]*is[i]);
 }
    mocp=moc_p_tmp/500;
Niestety wyniki są błędne. Podejrzewam ze może chodzić o to , że we wzorze P=(uc.*ic+us.*is)/2 wartości ic oraz is nie maja po sobie kropki, co o ile się nie mylę oznacza ze nie mnożymy elementu po elemencie. Chciałbym zapytać jak rozumieć taki zapis bez kropek tych wartosci?
Ostatnio zmieniony 17 sty 2018, o 02:30 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

Nic dziwnego, że źle Ci wychodzi skor owzory z matlaba dają wektory.
Zapis \(\displaystyle{ v.^2}\) oznacza, że \(\displaystyle{ v}\) jest wektorem i podnosisz każdy jego element do kwadratu. Tak samo, jeśli \(\displaystyle{ u,v}\) są wektorami, to \(\displaystyle{ u.*v}\) oznacza wektor, którego i-ta współrzędna, to \(\displaystyle{ u \cdot v}\)
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Dziękuje za odpowiedź, czyli w którym miejscu w kodzie do obliczenia algorytmu P=(uc.*ic+us.*is)/2 jest błąd?
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

to już zadanie dla Ciebie
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

"Tak samo, jeśli u,v są wektorami, to u.*v oznacza wektor, którego i-ta współrzędna, to u cdot v"

Mnie się wydaje , ze właśnie w ten sposób to zapisałem, tylko nie do tablicy w sensie :
moc_p_tmp=0.5*(uc*ic+us*is);

tylko
moc_p_tmp i tutaj operator += żeby od razu sumowac wynik operacji dla i-tych elementów operacji u cdot v i zsumować do zmiennej moc_p_tmp.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

no to jak możesz otrzymywać wektor, skoro u Ciebie moc_p_tmp jest liczbą?
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Jest liczbą która przechowuje sumę itych elementów wektora czyli iloczynów , czyli wersja z zapisem do tablicy kolejno byłaby lepsza? Potestuję to jeszcze trochę.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

Jest liczbą która przechowuje sumę itych elementów wektora czyli iloczynów
czyli twierdzisz, że z sumy \(\displaystyle{ a+ b+c}\) jesteś w stanie odzyskać wektor \(\displaystyle{ [a,b,c]}\)?
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Bardziej chodzi mi o to , ze tak jak tutaj : amp_tmp+=uc*uc+us*us; czyli w amp_tmp jest wynik sumy tych dwoch iloczynow i z kazdą iteracja zwieksza sie on o wynik kolejnych sum kolejnych iloczynów elmentow, potem po wyjściu z pętli dziele sobie przez ilość iteracji i mam wartość która pierwiastkuje i uzyskuje jedną liczbę która określa amplitudę, to samo potrzebuje zrobić z tą mocą.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

ale z kodu matlaba wynika, że P oraz Um są wektorami.
Dlaczego w ogóle dzielisz przez 500 skoro w matlabie tego nie ma?
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Właśnie wiem, podejrzałem sobie co wyświetla się w konsoli, są to liczby które własnie po zsumowaniu i podzieleniu przez ich ilość dają ładny wynik mocy, chociaż w matlabie jest on przedstawiony w formie graficznej i sobie narasta dość szybko do pewnej wartości i potem jest stały.


500 to liczba próbek, czyli elementów tablicy, w matlabie jest to zapisane nad równaniem jako:
n=1:M*N1; , gdzie M zdefiniowane jest jako 5 a N1 jako 100 . Dla amplitudy działa.
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

moc Ci nie działa bo dzielisz przez dwa w każdej iteracji, a powinieneś tylko raz/
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Niestety próbowałem tez na końcu ale wynik odbiega od tego z matlaba.
W takim razie będę próbował tak jak wspominałeś , na wektorach i na końcu dopiero sumować i próbować dzielić i porównywać z wartościami z matlaba. Dzięki za pomoc
Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3132
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 154 razy
Pomógł: 475 razy

[Matlab][C] Tłumaczenie na język C

Post autor: leg14 »

czekaj
przecież ty po prostu źle przepisałeś ten wzór na moc do c
woab
Użytkownik
Użytkownik
Posty: 9
Rejestracja: 15 sty 2018, o 19:14
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 6 razy

[Matlab][C] Tłumaczenie na język C

Post autor: woab »

Chodzi ze ic oraz is nie powinny byc jako tablicowe od ?
ODPOWIEDZ