在 Matlab 中转换为十进制?

Converting to decimal in Matlab?

我请求帮助编写代码,在 Matlab 中执行以下操作:

(1) 我有一个维度为 nx1 的列向量 A 列出了 中数字 B 逗号后的 n 数字01

之间的基数 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 解释转换的基础知识。