2012-04-13 5 views
0

Кажется, я не умею ни FORTRAN, ни MATLAB, хотя немного знаю обо всех этих.Неявный интерфейс в matlab

В то время как я нашел, что MATLAB хорошо справляется с матрицами, я также нашел неявный интерфейс в программе fortran довольно удобным (я могу передавать заявленные переменные, особенно некоторые большие массивы, в неявные функции, не помещая их в качестве входных фиктивных аргументов, и также я могу легко передавать переменные, заявленные в интерфейсе обратно к вызывающей программе).

Мне просто интересно, существует ли какой-либо подобный механизм в MATLAB как неявный интерфейс, чтобы я мог выполнять работу так же, как и с FORTRAN. (Глобальная переменная кажется не очень хорошей, поскольку, если я попытаюсь назвать функцию часто, она просто превратилась бы в утомительную работу - может быть, я ошибаюсь)

Как вы думаете? Благодарю.


Вот пример:

PROGRAM test_function 
IMPLICIT NONE 
REAL :: A, B 
REAL :: C,D,E 

A = 1 
B = 2 
D = 3 
E = xf(A)-A 

WRITE (*,*), "A = ", A 
WRITE (*,*), "B = ", B 
WRITE (*,*), "C = ", C 
WRITE (*,*), "D = ", D 
WRITE (*,*), "E = ", E 

CONTAINS 
FUNCTION xf(x) 
    IMPLICIT NONE 
    REAL, INTENT(IN) :: x 
    REAL :: xf 
    C = x+B 
    D = x+D 
    xf = A+B+C 
END FUNCTION xf 

END PROGRAM test_function 

D передается в функцию хр (·), не принимаются в качестве фиктивного аргумента, и D также может быть передан с каких-либо ограничений. Результат, указанный в программе, следующий:

A = 1.0000000  
B = 2.0000000  
C = 3.0000000  
D = 4.0000000  
E = 5.0000000 
+0

Мне непонятно, что такое неявный интерфейс в Fortran. Из текста вашего вопроса, означает ли это, что переменные (возможно, с тем же именем) каким-то образом передаются и выходят из подпрограмм, не передаваясь в качестве аргументов? – Pursuit

+3

Мне очень ясно, что подразумеваемый интерфейс в Fortran. Но использование термина в вопросе заставляет меня подозревать, что OP использует этот термин в не-Fortran-стандартном режиме. Может ли OP быть более явным? –

+0

@ Lagrange: не могли бы вы отредактировать свои фрагменты кода и удалить их из комментариев. Очень сложно понять, что ваша программа сейчас. –

ответ

0

Я думаю, что теперь я начинаю понимать ваш вопрос.

Для записи эта функция Fortran, которую вы, по-видимому, передаете аргументам в функции, не ссылаясь на них в сигнатуре функции, является ПЛОХОЙ. И, конечно, он работает только здесь, потому что определение функции содержится в той же области источника, что и сама программа.

Если вы старше 18 лет, отправляйтесь прямо и делайте опасные вещи в своих программах. Если вы этого не сделаете, немедленно прекратите и выполните все правильно - не передавайте аргументы в функции, отличные от своих списков аргументов, и не пропускайте ничего из функции, кроме как через результат самой функции.

Вы также можете сделать это в Matlab. Если вы поместите переменную, называемую, скажем, «a» в вашей рабочей области, то любой скрипт, который ссылается на переменную с именем «a», ссылается на эту переменную. Для функций Matlab это отличается, что определяет собственные единицы измерения. Чтобы ссылаться на переменную рабочего пространства из функции Matlab, вам нужно либо передать ее, либо использовать возможности глобальной переменной. Если вы не понимаете разницу между скриптами и функциями в Matlab, нажмите на документацию.

+0

Спасибо за ваш совет. Я всегда буду держать это в голове.Если я объявляю константу (параметр), то она может быть передана функции безопасно, не так ли? –

+1

Пока вам не исполнилось 18, вы никогда не должны «передавать» аргументы в или из функции, кроме как через список аргументов (включая аргумент return). Как только вам исполнится 18 лет, вы можете делать то, что вам нравится. Будучи взрослым, я допускаю использование глобальных параметров для таких значений, как pi, e, скорость света, вещи, которые вряд ли изменятся. –

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