Skocz do zawartości

Scilab Uklad N Rownan Z Czterema Niewiadomymi


hefaj

Rekomendowane odpowiedzi

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

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ę
×
×
  • Dodaj nową pozycję...