在 Matlab 中转换为十进制?
Converting to decimal in Matlab?
我请求帮助编写代码,在 Matlab 中执行以下操作:
(1) 我有一个维度为 nx1
的列向量 A
列出了 中数字 B
逗号后的 n
数字0
和 1
之间的基数 4
我所说的 base 4 的意思已经解释 here
例子
n=18
A=[1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2]' %representing B=0.121212121212121212
(2)我想将B
转换为base 10(十进制表示),将得到的十进制数C
存入一个1x1
矩阵
你能帮我理解如何做到这一点吗?
方法如下:
C = base2dec(char(A(:).'+'0'), 4)*4^-numel(A);
这会将数字转换为基数 4
的整数,然后除以 4
的适当幂。
考虑到 C
将受到 double
精度的限制,因此可能会丢失一些小数位。如果你想要更精确,你需要使用符号变量。
我假设你有小数位来减慢你想要小于 1 的幂。这是一个蛮力循环来做到这一点。
C = 0;
for x = 1:n
C = res + A(x) * 4 ^ (-x);
end
C = 0.399999999994179
这是另一种方式
exp = (-1 * (1:18))';
C = sum(A .* 4 .^ exp);
C = 0.399999999994179
以您的 link 为指导,让我们看看 15
的十进制数。这对应于 33
的基数 4。在这种情况下 A = [3 3]
和 exp = [1 0]
。这导致:
A = [3 3];
exp = [1 0];
C = sum(A .* 4 .^ exp);
C = 15
您的 link 有一个 link 解释转换的基础知识。
我请求帮助编写代码,在 Matlab 中执行以下操作:
(1) 我有一个维度为 nx1
的列向量 A
列出了 中数字 B
逗号后的 n
数字0
和 1
我所说的 base 4 的意思已经解释 here
例子
n=18
A=[1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2]' %representing B=0.121212121212121212
(2)我想将B
转换为base 10(十进制表示),将得到的十进制数C
存入一个1x1
矩阵
你能帮我理解如何做到这一点吗?
方法如下:
C = base2dec(char(A(:).'+'0'), 4)*4^-numel(A);
这会将数字转换为基数 4
的整数,然后除以 4
的适当幂。
考虑到 C
将受到 double
精度的限制,因此可能会丢失一些小数位。如果你想要更精确,你需要使用符号变量。
我假设你有小数位来减慢你想要小于 1 的幂。这是一个蛮力循环来做到这一点。
C = 0;
for x = 1:n
C = res + A(x) * 4 ^ (-x);
end
C = 0.399999999994179
这是另一种方式
exp = (-1 * (1:18))';
C = sum(A .* 4 .^ exp);
C = 0.399999999994179
以您的 link 为指导,让我们看看 15
的十进制数。这对应于 33
的基数 4。在这种情况下 A = [3 3]
和 exp = [1 0]
。这导致:
A = [3 3];
exp = [1 0];
C = sum(A .* 4 .^ exp);
C = 15
您的 link 有一个 link 解释转换的基础知识。