Во-первых, 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);