Cara membulatkan elemen dalam matriks dalam Oktaf:
Ada banyak cara berbeda untuk membulatkan matriks dan membulatkan angka dalam oktaf.
Opsi 1, gunakan fitur format sprintf
mymatrix=[100.1234567, 2.12345; 3.1234567891, 4.1234];
rows = rows(mymatrix);
cols = columns(mymatrix);
for i = 1:rows
for j = 1:cols
sprintf("%5.2f", mymatrix(j,i))
endfor
endfor
Keluaran , perhatikan token "%5.2f". The 'f' berarti mengharapkan pelampung, 5 berarti menempati 5 ruang. Angka 2 berarti presisi 2 unit setelah titik desimal.
ans = 100.12
ans = 3.12
ans = 2.12
ans = 4.12
Opsi 2, bulatkan ke angka signifikan menggunakan eval dan mat2str
mymatrix2=[100.1234567, 2.12345; 3.1234567891, 4.1234];
j = mat2str(mymatrix2, 3);
mymatrix2=eval(j)
Keluaran , matriks dibulatkan menjadi 3 digit signifikan, perhatikan 100,123 dibulatkan menjadi 100 sedangkan 2,12345 dibulatkan menjadi 2,12
mymatrix2 = 100.0000 2.1200
3.1200 4.1200
Opsi 3, gunakan fungsi bulat
Fungsi putaran tidak memiliki parameter presisi dalam Oktaf. Namun Anda dapat meretasnya dengan mengalikan setiap item dalam matriks dengan 100, membulatkannya ke int terdekat, lalu membagi setiap item dengan 100:
mymatrix=[100.1234567, 2.12345; 3.1234567891, 4.1234];
round(mymatrix .* 100) ./ 100
Keluaran , putaran terjadi dengan benar:
ans = 100.1200 2.1200
3.1200 4.1200
Opsi 4, tentukan output_precision(num)
Anda melihat bahwa opsi 3 di atas mempertahankan angka nol di belakangnya, yang mungkin tidak diinginkan, jadi Anda dapat memintanya untuk pergi dengan menyetel output_precision:
mymatrix=[100.1234567, 2.12345; 3.1234567891, 4.1234];
disp(mymatrix);
output_precision(3)
disp(mymatrix)
Keluaran :
100.1235 2.1235
3.1235 4.1234
100.123 2.123
3.123 4.123
Oktaf memiliki beberapa perilaku aneh ketika mencoba melakukan pembulatan karena oktaf berusaha keras untuk menerapkan pembulatan yang seragam ke semua item dalam matriks. Jadi jika Anda memiliki banyak kolom dengan nilai yang sangat berbeda, oktaf melihat nilai kecil dan berkata:"Saya harus mengonversinya menjadi eksponensial seperti 1.0e-04
, sehingga eksponensial yang sama diterapkan ke seluruh struktur data dalam matriks.
bagi mereka yang ingin membuatnya bekerja tanpa menggali jauh ke dalam diskusi mengapa hal-hal seperti ini (yaitu oktaf round
masih tidak mendukung argumen kedua yang mendefinisikan presisi).
SOLUSI :
a = [0.056787654, 0.0554464; 0.056787654, 0.0554464];
a
round_digit = 2;
if exist('OCTAVE_VERSION', 'builtin') ~= 0;
a = a.*(10^(round_digit));
if (a >= 0) a = floor(a); else a = ceil(a); endif;
a = a.*(10^(-round_digit));
else
a = round(a, round_digit);
end
a