hefaj Napisano Październik 27, 2011 Zgłoszenie Share Napisano Październik 27, 2011 Witam, Mam takie zagadnienie dotyczace Scilaba: Do rozwiazania jest uklad n równan z 4 niewiadomymi (a1, a2, a3, a4). Równan jest wiecej niz niewiadomych. Dajmy na to 7 ukladów równan tzn: y1(b,c,d) = a0 + a1*b1 + a2*c1 + a3*d1 y2(b,c,d) = a0 + a1*b2 + a2*c2 + a3*d2 y3(b,c,d) = a0 + a1*b3 + a2*c3 + a3*d3 y4(b,c,d) = a0 + a1*b4 + a2*c4 + a3*d4 y5(b,c,d) = a0 + a1*b5 + a2*c5 + a3*d5 y6(b,c,d) = a0 + a1*b6 + a2*c6 + a3*d6 y7(b,c,d) = a0 + a1*b7 + a2*c7 + a3*d7 Wartosci b, c, d i y sa znane. Szukamy wspólczynników a0, a1, a2, a3 , tak aby blad byl jak najmniejszy, czyli: 0 = a0 + a1*b1 + a2*c1 + a3*d1 - y1(b,c,d) = e1(b,c,d) 0 = a0 + a1*b2 + a2*c2 + a3*d2 - y2(b,c,d) = e2(b,c,d) 0 = a0 + a1*b3 + a2*c3 + a3*d3 - y3(b,c,d) = e3(b,c,d) 0 = a0 + a1*b4 + a2*c4 + a3*d4 - y4(b,c,d) = e4(b,c,d) 0 = a0 + a1*b5 + a2*c5 + a3*d5 - y5(b,c,d) = e5(b,c,d) 0 = a0 + a1*b6 + a2*c6 + a3*d6 - y6(b,c,d) = e6(b,c,d) 0 = a0 + a1*b7 + a2*c7 + a3*d7 - y7(b,c,d) = e7(b,c,d) Metoda srednich kwadratów optymalizuje funkcje aby blad sredniokwadratowy byl jak najmniejszy, czyli funkcja: fopt=e1(b,c,d)^2+e2(b,c,d)^2+e3(b,c,d)^2+e4(b,c,d)^2+e5(b,c,d)^2+e6(b,c,d)^2+e7(b,c,d)^2 powinna byc jak najmniejsza. Zatem szukamy wspólczynników a0, a1, a2, a3, tak aby funkcja fopt byla jak najmniejsza. W Scilabie napisalem to w ten sposób: //Definiujemy funkcje od ktorej bedziemy uzalezniac poszukiwane niewiadome a0,a1,a2,a3 function y=yth( a, b, c, d ) y = a(1)+a(2).*b+a(3).*c+a(4).*d endfunction //definiujemy funkcje bledu function e=myfun(a, b, c, d, f) e =(yth(a, b, c, d)-f) endfunction //Ustawiamy warunki poczatkowe dla obliczanych wspolczynnikow a0,a1,a2,a3 x0 = [1 ; 1 ; 1 ; 1]; //Ustawiamy warunki wyjsciowe dla obliczanych wspolczynnikow a0,a1,a2,a3 xinf = [-%inf ,-%inf ,-%inf,-%inf]; xsup = [+%inf, +%inf, +%inf, +%inf]; [function, xopt, gopt] = leastsq(list(myfun,b, c, d, f),"b", xinf, xsup, x0) I oblicza funkcje z duzym bledem. W jaki inny sposób mozna to obliczyc ? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
hefaj Napisano Październik 27, 2011 Autor Zgłoszenie Share Napisano Październik 27, 2011 Dobra jednak to działa. Tylko przy zmianie warunków początkowych x0 np. z 0 na 1 całkowicie zmienia wyniki obliczeń. Pytanie jak warunki początkowe wpływaja na funkcję ? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się