Tulis sebuah program untuk menyelesaikan serangkaian persamaan linear sesingkat mungkin. Ini harus menyelesaikan sejumlah masalah persamaan. Mereka dapat diinput sesuai keinginan Anda, koefisien augmented matrix mungkin yang paling mudah. Program tidak harus menangani koefisien atau solusi non-integer. Tidak ada kasus rusak atau tidak valid yang akan diuji. Program harus menampilkan nilai setiap variabel atau bentuk eselon baris tereduksi.
Tidak ada perpustakaan yang memecahkan persamaan, fungsi matriks, atau cara apa pun untuk menyelesaikan secara otomatis diizinkan. Anda dapat mensimulasikan matriks dengan array atau daftar.
Input contoh (atau setara):
m={{2,1,-1,8},{-3,-1,2,-11},{-2,1,2,-3}}
Ini mewakili 2x+y-z=8, -3x-y+2z=-11, -2x+y+2z=-3
Output contoh (atau setara):
{2,3,-1}
Ini mewakili x=2, y=3, z=-1
0x=0
atau0x=5
; 4) Kasus di mana jumlah persamaan berbeda dari jumlah variabel; 5) Kasus kontradiktif sepertix+5y=7, x+5y=8
; 6) Kasus tanpa independensi linier, sepertix+3y=6, 2x+6y=12
. Apakah saya benar?Jawaban:
Python
169166Penerapan
Demo
Catatan
Jika Anda OK dengan aproksimasi float, maka Anda dapat menghapus panggilan fungsi putaran dan golf lebih lanjut hingga 159 karakter
sumber
APL, 1 char
Saya tahu ini tidak sesuai dengan persyaratan (yang direvisi), tetapi terlalu bagus untuk tidak memposting:
Simbol "domino"
⌹
(pembagian÷
di dalam persegi panjang) melakukan pembagian matriks, oleh karena itu ia dapat menyelesaikan sistem persamaan linear apa pun. Anda hanya harus meletakkannya di antara vektor istilah konstan dan matriks dengan istilah lain:(jika Anda ingin mencobanya di TryApl,
⊃
adalah↑
)sumber
Javascript (
284181) - Metode Elusinasi GaussUji
Array yang dikembalikan menggabungkan matriks identitas dan solusinya.
sumber
l=A.length;for(i=0;i<l;i++)
digunakanfor(i=0;i<l=A.length;i++)
.for(i=l-1;i>=0;i--)
digunakanfor(i=l;--i;)
.w=A[j][i]
kefor()
dan melewati{}
.Jawaban ini tidak lagi cocok dengan pertanyaan setelah aturan berubah karena menggunakan fungsi matriks. *
Sage , 32
Input sampel:
Output sampel:
* Bisa dibilang,
matrix()
adalah typecast, bukan fungsi (runningimport types; isinstance(matrix, types.FunctionType)
giveFalse
). Juga,~
dan*
adalah operator , bukan fungsi.sumber
Jawa -
522434228213 karakterMemecahkannya dengan memeriksa secara sistematis semua n-tupel integer yang mungkin dengan perkalian langsung hingga ditemukan satu yang berfungsi.
Function mengambil augmented matrix, A, vektor solusi percobaan, x, dan dimensi, n, sebagai vektor solusi input - output, x. Perhatikan bahwa vektor x sebenarnya lebih besar dari dimensi untuk membantu melangkah melalui solusi yang mungkin. (Jika saya mendeklarasikan variabel A, x, n, j, k, s sebagai variabel instan, fungsinya akan menjadi 31 karakter lebih pendek - dengan total 182, tetapi itu terasa seperti membengkokkan aturan terlalu jauh.)
Program untuk pengujian (agak tidak diubah):
Program mengambil input dari stdin sebagai integer yang dipisahkan oleh ruang sebagai berikut: pertama, dimensi masalah, kedua, entri dari matriks yang ditambah dengan baris.
Contoh dijalankan:
Saya mencukur beberapa karakter dengan mengikuti saran Victor tentang loop dan "publik", menyimpan RHS dalam matriks yang diperbesar alih-alih secara terpisah, dan menambahkan entri tambahan ke solusi uji coba saya untuk menyederhanakan pembuatan setiap solusi uji coba baru. OP juga mengatakan bahwa suatu fungsi sudah cukup - tidak perlu menghitung keseluruhan program.
sumber
while(true){f=0;for(j=0;j<n;j++)
dapat digantikan olehwhile(true){for(f=j=0;j<n;j++)
. Selanjutnya kelas Anda tidak perlu menjadi publik. Untuk loop dengan hanya satu instruksi dalam tubuh tidak perlu kurung kurawal.for(j=0;j<n;j++){for(k=0;k<n;k++){A[j][k]=p.nextInt();}b[j]=p.nextInt();}
bisa digantikan olehfor(j=0;j<n;b[j++]=p.nextInt())for(k=0;k<n;)A[j][k++]=p.nextInt();
while(true)
dapat diubah menjadifor(;;)
JavaScript (ES6),
152151 byteImplementasi aturan Cramer .
(m)(v)
Cobalah online!
sumber