Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » помогите с Matlab

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

Открыть новую тему     Написать ответ в эту тему

dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
это относится к последней операции?

1) Коротко - ДА.
2) Подробно - shading относится к текущему хэндлу(ам) для объекта(ов) surface, а т.к. slice() использует для отрисовки именно массив surface-ов и возвращает их хэндлы, то ДА.
3) Дословно из хелпа матлаба:

Код:
 
    SHADING controls the color shading of SURFACE and PATCH objects.
...
    SHADING is an M-file that sets the EdgeColor and FaceColor properties
    of all SURFACE objects in the current axes. It sets them to the
    correct values that depend upon whether the SURFACE objects are
    representing meshes or surfaces.
 


Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 19:43 08-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
хорошо, спасибо...
но тут вопрос не о шадинге как таковом, а том правильно ли я переделал
конструкцию
slice(), shading flat;
в
slice();
shading flat;

 
и ещё больше меня волнует вопрос о правильности передачи хэндла из функции...
почему-то
 
main.m
  global global_h;
 
slice3d.m
function slice3d()
  global global_h;
...
  global_h = slice();
 
не работает
 
не вижу global_h в головной программе...
что не так?

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 20:40 08-04-2012 | Исправлено: akaGM, 20:42 08-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
правильно ли я переделал  
конструкцию  
slice(), shading flat;  
в  
slice();  
shading flat;  

А это почти одно и то же - можно писать несколько команд в одну строку через запятую, правило такое:
 
proc1(), proc2();
-- то же самое что
proc1()
proc2();
 
в отличие от
 
proc1(); proc2();
-- то же самое что
proc1();
proc2();
 
 

Цитата:
main.m  
  global global_h;  
 
slice3d.m  
function slice3d()  
  global global_h;  
...  
  global_h = slice();  
 
не работает  

 
Только что проверил - вот такое работает:
 
main.m

Код:
 
function main
  global global_h;
  slice3d;
  disp(global_h);
 

 
slice3d.m

Код:
 
function slice3d
  global global_h;
  global_h = 123;  
 

 
1) Переменная будет недоступна (точнее, равна []), пока ей какое-нибудь значение не присвоишь. Т.е. у тебя main не видит переменную, т.к. там она только ОБЪЯВЛЯЕТСЯ, а реальное присвоение значения (и выделение памяти) идёт в slice3d(). Вот сначала вызови slice3d() из main - и появится твоя переменная.
 
2) И слово "function main" в головной программе не забыл? А то тогда действительно переменная не будет видна из main, ибо её область видимости тогда переадресуется из main в матлабную комстроку...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 22:03 08-04-2012 | Исправлено: dimitriy7, 22:18 08-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7

Цитата:
И слово "function main" в головной программе не забыл?
конечно забыл, бо не знал...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 23:10 08-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Ты чего, заголовок функции написать забыл, что ли?

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 23:16 08-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
в вызываемой написал, а в вызывающей и не знал что нужно, ни в одном примере не видел...
как в сях, типа main() что ли? теперь буду писать...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 00:40 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
типа main() что ли?

Не, просто у каждой функции должен быть заголовок -- и у главной ф-ции в m-файле он должен совпадать с именем самого m-файла.
Вроде такого:
 
my_func.m
Код:
 
function [выходные параметры] = my_func (входные параметры)
...тра-ля-ля...

 
и я вроде ж писал про структуру m-файла в общем виде:
mainproc.m

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 16:53 09-04-2012 | Исправлено: dimitriy7, 16:53 09-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7
ну может и писал, только во всех примерах, кот. я видел (включая демонстрашки из хелпа), заголовков нет...
вот, мой стартовый код для slice(), и ничего, работает...
короче, пора книжки читать :)

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 17:15 09-04-2012 | Исправлено: akaGM, 17:17 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
заголовков нет...  

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

Цитата:
короче, пора книжки читать

А они есть, книжки по матлабу? У нас он не особо популярен, на русском что-то нормальных учебников не видел (плохо искал?).
Найдёшь - поделишься?
 
Добавлено:
ps
тьфу, ну вот почему у тебя двоеточие со скобкой нормально выглядят, а у меня в цитате твоей же фразы - как смайл в колпаке?

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 17:30 09-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7

Цитата:
А они есть, книжки по матлабу?

у меня родные руководства + бумажный Смоленцев ("вейвлеты в Matlab" и "связь Matlab С++")
+
а из электронных
matlab 7: численные методы и "Spectral Methods in Matlab Lloyd N. Trefethen"
а вообщe их до фигища..
щас...
вот 73 штуки, например, может не очень свежие, но всё-таки:
http://itbookz.ru/catmath.php
 

Цитата:
тьфу, ну вот почему у тебя двоеточие со скобкой нормально выглядят, а у меня в цитате твоей же фразы - как смайл в колпаке?

чек-бокс внизу

Цитата:
Разрешить смайлики?

граф.смайлики маздай (с) мой :)

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 17:52 09-04-2012 | Исправлено: akaGM, 18:29 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
вот 73 штуки, например, может не очень свежие, но всё-таки:  
http://itbookz.ru/catmath.php

А, спасибо, посмотрю.
Только там на русском мало - а на английском вроде и хелпа матлабного достаточно...
 

Цитата:
чек-бокс внизу  

а я думал - это общефорумная настройка для отображения смайлов вообще... а оно, оказывается, работает для отдельных сообщений :)

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 18:32 09-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7

Цитата:
Только там на русском мало

а на фиг они тебе вообще? тематические уже нужны...
 
как запретить масштабироваться элементам гуи при изменение размеров окна?

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 18:46 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, самые универсальные книжки - по версиям 6.0-6.5-7.0 (они же R12-R13-R14).
 
