我正在寻求帮助来编写代码,在Matlab中执行以下操作:
(1)我有一个维度为A
的列向量nx1
,列出 base 4中数字n
的逗号后的B
位数介于0
和1
我对基数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
转换为基数10 (十进制表示)并将获得的十进制数C
存储在1x1
矩阵中
你能帮我理解怎么做吗?
答案 0 :(得分:5)
这是一种方式:
C = base2dec(char(A(:).'+'0'), 4)*4^-numel(A);
这会将数字转换为基数4
中的整数,然后除以4
的适当幂。
考虑到C
将受double
精度限制,因此可能会丢失一些小数。如果你想要更高的精度,你需要使用符号变量。
答案 1 :(得分:2)
我假设你在那里有小数位,以减慢你想要的功率小于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
使用您的链接作为指南,让我们看一下15
的十进制数字。这对应于33
的基数4。在这种情况下A = [3 3]
和exp = [1 0]
。这导致:
A = [3 3];
exp = [1 0];
C = sum(A .* 4 .^ exp);
C = 15
您的链接有一个link,用于解释转化的基本知识。