algorithm - 在matlab中表示长数字

标签 algorithm matlab variables numbers

我正在 Matlab 中做一个无线通信算法,在计算不同距离的损失时计算对数模型的损失和偏差。

一切正常,这是我的功能: d0 = 引用距离(始终相同) nombre = 这是一个 .mat 文件,它有一个矩阵 250x2,其中第一列有距离(从那里我取了不同的值),第二列有值 Lfs2 = 这是距离为 d0 的丢失

Lfs2 = -20*log10((4*pi*d0)/((299792458)/(freq*10^6)));

我刚刚制定了算法,我的 250x2 矩阵一切正常,但出于测试目的,我用 4246x2 矩阵制作了一个蓝牙信号模型,但是当我用这个值做我的算法时,我的 n(丢失因子)是正确的计算,但我的 desv 因子不是..这是因为数字太大了 INF

    function [ n , desv ] = perd_desv(d0, Lfs2, nombre)
    %UNTITLED Summary of this function goes here
    %   Detailed explanation goes here

    % Comprobamos que Pld0 es una perdida y no una atenuación
    if Lfs2>0
        Lfs2 = -Lfs2;
    end
    Lfs2;

    %Nombre = 'Practica28.mat';
    load(nombre);


    medida = Pl(:,2);
    distancia = Pl(:,1);

    % Calculo la n %
    syms n;
    p = 0;
    for i=1:size(medida,1)
        p = p + (medida(i)-(-Lfs2)-10*n*log10(distancia(i)/d0))^2;
    end
    perdida = double(solve(diff(p)));
    n = sprintf('%.2f',perdida);

    % Calculo de la desv
    w = 0;
    for i=1:size(medida,1)
        w = w + (1/size(medida,1))*(medida(i)-(Lfs2)-10*perdida*log10(distancia(i)/d0))^2;
    end
    w = 0;
for i=1:size(medida,1)
    w = w + (1/size(medida,1))*(medida(i)-(-Lfs2)-10*perdida*log10(distancia(i)/d0))^2;
end
desv = sprintf('%.2f',double(sqrt(w)));

问题是..我知道在 Matlab 中有用于系列总和的 symsum..但我看不到如何使用 symsum 来定义此算法..而且我不知道如何表示该数字适合我的变量..

非常感谢

最佳答案

一个建议(当您需要肯定不会失败的高速计算时要遵循)是“展开”您的对数。由于对数的特性,可以很容易地表示:

log(a/b) = log(a)−log(b)

对于 ab 适合 double 的情况范围,但 a/b 没有。这是一个猜测(因为您没有提供关于 medidadistancia 相对于 d0 的数量级的提示)。

所以,尝试编写如下代码:

% constants below may be calculated just once
Lfs2 = -20*(log10(4*pi*d0) - log10(299792458) + 6 + log10(freq))

或:

w = w + (1/size(medida,1))*(                      ...
     medida(i)                                    ...
   - Lfs2                                         ...
   - 10*perdida*(log10(distancia(i)) - log10(d0)) ...
)^2;

此外,验证是否 size(medida,1)有时不为零(没有提示是如何计算的,除了它是某个矩阵的第一列)。

关于algorithm - 在matlab中表示长数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26235965/

相关文章:

matlab - MATLAB 中的均值滤波器没有循环或信号处理工具箱

c - 跟随 malloc(0) 返回的指针

崩溃没有错误,排序算法

Matlab:如何使用冒号运算符将结构元胞数组转换为结构数组?

c - 我应该使用 "rand % N"还是 "rand()/(RAND_MAX/N + 1)"?

java - Matlab R2012B 如何禁用Java虚拟机?

python - 试用不使用字典的动态Python变量创建

c# - 有没有办法查明是否已设置属性或变量?

arrays - 是否总是可以在所有维度上对多维数组进行排序?如何?

algorithm - 如何为多人游戏随机创建公平迷宫?