【问题标题】:Matlab Function weird behavior [duplicate]Matlab函数奇怪的行为[重复]
【发布时间】:2016-01-26 02:10:50
【问题描述】:

我在使用 Matlab 时遇到了这个问题(我也是 Matlab 新手)

我写了这个函数:

function pret = p_t(i)

    if (i<=0)
        pret = (1/4)*exp((1/2)*i);
    elseif ((1 <= i))
        if(i <=4)
            pret = (1/9)*(i-1);
        else 
            pret = 0;
        end
    else
        pret = 0;
    end  

结束

所以如果我像这样运行它 p_t(1:4) 我得到 0; 0.1111; 0.2222; 0.3333 基本上每次它到达它应该为零的部分时,无论是否有一些“有效”值在 inteval 中,它都会给我全零 例如 p_t(-5:5) 给我全零

http://puu.sh/kYEyo/6bf0574d34.png这是我正在尝试编程的函数(“sonst”是德语的“否则”或“否则”)

问题可能出在哪里? 非常感谢!

【问题讨论】:

  • 只是为了好玩):你可以获得与内联函数相同的内容:x =@(t) ( ~( (t &lt; 1 &amp; t &gt;0) | ( t &gt;4)) ) * ( (0.25*exp(0.5.*t))*(t&lt;=0) + ( (1/9) *(t-1) *( t&lt; 4 &amp; t&gt; 1 )))

标签: matlab function intervals


【解决方案1】:

我可能错了,但 -if- 是一个二进制表达式,因此当用于除全零以外的任何向量时,它的计算结果为真。此代码似乎不会遍历传递的向量。我不确定答案应该是什么样子,但这会遍历 i 的每个元素并将答案作为另一个向量存储在 pret 中。

function pret = p_t(i)
    pret=zeros(size(i));
    for j=1:length(i)
        if (i(j)<=0)
            pret(j) = (1/4)*exp((1/2)*i(j));
        elseif ((1 <= i(j)))
            if(i(j) <=4)
                pret(j) = (1/9)*(i(j)-1);
            else 
                pret(j) = 0;
            end
        else
            pret(j) = 0;
        end
    end

我希望这就是你要找的。​​p>

【讨论】:

  • 从文档中给出准确的解释:“当结果为非空且仅包含非零元素(逻辑或实数)时,表达式为真。”一旦向量的一个元素与条件不匹配,它就会被评估为假。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 2021-02-21
  • 2015-10-24
  • 1970-01-01
  • 2015-12-10
  • 2017-01-14
相关资源
最近更新 更多