Учебники для более ранних - даже и не смотри, с R12 отчасти поменяли синтаксис и структуру m-файлов и механизм работы с подфункциями (и очень сильно переделали виртуальную машину, структуру байт-кода, и самое главное - всю графику).
 
С другой стороны, последняя адекватная версия - 7.5 (R2007b) - в более поздних опять что-то переписали, примеры из старых учебников часто не работают (особенно с символьными вычислениями)
 
У тебя какая версия-то?
 

Цитата:
как запретить масштабироваться элементам гуи при изменение размеров окна

Не знаю... Это от версии сильно зависит.
Может проще вообще запретить изменять размеры окна?

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 18:48 09-04-2012 | Исправлено: dimitriy7, 18:56 09-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у меня R2007b куплена (со всеми книжками) и R2009b украдена...
 

Цитата:
Может проще вообще запретить изменять размеры окна?
не, графики иногда побольше нужны...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 19:00 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Так тебе что нужно - чтобы при изменении размеров окна - график масштабировался строго с сохранением пропорций? Или кроме самого графика ещё какие-то элементы уплывают?
 
Если надо только сохранить пропорции графика - то перед рисованием (там где вызов figure(); ) надо написать
hf=figure();
axis vis3d;
ha=gca; % получили хендл axis
set(ha, PlotBoxAspectRatioMode, 'manual', PlotBoxAspectRatio, [1 1 1]);
ИЛИ
set(ha, DataAspectRatioMode, 'manual', DataAspectRatio, [1 1 1]);
(ну или свои числа подставишь вместо [1 1 1] - по обстоятельствам)
 
 
PS
переключение на объект axis с известным хендлом ha делается так:
axes(ha);
-- это бывает нужно, если какие-нибудь графические функи автоматом насоздают собственных "левых" экземпляров axis-ов (такое случается), а тебе понадобится вернуться к самому первому главному экземпляру. Или наоборот - если нужен доступ именно к неявно созданному axis, то получай его хендл через gca - он возвращает хендл последнего созданного экземпляра axis.
 
PPS
Вроде уже писал, что axis - это не только оси, но вообще всё поле для графических построений вместе со всем содержимым (этакий контейнер)... и выше стоят только subplot и figure...

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 20:55 09-04-2012 | Исправлено: dimitriy7, 21:16 09-04-2012
Raskolbasss

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimitriy,
можешь помочь с созданием интерфейса для той программы?
чтобы было поле для ввода исследуемого сигнала, чтобы можно было выбрать вариант программы ( которую ты писал, и потом которая с занулением фазы), и чтобы были приведены графики входного и выходного сигнала?
очень надо..

Всего записей: 24 | Зарегистр. 10-03-2012 | Отправлено: 21:12 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Raskolbasss
 
Графики уже были. Или надо как-то по-другому рисовать? И графики чего - волны, АЧХ, ещё чего?
 

Цитата:
чтобы можно было выбрать вариант программы  

Выбор с командной строки сойдёт?
Вроде:
fourier(0) -- занулит фазу
fourier(x, '+') -- прибавит к фазе число x
fourier(y, '*') -- даст линейный по частоте фильтр с множителем y
(просто эти варианты уже есть)
 

Цитата:
чтобы было поле для ввода исследуемого сигнала

поле - где? В смысле - какая-то кнопка на форме, по которой появится виндовый запрос с выбором файла? - это не ко мне, я интерфейсы рисовать не умею.
Могу сделать ввод имени входного файла с комстроки, вроде fourier('C:\file.wav', 0)
 
И ЕЩЁ -  
имей в виду, матлаб бинарники не компилирует, а только делает байт-код для выполнения на собственной виртуальной машине. Поэтому полноценной .exe-программы не получится, и запускать её всё равно придётся из среды матлаба.

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 21:15 09-04-2012 | Исправлено: dimitriy7, 21:35 09-04-2012
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7

Цитата:
Так тебе что нужно - чтобы при изменении размеров окна - график масштабировался строго с сохранением пропорций? Или кроме самого графика ещё какие-то элементы уплывают?
с графиками всё в порядке, а вот слайдеры и батоны масштабируются (некрасиво увеличиваются с увеличением окна)...
 
Raskolbasss
на самом деле экзюк можно сделать, если у тебя установлен матлабовский компилятор
 
mbuild -setup
mcc -m file.m
 
только вместе с ним придётся таскать или mcr-библиотеки или этот экзюк будет весить много-много мегабайт...

Всего записей: 24838 | Зарегистр. 06-12-2002 | Отправлено: 21:54 09-04-2012
Raskolbasss

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
да, нужны те графики которые были (волна и ФЧХ-до и после)
 
выбор с командной строки? ну то есть у меня есть три кнопки, на первой написано - зануление фазы. на второй - прибавление к фазе.
 третье - даст линейный по частоте фильтр. ты это имел ввиду?  
 
а ввод фаула с командной строки вполне устроит.  
 
кстати, я сталкивался с таким программками в матлабе, в которых непосредственно можно прослушивать звук - это реально сделать: прослушивание до преобразований и после них?

Всего записей: 24 | Зарегистр. 10-03-2012 | Отправлено: 21:58 09-04-2012
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
А у тебя матлабовский компилятор (который R2007b) требует наличия MS-Визуального-Си?
У меня (R13) - в обязательном порядке )
 

Цитата:
слайдеры и батоны масштабируются  

Ну не знаю, я гуи под матлаб никогда не писал...
Там что, батоны свои, не стандартно-винапишные? (хотя да, это ж ява... там всякое может быть)

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 22:10 09-04-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » помогите с Matlab


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru