Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
1

Matlab -> C#

01.11.2015, 23:49. Просмотров 1572. Ответов 20
Метки нет (Все метки)

Доброго, форумчане! пытаюсь приобщится к matlab coder
написав скрипт matlaba
Кликните здесь для просмотра всего текста

Matlab M
1
2
3
4
5
6
function wriretext(name) %#codegen
formatSpec = '%6.3f';
fileID = fopen(name,'w');
fprintf(fileID,formatSpec,rand(3,3));
fclose(fileID);
end

хочется получить чистый C# код
он выдал это
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
using System;
using System.Reflection;
using System.IO;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
 
#if SHARED
[assembly: System.Reflection.AssemblyKeyFile(@"")]
#endif
 
namespace wriretext
{
  public class Class1 : IDisposable
  {
    #region Constructors
    static Class1()
    {
      if (MWMCR.MCRAppInitialized)
      {
        try
        {
          Assembly assembly= Assembly.GetExecutingAssembly();
          string ctfFilePath= assembly.Location;
          int lastDelimiter= ctfFilePath.LastIndexOf(@"");
          ctfFilePath= ctfFilePath.Remove(lastDelimiter, (ctfFilePath.Length - lastDelimiter));
          string ctfFileName = "wriretext.ctf";
          Stream embeddedCtfStream = null;
          String[] resourceStrings = assembly.GetManifestResourceNames();
          foreach (String name in resourceStrings)
          {
            if (name.Contains(ctfFileName))
            {
              embeddedCtfStream = assembly.GetManifestResourceStream(name);
              break;
            }
          }
          mcr= new MWMCR("", ctfFilePath, embeddedCtfStream, true);
        }
        catch(Exception ex)
        {
          ex_ = new Exception("MWArray assembly failed to be initialized", ex);
        }
      }
      else
      {
        ex_ = new ApplicationException("MWArray assembly could not be initialized");
      }
    }
    public Class1()
    {
      if(ex_ != null)
      {
        throw ex_;
      }
    }
    #endregion Constructors
    #region Finalize
    ~Class1()
    {
      Dispose(false);
    }
    public void Dispose()
    {
      Dispose(true);
      GC.SuppressFinalize(this);
    }
    protected virtual void Dispose(bool disposing)
    {
      if (!disposed)
      {
        disposed= true;
 
        if (disposing)
        {
        }
      }
    }
    #endregion Finalize
    #region Methods
    public void wriretext()
    {
      mcr.EvaluateFunction(0, "wriretext", new MWArray[]{});
    }
    public void wriretext(MWArray name)
    {
      mcr.EvaluateFunction(0, "wriretext", name);
    }
    public MWArray[] wriretext(int numArgsOut)
    {
      return mcr.EvaluateFunction(numArgsOut, "wriretext", new MWArray[]{});
    }
    public MWArray[] wriretext(int numArgsOut, MWArray name)
    {
      return mcr.EvaluateFunction(numArgsOut, "wriretext", name);
    }
    public void WaitForFiguresToDie()
    {
      mcr.WaitForFiguresToDie();
    }
    #endregion Methods
    #region Class Members
    private static MWMCR mcr= null;
    private static Exception ex_= null;
    private bool disposed= false;
    #endregion Class Members
  }
}


прошу пояснить полученный С# код
(я в нем не вижу строку где создается матрица)
спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2015, 23:49
Ответы с готовыми решениями:

можно ли в Matlab создать библиотеку для С++ и использовать ее без вызова Matlab?
Возможно ли с помощью команды deploytool или какой-то другой команды создать библиотеку .dll...

Parse error at case matlab: usage might be invalid matlab syntax
Сразу говорю: В матлабе работаю ровно месяц. В общем, делаю форму, для вывода графика в axix....

Почему программа написанная в MATLAB 5.2 не работает в MATLAB 7.5 ?
Здравствуйте уважаемые форумчане. У меня возникла проблема с программой, написанной в MATLAB 5.2....

Открытие файла Matlab 7.14 в Matlab 7.12
доброго всем вечера.такая вот проблемка.создал файл в матлабе,но в версии 7.14 немного заргуженнее...

Производительность Matlab 6.5 и Matlab r2013b
Есть два ноутбука: 1.Intel Celeron Dual-Core T3100 1.90GHz 2ГБ ОЗУ WinXP (32bit) - Матлаб 6.5...

20
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
02.11.2015, 13:47 2
Цитата Сообщение от hristofernando Посмотреть сообщение
я в нем не вижу строку где создается матрица
Какая матрица?

