2015-04-27 2 views
1

У меня есть матрица 1 x 118, называемая current_load, которую мне нужно периодически обновлять. Эта матрица находится в основном рабочем пространстве Matlab (как показано ниже в коде).Как передать матрицу по ссылке или получить возвращаемое значение функции

current_loads = zeros(1, 118); 
for col=1:118 
    current_loads(1,col)=10; %// Initially give all nodes a current load of 10  
end 
recursive_remove(current_loads); %calling function 

Этой матрица будет передан вызовом функции recursive_remove (, показанным ниже).

function updater = recursive_remove(current_load) 
    current_load(1,3) = 2.6; %// This update can't be seen from main ?? 
    %this function will be called recursively later 
end 

Но все, что я делаю обновление для этой current_load матрицы из функции, он не будет обновляться, так как я не знаю, как передать его по ссылке.

Я новичок в Matlab. Я был бы очень признателен, если вы можете показать пример, как обращаться с этим.

ответ

0

Выход функции recursive_remove не определен, поэтому вы не можете использовать нигде.

В matlab вы определяете выходы функций с квадратными скобками, как показано ниже.

function [ output1, output2 ] = recursive_remove(input1, input2)

Выходы теперь могут быть переданы в другие MATLAB docs - functions.

При вызове функции в приведенном выше примере в другой функции, как вы делали в ваш первый бит кода, который вы могли бы назвать его, как показано:

current_loads = zeros(1, 118); 
for col=1:118 
    current_loads(1,col)=10; %Initially give all nodes a current load of 10  
end 
[ output1, output2 ] = recursive_remove(input1, input2); %calling function 

С помощью этого синтаксиса вы можете взять output1 и назвать его в вход следующей функции recursive_remover

+0

Спасибо, что показал мне пример кода. Сейчас очень ясно, что –

+0

просто нужно очистить, что этот ответ проходит по значению, а не по ссылке. – lcjury

+0

спасибо, на самом деле, я всегда путаю двух, только что нашел это, и это объяснило это очень хорошо, сомневаюсь, что я забуду это сейчас ... http://stackoverflow.com/questions/373419/whats-the-difference-between-passing- by-reference-vs-through-value-value – bilaly

2

EDIT: «Как передать параметр по ссылке в Matlab» Вы можете решить проблему прохождения ваших аргументов по ссылке

Вам нужен handle class

Handle Классы

объектов, которые разделяют ссылки с другими объектами

это, создайте файл с именем HandleObject.m с этим кодом:

classdef HandleObject < handle 
    properties 
     Object=[]; 
    end 

    methods 
     function obj=HandleObject(receivedObject) 
     obj.Object=receivedObject; 
     end 
    end 
end 

Тогда вы можете сделать что-то подобное

Object = HandleObject(your matrix) 
yourFunction(Object) 

А внутри вашей функции

function yourFunction(myObject) 
    myObject.object = new matrix; 
end 

С, что вы можете достичь какой-то проход по ссылке и избежать получать много копий trought программы.

+0

Я думал именно об этом, когда увидел титул вопроса, только чтобы увидеть, что на самом деле это не вопрос. Хороший ответ в любом случае! – Hoki

+0

Почему это не так ?, он хотел изменить значение матрицы внутри функции. – lcjury

+0

Ну, честно говоря, ОП намекнул, что это то, что он искал. Но из того, что я понимаю, он настоящий титул вопроса должен больше напоминать «как вернуть результат из функции». Это мало связано с тем, как ** передать ** аргумент функции, а скорее как вернуть их. В любом случае, я думаю, что ваш ответ заслуживает того, чтобы остаться, но чтобы сделать его более понятным сейчас, возможно, вам следует его отредактировать и добавить сверху, что вы изначально отвечали «Как передать параметр по ссылке в Matlab» – Hoki

Смежные вопросы