2013-05-22 3 views
0

У меня есть длинное выражение & Мне нужно заменить все символы умножения ' * ' с помощью символов умножения на один элемент ' .* '. Это занимает слишком много времени, чтобы сделать это вручную. Есть ли простой способ сделать это?Как заменить символ '*' на '. *' В выражении matlab?

Благодаря

+1

Cntrl + F? найти и заменить инструмент, который, по крайней мере, почти у всех приложений windows ... –

+0

Часто бывает полезно загрузить проект Matlab в другую среду IDE, например Eclipse, которая может выполнять поиск и замену регулярных выражений. –

+0

Почему вы хотите заменить '*' '. *'? Я предполагаю, что вы знаете, что '[1 2] * [1; 2]' не равно '[1 2]. * [1; 2]' (это будет фактически ошибка). – Oleg

ответ

0

Я думаю, что Ctrl + H является то, что вы ищете.

+0

Есть ли способ сделать это автоматически в рамках функции? – user2408433

+0

Я предполагаю, что вы меня зовут «раз», но я не совсем уверен, что это будет ** автоматически ** в перспективе, которую вы даете термину! – fpe

+0

Хорошо, если я собираюсь использовать Ctrl + H, есть еще одна проблема. Matlab не может отобразить целое выражение для меня, он говорит: «Усечение вывода. Текст превышает максимальную длину строки в 25 000 символов для отображения окна команд». Поэтому я не могу использовать Ctrl + H, что мне теперь делать? – user2408433

0

Я хотел бы сделать два очка.

  1. Я бы сделал замену регулярным выражением. как regexprep('\.?*\*','.*'), который будет принимать во внимание, если уже есть ..

  2. Способ для этого. Программа sed была бы идеальна для этого. Но вы могли бы также сделать это в Matlab - перебрать все файлы и заменить текст.

Имейте в виду, что Matlab не будет знать об изменениях, пока не перефразирует файлы. Это означает, что вы не можете использовать замененные функции немедленно.

+0

Спасибо большое bdecaf, его очень полезно. Также я нашел это http://www.mathworks.com/matlabcentral/fileexchange/19217-sym2str. – user2408433

+0

Ох - вы не указали, что это был результат символического расчета. но он все равно должен работать. – bdecaf

0

Чтобы сделать это программно, вы должны использовать регулярную замену выражение:

>> str = 'x * y .* z'; 
>> regexprep(str, '\.?\*', '.*') 
ans = 
x .* y .* z 

Регулярное выражение \.?\* означает «соответствовать все строки, которые являются 0 или 1 точки (\.?), а затем символ умножения (\*), т.е. соответствует строкам '.*' и '*', и заменяет их обоих с '.*'

0

Matlab имеет встроенную функцию (я думаю, что это во всех установках), чтобы сделать это:.. vectorize Symbolic Toolbox использует эту функцию. Он также преобразует ^ и / в элементарные эквиваленты. Его основанные на strrep и strfind, которые объединяются, будут быстрее, чем реализация медленного регулярного выражения Matlab. введите edit vectorize в командном окне, чтобы увидеть краткий код, который вы можете легко скопировать и изменить для своих нужд.

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