Матлаб не переводит код m-функций в код на C#, а создаёт .NET-модуль, содержащий класс, который предоставляет туже функциональность, что и m-функция.
0
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
02.11.2015, 14:36  [ТС] 3
Цитата Сообщение от John Prick Посмотреть сообщение
Какая матрица?
Matlab M
1
...,rand(3,3)
Цитата Сообщение от John Prick Посмотреть сообщение
который предоставляет туже функциональность, что и m-функция.
то есть как не крути исходником будет m файл?
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
02.11.2015, 14:57 4
Цитата Сообщение от hristofernando Посмотреть сообщение
то есть как не крути исходником будет m файл?
После компилирования в .NET-модуль m-файл уже не нужен будет для дальнейшей разработки в C#.
0
02.11.2015, 14:57
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
02.11.2015, 15:09  [ТС] 5
John Prick, в папке с проектом после компилирования появились файлы Class1.cs и Class1Native.cs
но в них так и не нашел что то похожее
Matlab M
1
    ...,rand(3,3)
кажется понимаю систему компилирования ее цель - не создавать проекты отделенные от матлаба или его рунтайма с весом 10000Gb )

кажись m файл все же входит в проект он упакован в моем случае в компилируемую net библиотеку
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
02.11.2015, 15:32 6
Цитата Сообщение от hristofernando Посмотреть сообщение
в папке с проектом после компилирования появились файлы Class1.cs и Class1Native.cs
но в них так и не нашел что то похожее
И не найдёте. Там в папке должна быть ещё dll-ка. Вот в ней и содержится реализация кода из m-файла.

Цитата Сообщение от hristofernando Посмотреть сообщение
кажется понимаю систему компилирования ее цель - не создавать проекты отделенные от матлаба или его рунтайма с весом 10000Gb
После компилирования весь матлаб не нужен. Нужен будет только mcrInstaller из него. При установке разворачивается в что-то типа 300-400 МБайт.
1
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
02.11.2015, 15:36  [ТС] 7
а я думал ща халявный код получу
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
02.11.2015, 15:41 8
Цитата Сообщение от hristofernando Посмотреть сообщение
а я думал ща халявный код получу
Насколько помню, ещё в матлабе 6.0 или даже 6.5 существовала возможность получить полностью независимую библиотеку для С++. Потом эту "лавочку" прикрыли зачем-то.
0
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
28.11.2015, 17:56  [ТС] 9
John Prick, здравствуйте, у вас не осталось материала каким образом можно создать независимый проект? (версия matlaba 6.5) компилил внутренним и внешним компилятором (VS C++ 6.0) испробовал все варианты doc mcc все равно требует рунтайм
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
29.11.2015, 18:16 10
Цитата Сообщение от hristofernando Посмотреть сообщение
у вас не осталось материала каким образом можно создать независимый проект? (версия matlaba 6.5)
Нет. Я всего лишь об этом читал где-то, когда самому требовалось такое. Матлаб 6.0 тогда уже совсем вышел из употребления (даже на WinXP ставился как-то через бубен), и я забил на это. А может быть я тогда что-то не так понял, и рантайм нужен был и там... Просто в ранних версиях математическая библиотека матлаб С++ и компилятор матлаб были раздельными проектами. Позже они слились в один пакет и добавилась возможность получить .NET, java модули и многое другое.

Нашёл тут у себя книжку "Подкур, Смоленцев - Разработка приложений на С++ в среде Matlab". Тут есть что-то о компиляторе Матлаб версий 3.0 и 4.0. Так например для компилятора 3.0 (это вроде как раз тот, что в 6й и 6.5й версий матлаба идёт), написано так:
Все MATLAB-библиотеки времени выполнения, требуемые автономными приложениями, предварительно упакованы в отдельный самораспаковывающийся архивный файл mglinstaller.exe, <...>. Вместо включения по отдельности библиотек времени выполнения в дистрибутивный пакет автономного приложения можно просто включить этот один архивный файл.
Т.е. вероятно из рантайма можно просто попробовать выдернуть лишь нужные dll-ки. Стоит проверить.
1
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
29.11.2015, 19:59  [ТС] 11
Цитата Сообщение от John Prick Посмотреть сообщение
(даже на WinXP ставился как-то через бубен)
мне удалось установить matlab 6.5 на windiws 8.1 x64 в этой статье нашел -
http://www.mathworks.com/matlabcentral/newsreader/view_thread/328329

Цитата Сообщение от John Prick Посмотреть сообщение
Т.е. вероятно из рантайма можно просто попробовать выдернуть лишь нужные dll-ки. Стоит проверить.
да - в Dependency Walker указал проект и он указывает какие библиотеки проект подключает например для gui проекта - просто форма -общий вес библиотек ~ 30 мб
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
29.11.2015, 20:32 12
Цитата Сообщение от hristofernando Посмотреть сообщение
мне удалось установить matlab 6.5 на windiws 8.1 x64
6.0 и 6.5 довольно сильно отличаются, хотя возможно, что компилятор матлаб там один и тот же.
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
03.12.2015, 00:23 13
hristofernando, нашёл ещё вариант - пакет Matlab Coder. Судя по всему, появился где-то с версии 2012а. Генерирует С/С++ код из m-файлов (.h и .lib файлы). И потом этот код отлично компилируется на машине, на которой нет даже упоминания о матлабе. Главное, чтобы компиляторы на компе с матлабом и на целевом компе совпадали.
1
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
04.12.2015, 02:42  [ТС] 14
John Prick, пользуюсь последней версии Matlab Coder 3.0 он не генерирует почти все на оф сайте пишут используйте только те функции что указано на этой странице http://www.mathworks.com/help/coder/...t.html#bttrqgn пытался записать и прочесть матрицу, код сам в матлабе работает а при генерации с/с++ кода - ошибок тьма

