Hej,
jeżeli ktoś ma problemy z wyznaczaniem odpowiednich współczynników (patrz powyżej), to można się posłużyć losową metodą wyszukiwania rozwiązań... Bardzo przydatna metoda, wszędzie tam, gdzie mamy problemy z wyznaczeniem konkretnego rozwiązania analitycznie... Sorry @Wibowit, że nie w Javie, ale zajęłoby mi to co najmniej parę razy dłużej... Nie komentuję kodu, ponieważ nie jesteśmy w szkole... Jak ktoś chce niech testuje... i wyciąga wnioski...
import random
def f(q0, q1, q2, q3, r0, r1, r2, r3):
return r0*q0 - r1*q1 - r2*q2 - r3*q3
def ff(a1, a2, a3, a4, a5, a6, a7, a8, q0, q1, q2, q3, r0, r1, r2, r3):
q = a1 * (q0+q1) * (r0+r1) + a2 * (q1+q3) * (r1+r2)
q += a3 * (q3-q2) * (r2-r3) + a4 * (q1-q3) * (r1-r2)
q += a5 * (q1-q0) * (r2+r3) + a6 * (q0+q2) * (r0-r3)
q += a7 * (q3+q2) * (r1-r0) + a8 * (q0-q2) * (r0+r3)
return q
a = [[0, 0, 0, 0, 0, 0, 0, 0] for i in range(20)]
oszac = 10**10
for ii in range(50):
for i in range(20000):
for j in range(20):
for k in range(8):
a[j][k] = 4*random.random()
a1 = -1+2*random.random()
a2 = -1+2*random.random()
a3 = -1+2*random.random()
a4 = -1+2*random.random()
a5 = -1+2*random.random()
a6 = -1+2*random.random()
a7 = -1+2*random.random()
a8 = -1+2*random.random()
roz = -1+2*random.random()
for e in a:
wynik = f(e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7])
wyniksym = ff(a1, a2, a3, a4, a5, a6, a7, a8, e[0], e[1], e[2], e[3], e[4] ,e[5], e[6], e[7])
roz += abs(wynik-wyniksym)
if roz < oszac:
wspol = [a1, a2, a3, a4, a5, a6, a7, a8]
oszac = roz
print(wspol, oszac)
Miało być nudno... a zrobiło się ciekawie... ^^
PS. da się to zrobić lepiej, o ile wykorzystamy pewne założenie co do wartości współczynników... :)