Чтобы связать значение в .M-файле с .MAT-файлом - PullRequest
2 голосов
/ 17 декабря 2010

Я пишу программу на MATLAB для решения интегралов, и у меня есть функция в .M-файле.Теперь мне интересно, как я могу написать программу в .MAT-файле, которая позволяет пользователю устанавливать значение, которое существует в обоих файлах..M-файл выглядит так:

function fh = f(y)
fh = 62.5.*(b-y).*(40-20.*exp(-(0.01.*y).*(0.01.*y)));

и, как вы можете видеть, функция зависит от двух переменных, y и b.Я хочу, чтобы пользователь установил б.Я попытался поместить b = input ('Введите значение b:') в .M-файл, но по какой-то причине пользователю пришлось бы вводить одно и то же значение четыре раза.
Могу ли я запросить значениеб в .MAT-файле?

Ответы [ 2 ]

2 голосов
/ 17 декабря 2010

Во-первых, m-файлы хранят код (т.е. функции), а MAT-файлы хранят data (т.е. переменные).Вы можете сохранить переменные рабочей области в MAT-файл, используя функцию SAVE , и загрузить их в рабочую область из файла, используя функцию LOAD .Если у вас есть пользователь, выбирающий значение для b, а затем сохраняющий его в MAT-файл (например, 'b_value.mat'), вы можете просто загрузить значение из MAT-файла в функцию m-файла следующим образом:

function fh = f(y)
  load('b_value.mat','b');
  fh = 62.5.*(b-y).*(40-20.*exp(-(0.01.*y).*(0.01.*y)));

Тем не менее, это не очень хороший способ справиться с более крупной проблемой, которая, я думаю, у вас возникла.Это требует, чтобы вы жестко закодировали имя MAT-файла в вашей функции f, плюс он выдаст вам ошибку, если файл не существует или если b отсутствует в файле.

Давайте рассмотрим то, что, на мой взгляд, является основной проблемой и как лучше подойти к решению ...

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

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

В качестве примера я покажу вам, как это можно сделать, написав f как анонимную функцию вместофункция m-файла.Сначала пользователь должен выбрать параметр b, а затем создать свою анонимную функцию следующим образом:

b = input('Type in the value of b: ');
f = @(y) 62.5.*(b-y).*(40-20.*exp(-(0.01.*y).^2));

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

А вот пример использования f при вызове QUAD :

q = quad(f,lowerLimit,upperLimit);
0 голосов
/ 17 декабря 2010

В вашем файле m объявите b как глобальное

function fh = f(y) 
    global b
    fh = 62.5.(b-y).(40-20.*exp(-(0.01.y).(0.01.*y)));

Это позволяет получить доступ к переменной из другого файла без необходимости создания другой функции для установки значения b.Вы также можете добавить b к аргументам вашей функции fh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...