Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Dobrý den,
nedaří se mi spustit program v Pythonu 3 :
!/usr/bin/env python
# -*- coding: utf-8 -*-
# uloha - reseni linearnich soustav v Z3 pomoci Gauss-Jordanovy metody v jazyce Python
import sys
# pro kontrolni vypis matice
def pprint(A):
n = len(A)
for i in range(0, n):
line = ""
for j in range(0, n+1):
line += str(A[i][j]) + "\t"
if j == n-1:
line += "| "
print(line)
print("")
# funkce pro vypocitani vhodneho nasobku pro eliminaci prvku ve sloupci s pivottem
def elimnumber(x, y):
if y == 0:
return 0
if x == 1:
return -y
if x == 2:
return -(3-y)
# hlavin funkce, vrati LZ nebo LN podle toho, ci jsou radky soustavy LZ nebo ne,
# dale pokud existuje reseni, vypise ho, pokud ne, vypise NE
def gauss(A):
dependent = False # na zacatku predpokladame, ze matice ma vsechny radky nezavisle
n = len(A)
x = [0 for i in range(n)] # inicializace vektoru reseni
# prochazime jeden sloupec za druhym
for i in range(0, n):
# hledame yvota, tedy nejvyssi hodnotu ve sloupci
maxEl = abs(A[i][i])
maxRow = i #v maxRow udrzujeme kandidata na pivota
for k in range(i+1, n):
if abs(A[k][i]) > maxEl:
maxEl = abs(A[k][i])
maxRow = k
# vybublame pivot na i-ty radek
for k in range(i, n+1):
tmp = A[maxRow][k]
A[maxRow][k] = A[i][k]
A[i][k] = tmp
# pokud jediny pivot, ktereho jsme nasli, je 0, jsou zbyle radky LZ, tedy i cela matice
if A[i][i] == 0:
dependent = True
for z in range(i,n):
x[z] = 1
break
# vynulujeme cely sloupec nad i pod pivocem
for k in range(0, n):
if k != i: # pro vsechny radky, kde neni pivot
c = elimnumber(A[i][i],A[k][i]) # pomoci pomocne funkce ziskame vhodny nasobek, abycho nulovali
for j in range(i, n+1):
if i == j:
A[k][j] = 0
else:
A[k][j] += c * A[i][j]
A[k][j] = A[k][j] % 3 # pracujeme v aritmetice modulo 3
# nyni uz vime, ci jsou radky LZ nebo LN
if dependent:
print ("LZ")
else:
print ("LN")
# najdeme reseni
# pokud mame v A nenulovy radek a v b nenulovou slozku v prislusnem radku, reseni neexistuje
for i in range(n):
nenulove = True
for j in range(n):
if A[i][j] != 0:
nenulove = False
if (A[i][n] != 0 and nenulove == False):
print ("NE")
# metodou zpetneho dosazeni najdeme reseni rovnice
for i in range(n-1, -1, -1):
if A[i][i] == 0:
x[i] = 0 # pokud je slozka volnym parametrem, volime 0
else:
x[i] = (A[i][n] * A[i][i]) % 3
for k in range(i-1, -1, -1):
A[k][n] -= A[k][i] * x[i]
A[k][n] = A[k][n] % 3
# vypiseme reseni, vektor x, v pozadovanem tvaru
line = ""
for i in range(0, n):
line += str(x[i]) + " "
print (line)
# hlavni program
n = input() # pocet radku
m = input() # pocet sloupcu
ishomegonous = input()
matrix = [[0 for j in (range((n+1)))] for i in (range((n)))] # inicializace matice
# pokud je homogeni, tak v soustave Ax=b je b nulovy vektor
if ishomegonous == 'H':
for i in range(n):
matrix[i][m-1] = 0
for i in range(n):
for j in range(n):
matrix[i][j] = input()
# jinak nacitame i vektor b jako posledni sloupec
else:
for i in range(n):
for j in range(n+1):
matrix[i][j] = input()
gauss(matrix) # spusteni reseni programu.
Vstup má být
3 3 / rozměr matice
H / homogenní, nehomogenní
0 1 2 0 1 0 2 1 1 - hodnoty v matici po řádcích
Výstup má být
0 0 0
LN / lineárně nezávislá, lineárně závislá
Hlásí mi to chybu
ValueError: invalid literal for int() with base 10: '3 3'.
Nevím jak to opravit v čem je chyba.
Děkuji za odpovědi.
Offline
šikovné je, příště napsat i řádku na které ti to hlásí.
Ale když to spustím já, tak zjišťuji že do proměnné n máš na řádce 104 vložený string "3 3". A pak na řádce 108
matrix = [[0 for j in (range((n+1)))] for i in (range((n)))] # inicializace matice
havaruje v range.
Offline