Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as Scilab by knm ( 17 years ago )
Kody całkowania po prostokącie i okręgu oczywiście są na stronie i zawsze były. Co do funkcji fft to jeżeli sumuje Pan po całe tablicy wynikowej to nie powinien Pan mnożyć przez 2 ale jak po pierwszej połowie np. 1:10 to powinien pan pomnożyć przez dwa.
Co do funkcji xDot to raczej powinien Pan unikać tych podstawien do x, y, z bo to nieraz żle działa - proszę podstawiać i(1) bezpośrednio do wzoru.
Pozdrawiam
rm
Marek Krasnowski pisze:
- Ukryj cytowany tekst -
Witam. Mam problem z rozwiązaniem niektórych zadań z równań różniczkowych. Zadania rozwiązuję przy pomocy kodu:
--------------------------------------------------------
KOD
clear;
clc;
function xDot = g(t, i)
x = i(1);
y = i(2);
z = i(3);
xDot = [- y - z;
x - 0.15 * y;
0.2 * x - 10 * z + x * z];
endfunction;
y0 = [1; 0; 0];
t0 = 0; // Poczatek
step = 0.1; // Krok
t1 = t0 + step;
for i = 1:1:500 // Ilosc iteracji, tutaj 200 jak krok 0.1 to obliczy dla t od 0 do 20(koniec przedzialu)
instants = t1;
y = ode(y0, t0, instants, g);
t0 = t1;
tt(i) = t1;
t1 = t1 + step;
y0 = y;
yy(1, i) = y(1);
yy(2, i) = y(2);
yy(3, i) = y(3);
end;
sumOdeX = sum(yy(1, :))
sumOdeY = sum(yy(2, :))
sumOdeZ = sum(yy(3, :))
----------------------------------------------------------
Rozwiązanie pierwszego zadania tym kodem daje wynik 0.9283764, który nie jest akceptowany. Dostaliśmy od Pana informację, że należy pominąć warunek początkowy tj. należy liczyć od 0.1 do 50 w tym przypadku. Ustawienie t0=0.1 daje wynik 0.9150560, który też nie wchodzi. Próbowałem też odjąć wynik pierwszej wartości z przedziału <0;0.1> kodem
KOD
sumOdeX = sum(yy(1, :)) - yy(1,1)
. Wynik to -0.0658971 - niepoprawny. Mam, więc pytanie czy w zadaniu jest błąd czy powinienem zmienić kod?
Drugie pytanie dotyczy analizy FFT, którą należy wykonać na wynikach pierwszego zadania. Nie jestem w stanie tego zrobić z powodu błędnego wyniku w zadaniu pierwszym. Poza tym nie jestem pewien jaki kod należy zastosować, aby to zrobić. Czy dla zadania drugiego powinno być to zrobione tak:
KOD
ff = fft(yy(1, :), -1);
wynikfft = sum(abs(ff))
czy może tak:
ff = fft(yy(1, :), -1);
wynikfft = sum(2*abs(ff))
Na koniec mam jeszcze pytanie o egzamin. Chciałbym się dowiedzieć czy wszystkie zadania z aproksymacji, interpolacji i FFT będą operować na danych dostarczonych z innych funkcji (np. różniczkowania) czy będą też zadania z wczytywaniem z pliku.
P.S Na stronie CEZ nie ma kodu na obliczanie całek po walcu, a mówił Pan że mogą się pojawić. Poza tym przydałby się kod na liczenie całek podwójnych metodą podziału na prostokąty, ponieważ metoda podziału na trójkąty jest pracochłonna, a wszyscy mają tylko ten kod. W imieniu wszystkich studentów proszę o dodanie tych kodów do materiałów na CEZ smile.gif
------------------------------------------------------------------------------------------------------
Rozwiąż układ równań:
dla x=1; y=0; z=0 przy t=0;
Rozwiąż układ z krokiem czasowym 0.1s w przedziale czasu od 0 do 50s.
Podaj sumę wartości x?
------------------------------------------------------------------------------------------------------
Rozwiąż układ równań:
dla x=1; y=0; z=0 przy t=0;
Rozwiąż układ z krokiem czasowym 0.1s w przedziale czasu od 0 do 50s.
Podaj sumę wartości bezwzględnych amplitud analizy FFT zmiennej x
Revise this Paste