【问题标题】:How to change a script to a function?如何将脚本更改为函数?
【发布时间】:2020-06-30 15:34:34
【问题描述】:

我在导入到 MATLAB 的 Excel 工作表中有一组数据,但该组数据中有 NaN。我已经在主脚本中找到了一些代码来将 NaN 替换为想要的值:

max = x(:, 2);
min = x(:, 3);
for j = 1:length(max)
 for k = 1:length(min)
   if isnan (max(j))
     max (j) = ((max(j-1)+max(j+1))/2);
   elseif isnan (min(k))
     min (k) = ((min(k-1)+min(k+1))/2);
   end
 end
end

但是,我需要能够将此代码转换为用户定义的函数并从主脚本调用它,而不是在主脚本上进行所有计算。

我已经尝试开始制作函数了:

function [missingmax, missingmin] = missing(max, min)

但是,我无法弄清楚其余部分。

【问题讨论】:

    标签: matlab function for-loop


    【解决方案1】:
    function [max_x, min_x] = missing(x)
    max_x = x(:, 2);
    min_x = x(:, 3);
    for jj = 1:length(max_x)
        for kk = 1:length(min_x)
            if isnan (max_x(jj))
                max_x (jj) = ((max_x(jj-1)+max_x(jj+1))/2);
            elseif isnan (min_x(kk))
                min_x (kk) = ((min_x(kk-1)+min_x(kk+1))/2);
            end
        end
    end
    end
    

    你走在正确的轨道上。几件事:

    1. 您的输入是x,而不是min,max
    2. 您的输出是minmax,而不是missingmaxmissingmin
    3. j denotes the imaginary unit不建议用作变量,所以我改了。
    4. 您调用了变量minmax。不要那样做。曾经。严重地。别。如果你设法做到min=4 然后尝试计算一个数组的最小值,你会得到一堆错误。基本上:永远不要对变量使用内置函数的名称。

    【讨论】:

    • @Kat on Stack Overflow 请每个帖子只问一个问题。对于一个新问题,请发一个新帖子。不过,在这种情况下,我推荐reading the MathWork's own tutorial,因为这几乎是最基本的。我想你知道如何调用函数(实际上你已经在脚本中做到了),并且知道你为什么想要一个。
    • Matlab 函数通常创建为单独的文件,去创建一个新函数并将你的函数声明放在那里。将文件保存在您的工作目录中。保存函数后,您可以在工作目录中的任何脚本中通过其名称调用它,而无需“导入”任何内容
    【解决方案2】:

    由于您进行了线性插值,因此您无需在此处定义函数。它已经存在于 Matlab 中:fillmissing

    所以你可以像这样替换x 中的缺失值

    x_filled = fillmissing(x,'linear')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多