Üdv mindenkinek! Hogy kell c++ -ban megcsinálni a többismeretlenes egyenletmegoldó képletet, mely kiszámolja a tényleges eredméneket?
Először is meg át kell látni a feladatot, kell rá egy megoldóképlet
ismeretlenek: x1,x2 ... xn
a1,a2 ... an nem 0 együtthatók
c konstans
Kanonikus alakba lévő n ismeretlenes egyenlet:
a1*x1+a2*x2+...an*xn+c = 0
(egy lehetséges)megoldóképlet:
x1=r1
x2=r2
...
xn=-(a1*r1+a2*r2+...+a(n-1)*r(n-1)+c)/an
r1,r2,r3 ... r(n-1) tetszőleges értékek.
Ha 1 megoldás van akkor végtelen sok megoldás van, pesze ha a felvehető értékek halmaza véges vagy bizonyos egyéb korlátozó tényezők esetében véges sok megoldás van.
Az r-ek egyfajta képen felvett értéke egy rögzített megoldás, az r-ek az összes módon való megválasztása az összes megoldás halmaza.
Hogy szoktak több ismeretlenes egyenletet/egyenletrendszert tárolni?
Az x-eket nem kell tárolni nem hordoz igazából semmi információt elég az együtthatókat tárolni.
Vagyis a1 a2 ... an c sorozatot elég tárolni. Ami igazából 1 tömb.
Egy megoldás is egy tömb. Ez alapján meg lehet oldani csak kódolni kell.
i := 1
j := 1
while (i ≤ m and j ≤ n) do
Find pivot in column j, starting in row i:
maxi := i
for k := i+1 to m do
if abs(A[k,j]) > abs(A[maxi,j]) then
maxi := k
end if
end for
if A[maxi,j] ≠ 0 then
swap rows i and maxi, but do not change the value of i
Now A[i,j] will contain the old value of A[maxi,j].
divide each entry in row i by A[i,j]
Now A[i,j] will have the value 1.
for u := i+1 to m do
subtract A[u,j] * row i from row u
Now A[u,j] will be 0, since A[u,j] - A[i,j] * A[u,j] = A[u,j] - 1 * A[u,j] = 0.
end for
i := i + 1
end if
j := j + 1
end while
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!