【问题标题】:MATLAB - function input argument is undefined?MATLAB - 函数输入参数未定义?
【发布时间】:2012-08-04 04:35:15
【问题描述】:

我有这样的代码:

JSenin1 = [1 0 1 3 ;1 0 1 3 ;1 0 1 3 ;0 0 0 0 ;0 0 0 0 ;1 1 0 4 ;1 1 0 4 ;1 1 0 4 ;1 1 0 4 ;0 0 0 0];
JSenin2 = [1 0 0 3 ;1 0 0 3 ;1 1 1 3 ;1 1 1 2 ;1 1 1 2 ;0 0 0 0 ;1 1 0 4 ;1 1 0 4 ;1 1 0 4 ;1 1 0 4];
JSenin3 = [1 1 1 3 ;1 1 1 3 ;1 1 1 3 ;0 0 0 0 ;0 0 0 0 ;0 0 0 0 ;1 0 0 4 ;1 0 0 4 ;1 0 0 4 ;1 0 0 4];
JSenin4 = [1 0 0 3 ;1 0 0 3 ;1 0 0 3 ;0 0 0 0 ;1 0 1 2 ;1 0 1 2 ;0 0 0 0 ;1 1 0 3 ;1 1 0 3 ;1 1 0 3];

i = 1;
jadwal = 0;
while i < 11
    a = eq(1, JSenin1(i, 1));
    b = eq(1, JSenin2(i, 1));
    c = eq(1, JSenin3(i, 1));
    d = eq(1, JSenin4(i, 1));

    if a == 1
        fungsi1(JSenin1, JSenin2, JSenin3, JSenin4, i)
        i = fungsi1(i); %I want to take value "i" back from "fungsi1".

    elseif b == 1

    elseif c == 1

    elseif d == 1

    end
    i = i + 1;
end

调用类似这样的函数:

function [ jadwal,i ] = fungsi1( JSenin1,JSenin2,JSenin3,JSenin4,i )

    %UNTITLED Summary of this function goes here.
    %   Detailed explanation goes here.

    a = eq(JSenin1(i,1),JSenin2(i,1));
    b = eq(JSenin1(i,1),JSenin3(i,1));
    c = eq(JSenin1(i,1),JSenin4(i,1));
    if a == 1 && b == 1 && c == 1
        d = eq(JSenin1(1,4),JSenin2(1,4));
        e = eq(JSenin1(1,4),JSenin3(1,4));
        f = eq(JSenin1(1,4),JSenin4(1,4));
        if d == 1 && e == 1 && f == 1
            jadwal = ([JSenin1(i,2:3);JSenin2(i,2:3);JSenin3(i,2:3);JSenin4(i,2:3)]);
            i = i + JSenin1(i,4) - 1; %I need to take this variable,
                                      %but I got myself an error.
        elseif d == 1 && e == 1 && f == 0
        elseif d == 1 && e == 0 && f == 1
        elseif d == 0 && e == 1 && f == 1
        end
    end
end

错误信息:

ans =

     0     1
     0     0
     1     1
     0     0

??? Input argument "i" is undefined.

Error in ==> fungsi1 at 4
a = eq(JSenin1(i,1),JSenin2(i,1));

Error in ==> Tes at 16
        i = fungsi1(i);

我也阅读过 Stack Overflow 问题Input argument undefined - MATLAB function/subfunction,但我仍然不知道。

【问题讨论】:

    标签: function matlab


    【解决方案1】:

    这是你的意思吗?

    [jadwal, i] = fungsi1(JSenin1,JSenin2,JSenin3,JSenin4,i)
    

    调用具有多个输出参数的函数

    假设您编写如下函数:

    function [a_squared, a_cubed] = square_and_cube(a)
    a_squared = a^2;
    a_cubed = a^3;
    

    然后你会像这样调用那个函数:

    a = 2;
    [a_squared, a_cubed] = square_and_cube(a);
    disp(a_squared) % -> 4
    disp(a_cubed)   % -> 8
    

    我认为您的困惑之一是命名。如果我这样称呼它可能就不那么令人困惑了:

    x = 2;
    [x_squared, x_cubed] = square_and_cube(x);
    

    【讨论】:

    • 不,对不起,我想做的是将值 i 从 fungsi1 传递回主代码.. 但我不知道该怎么做 [jadwal, i] = fungsi1(JSenin1, JSenin2,JSenin3,JSenin4,i) 无关,只是我的实验... tq 来回答
    • 不,这正是这段代码的作用。和你写的不一样。试试看吧。
    • 那么,必须写什么?我不明白吗?只需从函数中回调值,我只需要写 i = fungsi1(i)?
    • 没有。将“if a == 1”之后的两行替换为 [jadwal, i] = fungsi1(JSenin1,JSenin2,JSenin3,JSenin4,i)。去做就对了。我将尝试编辑我的答案以澄清。
    • 还是错误先生,我需要更改的行是这个 i = fungsi1(i); with [jadwal, i] = fungsi1(JSenin1,JSenin2,JSenin3,JSenin4,i)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多