Добавлено через 2 минуты
+ еще не сгенерировал сишные функции - был в шоке.
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
04.12.2015, 11:14 15
Цитата Сообщение от hristofernando Посмотреть сообщение
пользуюсь последней версии Matlab Coder 3.0 он не генерирует почти все
Я "поигрался" в 2012a матлабе, там версия 2.2 кодера. Всё, что относится к GUI (графики, формы и т.п.) он не генерирует, так прямо об этом и говорит. Какие-то вещи генерирует с ограничениями. Например, magic отказался переводить на С++, если параметр задан через переменную, но если константой задать - "проглотил". Мне давно ещё нужны были функции polyfit, polyval и подобные. Их он отлично перевёл в С++. Сейчас даже думаю, может переделать свой старый проект, чтобы убрать оттуда эту дурацкую привязку к рантайму матлаба.. ))

Добавлено через 5 минут
Цитата Сообщение от John Prick Посмотреть сообщение
Судя по всему, появился где-то с версии 2012а.
На всякий случай тут список всех поддерживаемых компиляторов для всех версий матлаба (посл.колонка).
0
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
04.12.2015, 11:55  [ТС] 16
John Prick, у меня не один из проектов не генерится(... везде пишет function not supported вот к примеру ругается на 2 и 4 строку

Matlab M
1
2
3
4
5
6
function uniwrite() %#codegen
A = {'string 1', 'string 2', 'string 3'};
fid = fopen('infile.txt','w');
fprintf(fid,'%s\n',A{:});
fclose(fid);
end
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
04.12.2015, 12:14 17
Цитата Сообщение от hristofernando Посмотреть сообщение
вот к примеру ругается на 2 и 4 строку
Проверил у себя, тоже самое. Здесь ругается на применение cell-arrays, они не поддерживаются кодером. Если заменить его на обычный, то будет ругаться на fopen, но предлагает воспользоваться coder.extrinsic('fopen'). Как будет время, почитаю, что это такое.

ПС. Эти функции, в общем-то, не уникальны для матлаба. Возможно, стоит их вызывать из С++ кода, а в коде матлаба пользоваться его математическими функциями только.
0
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
04.12.2015, 12:51  [ТС] 18
Цитата Сообщение от John Prick Посмотреть сообщение
но предлагает воспользоваться coder.extrinsic('fopen').
это вызов функции из рунтайма матлаба то есть генерируемый проект будет тянуть рунтайм

Цитата Сообщение от John Prick Посмотреть сообщение
не уникальны для матлаба.
второй пример - немог сгенерировать определенный интеграл гипербалического синуса
Matlab M
1
2
3
4
5
function z6=integral(i1,i2) %#codegen
x=[0.01:i1:i2];
y=(exp(exp(x)) - exp(-(exp(x))))/2;
z6 = integral(x,y);
end
и в проектах очень хочется использовать строковые функции, функции для работы с матрицами ... и они не генерируются

Добавлено через 14 минут
опечатка - неопределенный интеграл
0
John Prick
839 / 770 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
04.12.2015, 13:37 19
Цитата Сообщение от hristofernando Посмотреть сообщение
это вызов функции из рунтайма матлаба то есть генерируемый проект будет тянуть рунтайм
Проверил. Если их так объявить (через coder.extrinsic), то он их просто игнорирует при генерации кода.

Цитата Сообщение от hristofernando Посмотреть сообщение
немог сгенерировать определенный интеграл гипербалического синуса
В этом примере я вижу, что сама функция называется так же, как и та, что вызывается, а это получается рекурсия, которая неподдерживается. Попробуй назвать её my_integral или в этом духе как-то.

Добавлено через 3 минуты
Хотя сам проверил - действительно не хочет компилить. Что ж, значит придётся признать, что возможности Matlab Coder весьма ограничены, жаль.
0
hristofernando
31 / 31 / 4
Регистрация: 23.03.2014
Сообщений: 181
05.12.2015, 06:00  [ТС] 20
John Prick,

m файл все же остается в проекте

Matlab -> C#


изначально полагал что существование matlab coder и создание полностью не зависимых приложений -невозможно...
0
05.12.2015, 06:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2015, 06:00

Как открыть модель, сделанную в Matlab 2017b, в Matlab 2012b?
Есть модель (.mdl) создана в Matlab 2017b. Как её открыть в Matlab 2012b?

MatLAb
Рассчитайте значение функции y(x) при заданных w,x w=0.23 x=3/65...

MATLAB
Привет всем! Нужна помощь с курсовой дали 4 задания сделать, Помогите пожалуйста Правила: 4.3....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru