2017-02-22 51 views
0

В главном м-файл у меня естьMatlab: func2str из функции в м-файле

conformal = maketform('custom', 2, 2, [], @conformalInverse_0001, []); 

используется в функции imtransform, что относится к функции, определенной в conformalInverse_0001.m:

function U = conformalInverse_0001(X, ~) 
%#codegen 
U = [zeros(size(X))]; 
Z = complex(X(:,1),X(:,2)); 
W = 1./(4.*Z.^2-1); 
U(:,2) = imag(W); 
U(:,1) = real(W); 

Как я могу получить строку '1./(4.*Z. ^2-1)' в основной программе?

+3

Вы не можете, если ваша функция не возвращает строку. – Suever

+0

Вы хотите, чтобы вы читали в конформномInverse_0001.m и анализировали его, чтобы извлечь определенную строку? Я предполагаю, что conalInverse_0001.m - ваша собственная функция? И почему вы хотите эту строку как строку, а не как функцию? – horchler

+0

@horchler: Я хочу обработать жало и использовать ее как часть имен файлов и файлов http://stackoverflow.com/questions/42186812/matlab-reference-to-functions-in-a-set-of-m- files –

ответ

0

Я взломал два решения с TextScan: первый зная номер строки и второй поиск строку, которая начинается с подстроки «W =»

% read line line_num = 5 and process string 
f_id = fopen(conformalInverse_m_path); 
conformalInverse_cell = textscan(f_id,'%s','delimiter','\n');    %disp(conformalInverse_cell); % {68×1 cell} 
func_string = conformalInverse_cell{1}{line_num};       disp(func_string); % W = 1./(4.*Z.^2-1); OK 
func_string_2=func_string(5:end-1);           disp(func_string_2); % 1./(4.*Z.^2-1); OK 


% read first line that starts with substring 'W = ' and process string 
W_string = 'W = '; 
for i=1:100 
    func_string = conformalInverse_cell{1}{i}; 
    Firt4=func_string(1:4);             %disp(['i = ', num2str(i), ': First4 = ', Firt4]); 
    if strcmp(Firt4,W_string) == 1; line_nr = i; break; end; 
end 
func_string_2 = conformalInverse_cell{1}{line_nr};       
func_string_3=func_string_2(5:end-1);  
0

я нашел способ решить эту проблему, но это не так элегантно ...

Предположим conformalInverse_0001.m файл в папке.

Вы можете проанализировать файл как текстовый файл и выполнить поиск формулы.

Пример:
Предполагаете, вам понравилось 5-я строка в файле и начать с W =.
Вы можете использовать что-то вроде следующего кода для чтения '1./(4.*Z.^2-1)' в основной программе:

%Open file for reading. 
fid = fopen('conformalInverse_0001.m', 'r'); 

%Read 5 lines. 
s = textscan(fid, '%s', 5, 'delimiter', '\n');  
fclose(fid); 

%Get the 5'th line. 
s = s{1}(5); 

%Convert cell array to string. 
s = s{1}; 

%Get characters from the 5'th character to one char before end of string. 
s = s(5:end-1) 

Результат: s = 1./(4.*Z.^2-1)

Вы можете проверить textscan документацию для поиска более элегантное решение.

0

Я не уверен, я полностью понимаю проблему здесь, но что о добавлении в вашу conformalInverse_0001 функцию что-то вроде:

str = '1./(4.*Z.^2-1)'; 
save('temp_str','str') % or whatever data that you want to save from it 

, а затем добавить в основной файл:

load('str.mat')% or you can use 'impordata' 

где вы хотите его извлечь.