Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 956
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
, а далее чтобы получить график, построенный по этим данным, воспользоваться пунктами меню Вставка | Диаграмма. В данном разделе я покажу, как можно очень быстро получить график (диаграмму) из программы Visual С#2010, используя средства (объекты компонентной библиотеки) MS Excel.
Запустим Visual Studio 2010, далее, поскольку экранная форма нам не нужна, выбираем новый проект из шаблона Console Application. Теперь к текущему проекту добавим библиотеку объектов MS Excel. Для этого в пункте меню Project выберем команду Add Reference, далее на вкладке СОМ отметим библиотеку Microsoft Excel 12.0 Object Library и щелкнем на кнопке ОК. Затем на вкладке программного кода введем текст, приведенный в листинге 9.6.
Листинг 9.6. Построение диаграммы средствами MS Excel
// Программа строит график (диаграмму) средствами объектов
// компонентной библиотеки MS Excel
using XL = Microsoft.Office.Interop.Excel;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace ЕхсеlГрафик
{ // Для подключения библиотеки объектов MS Excel в пункте меню Project
// выберем команду Add Reference. Затем на вкладке СОМ дважды щелкнем
// по ссылке на библиотеку Microsoft Excel 12.0 Object Library
class Program
{
static void Main(string[] args)
{
XL.Application XL1 = new XL.Application();
XL1.Workbooks.Add();
//XL1.ActiveSheet.Range["A1"].Value = "Месяц";
XL1.ActiveSheet.Range["A2"].Value = "Март";
XL1.ActiveSheet.Range("A3").Value = "Anp";
XL1.ActiveSheet.Range("A4").Value = "Май";
XL1.ActiveSheet.Range("A5").Value = "Июнь";
XL1.ActiveSheet.Range("A6").Value = "Июль";
//XL1.ActiveSheet.Range("B1").Value = "Продажи:";
XL1.ActiveSheet.Range("B2").Value = 138;
XL1. ActiveSheet.Range ("B3 ") . Value = 85;
XL1.ActiveSheet.Range("B4").Value = 107;
XL1.ActiveSheet.Range("B5").Value = 56;
XL1.ActiveSheet.Range("B6").Value = 34;
XL1.Charts.Add();
// Задаем тип графика "столбчатая диаграмма" (гистограмма):
XL1.ActiveChart.ChartType = XL.X1ChartType.xlColumnClustered;
// Отключаем легенду графика:
XL1.ActiveChart.HasLegend = false;
XL1.ActiveChart.HasTitle = true;
XL1. ActiveChart. ChartTitle. Characters. Text = "ПРОДАЖИ ЗА ПЯТЬ МЕСЯЦЕВ";
// Подпись оси х
XL1.ActiveChart.Axes(XL.XIAxisType.xlValue).HasTitle = true; XL1.ActiveChart.Axes(XL.XIAxisType.xlValue).AxisTitle. Characters.Text = "Уровни продаж";
// Подпись оси у
XL1.ActiveChart.Axes(XL.XIAxisType.xlCategory).HasTitle = true; XL1.ActiveChart.Axes(XL.XIAxisType.xlCategory).AxisTitle. Characters.Text = "Месяцы";
// Сохранение графика в растровом файле:
XL1.ActiveChart.Export("С:\\ЕхсеlГрафик.jpg");
XL1. Visible = true;
}
}
}
Вначале программного кода создаем объект Excel.Application и рабочую книгу. Далее заполняем ячейки первого листа: вначале в ячейки Ai пишем подпи ординат гистограммы, а в ячейки Bi — значения ординат. Затем задаем тип диаграммы—
xlСolumnСlustered, что соответствует гистограмме (столбиковой диаграмме). Далее указываем название гистограммы и подписываем горизонтальную и вертикальную оси. Затем с помощью функции Export() сохраняем полученную диаграмму на диске в виде jpg-файла. Графическое отображение этого файла можно но посмотреть на рис 9.7.
Далее делаем видимой (visible = true) построенную диаграмму на рабочем листе MS Excel.
Убедиться в работоспособности программы можно, открыв решение ЕхсеlГрафик.sln в папке ЕхсеlГрафик.
Рис. 9.7. Графическое отображение полученного jpg-файла
Пример 60. Управление функциями AutoCAD из программы на Visual С# 2010
Если результатом работы вашей программы должен быть какой-либо векторный чертеж (техническая документация, строительный чертеж, географическая карта и проч.), то самый быстрый путь, создания такого приложения — это обращение к Функциям AutoCAD из вашей С#-программы. AutoCAD (Computer-Aided Design) — Это 2- и 3-мерная система автоматизированного проектирования и черчения. Эта система, также как и пакет приложений Microsoft Office, может являться сервером OLE-oбьектов, и его функции могут использоваться другими приложениями.
Графическими примитивами векторной графики являются отрезки, дуги, окружности, тексты, которые можно выводить под различными углами к горизонту, и, может быть, еще некоторые простейшие геометрические фигуры. Чертеж, подлежащий построению, состоит из совокупности таких элементов. Программа на С#2010 путем обращения к соответствующим функциям AutoCAD формирует такой чертеж и записывает его в dwg-файл. Пользователь может просмотреть этот файл в среде AutoCAD, отредактировать его и вывести на печать.
Приступаем к программированию поставленной задачи. Как обычно после запуска Visual Studio 2010, выбираем шаблон Windows Forms Application С#. Далее следует подключить библиотеку объектов AutoCAD, для этого в пункте меню Project выбираем команду Add Reference, затем на вкладке СОМ дважды щелкаем на ссылке AutoCAD 2000 Object Library. Эта ссылка соответствует файлу ACAD.TLD в соответствующей папке Program Files, где расположен результат инсталляции AutoCAD. Теперь после компиляции проекта в папке obj\x86\Debug явится файл Interop.AutoCAD
.dll.
Таким образом, мы подключили библиотеку объектов AutoCAD версии 2000 Если на вашем компьютере инсталлирована другая версия AutoCAD, то действуют аналогично. Программа, выводящая в dwg-файл два отрезка, а также две горизонтально и вертикально ориентированных строки текста, представлена в листинге 9.7.
Листинг 9.7. Построение отрезков и двух строк текста в AutoCAD
// Программа строит средствами объектов библиотеки AutoCAD элементарный
// чертеж из отрезков и некоторого текста. Этот чертеж сохраняется в файле
// формата DWG. Конкретнее: эта программа запускает AutoCAD 2000i, рисует
// два отрезка, два текстовых объекта, сохраняет чертеж в файле С:\Чертеж.dwg
//и завершает работу AutoCAD
using System;
using System.Windows.Forms;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace АСАDЧертеж
{ // Следует подключить библиотеку объектов AutoCAD. Для этого надо выбрать
// Project | Add Reference - вкладка COM - AutoCAD 2000 Object Library – OK
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
AutoCAD.AcadApplication ACAD1 = new AutoCAD.AcadApplication();
AutoCAD.AcadDocuments Docs1 = ACAD1.Documents;
AutoCAD.AcadDocument Docl = Docs1.Add();
// Видимость: ACAD1.Visible = true; // Точки:
double[] T1 = { 10, 10, 0 };
double[] T2 = { 200, 200, 0 };
double[] T3 = { 200, 10, 0 };
double[] T4 = { 15, 200, 0 };
// Нарисовать отрезок от точки T1 до точки Т2:
Doc1.ModelSpace.AddLine(Tl, T2);
// Нарисовать отрезок красным цветом:
Doc1.ModelSpace.AddLine(T2, Т3).Color = AutoCAD.ACAD_COLOR.acRed;
// Горизонтальный текст (с разворотом 0 градусов)
Doc1.ModelSpace.AddText("Горизонтальный", Т4, 22);
// Вертикальный текст с разворотом на 90 град = ПИ/2
Doc1.ModelSpace.AddText("Вертикальный", T1, 22).Rotation = Math.PI / 2;
// Сохраняем чертеж на диске:
Doc1. SaveAs ("С: \\Чертеж.dwg") ;
ACAD1.Quit();
}
}
}
Как видно из программного кода, весь процесс работы программы происходит cразу после выполнения процедуры InitializeComponent. Вначале создается объект клаcca AutoCAD.Application. Далее создаем коллекцию документов AcadDocuments и ,открываем (делаем активным) один документ предложением Docs .Add.
Затем задаем видимость работы AutoCAD visible = True, при этом AutoCAD только мелькнет на экране. (Заметьте, что для конечной цели, т. е. для получения dwg-файла, видимость не обязательна.) Далее задаем четыре точки, которые будут участвовать в построении чертежа. Обратите внимание, что каждая точка имеет три ординаты, хотя мы собираемся строить плоский чертеж. Третью координату мы будем воспринимать, как напоминание того, что AutoCAD способен строить трехмерные чертежи.
Затем рисуем два отрезка AddLine через точки T1, Т2 и Т2, Т3. Причем мы показали, как второй отрезок задать красным цветом. Далее подаем команду выводить текст горизонтально, затем другой текст — вертикально с разворотом на 90°, т. е. π/2. Затем, используя метод SaveAs, записываем построенный в документе чертеж в dwg-файл на логический диск С:.
В результате работы этой программы получаем чертеж в системе AutoCAD, подобный представленному на рис. 9.8.
Убедиться в работоспособности программы можно, открыв решение ACADЧертеж-sln в папке АСАDЧертеж.
Рис. 9.8. Отображение полученного dwg-файла в системе AutoCAD
Пример 61. Вызов MATLAB из вашей программы на Visual С# 2010
Можно вызывать MATLAB из вашей С#-программы. Среда MATLAB является стандартным мощным инструментом для работы в различных отраслях математики. При подготовке этого примера автор пользовался наиболее распространенной версией MATLAB 6.5. В данном примере продемонстрируем подготовку вводных данныхдля MATLAB, создание экземпляра объекта типа MATLAB и непосредственный вызов на выполнение. В результате мы увидим построение графика функции у = sin(x)•e-x.Для программирования этой задачи запустим Visual Studio 2010 и закажем новый проект шаблона Windows Forms Application С#. Из панели элеменов Toolbox перенесем командную кнопку Button, чтобы обращение к среде MATLАВ происходило при щелчке на этой кнопке и выглядело бы наиболее выразительно. Далее на вкладке программного кода введем текст из листинга 9.8.
Листинг 9.8. Использование возможностей среды MATLAB
// Программа, подготовив соответствующие команды для MATLAB, вызывает
// его на выполнение этих команд. В результате строится затухающая
// синусоида у = sin(x)*ехр(-х)
using System;
using System.Windows.Forms;
// Добавляем директиву System.Reflection:
using System.Reflection;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace MatlabBызов
{ // Для успешной работы программы нет необходимости добавлять ссылку на
// объектную библиотеку через Project | Reference. Однако на компьютере
// MATLAB должен быть установлен
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Button1.Text = "Вызвать MATLAB";
}
private void button1_Click(object sender, EventArgs e)
{ // Получить тип приложения MATLAB:
Type ТипМатЛаб = Type.GetTypeFromProgID("Matlab.Application");
// Создать экземпляр объекта типа MATLAB:
object МатЛаб = Activator.Createlnstance(ТипМатЛаб);
// Подготавливаем команды для MATLAB:
object[] Команды = new Object[]
// { "surf(peaks)" };
{ "x = 0:0.1:6.28; у = sin(x)*exp(-x); plot(x,y)" };
// { "s = sin(0.5); с = cos(0.5); у = s*s+c*c; y" };
// Вызываем MATLAB, подавая ему на вход подготовленные команды:
object Результат = ТипМатЛаб.invokeMember("Execute", BindingFlags.InvokeMethod, null, МатЛаб, Команды);
// MessageBox.Show(Результат.ToString());
}
}
}
Как видно из текста программы, при обработке события "щелчок на кнопке" переменную ТипМатЛаб получаем тип приложения MATLAB. Далее создаем экземпляр объекта этого типа. Затем подготавливаем три команды для MATLAB, разделенные точкой с запятой. Первая команда "х = 0:0.1:6.28;" задает вектор х (набор чисел) от нуля до 2π (6,28) с шагом 0,1. Вторая команда "у = sin(x) *eхр(-х);" вычисляет второй вектор по значениям первого вектора. Третья команда plot создает график зависимости у от х. Метод Execute выполняет в среде MATLAB подготовленные команды. В результате обращения к MATLAB получим построенный график заданной функции (рис. 9.9).
В комментариях приведены и другие команды, которые можно выполнить, подключаясь к среде MATLAB.
Убедиться в работоспособности программы можно, открыв решение MatlabBызов.sln в папке MatlabBызов.
Рис. 9.9. График функции, построенный в среде MATLAB
Пример 62. Решение системы уравнений путем обращения к MATLAB
Основной особенностью языка MATLAB являются его широкие возможности работе с матрицами, которые создатели языка выразили в лозунге "Думай векторно " (от англ. Thinkvectorized). Изначально среда MATLAB эволюционизировалась с задач матричной алгебры, отсюда и слово MATLAB означает матричная лаборатория (matrix laboratory). Решить систему уравнений, глядя на предыдущий пример, очень просто, нужно всего лишь знать, как строятся команды в MATLAB. Продемонстрируем процесс решения системы линейных уравнений на следующем примере.
X1 + Х2+ Х3 =6
X1 + Х2 =3
Х2 + Х3 =5
Данную систему решим через обратную матрицу.
Для программирования этой задачи запустим Visual Studio 2010 и закажем новый проект шаблона Windows Forms Application С#. Из панели элементов Toolbox перенесем командную кнопку Button. Далее на вкладке программного кода введем текст из листинга 9.9.
Листинг 9.9. Решение системы линейных уравнений с помощью
Запустим Visual Studio 2010, далее, поскольку экранная форма нам не нужна, выбираем новый проект из шаблона Console Application. Теперь к текущему проекту добавим библиотеку объектов MS Excel. Для этого в пункте меню Project выберем команду Add Reference, далее на вкладке СОМ отметим библиотеку Microsoft Excel 12.0 Object Library и щелкнем на кнопке ОК. Затем на вкладке программного кода введем текст, приведенный в листинге 9.6.
Листинг 9.6. Построение диаграммы средствами MS Excel
// Программа строит график (диаграмму) средствами объектов
// компонентной библиотеки MS Excel
using XL = Microsoft.Office.Interop.Excel;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace ЕхсеlГрафик
{ // Для подключения библиотеки объектов MS Excel в пункте меню Project
// выберем команду Add Reference. Затем на вкладке СОМ дважды щелкнем
// по ссылке на библиотеку Microsoft Excel 12.0 Object Library
class Program
{
static void Main(string[] args)
{
XL.Application XL1 = new XL.Application();
XL1.Workbooks.Add();
//XL1.ActiveSheet.Range["A1"].Value = "Месяц";
XL1.ActiveSheet.Range["A2"].Value = "Март";
XL1.ActiveSheet.Range("A3").Value = "Anp";
XL1.ActiveSheet.Range("A4").Value = "Май";
XL1.ActiveSheet.Range("A5").Value = "Июнь";
XL1.ActiveSheet.Range("A6").Value = "Июль";
//XL1.ActiveSheet.Range("B1").Value = "Продажи:";
XL1.ActiveSheet.Range("B2").Value = 138;
XL1. ActiveSheet.Range ("B3 ") . Value = 85;
XL1.ActiveSheet.Range("B4").Value = 107;
XL1.ActiveSheet.Range("B5").Value = 56;
XL1.ActiveSheet.Range("B6").Value = 34;
XL1.Charts.Add();
// Задаем тип графика "столбчатая диаграмма" (гистограмма):
XL1.ActiveChart.ChartType = XL.X1ChartType.xlColumnClustered;
// Отключаем легенду графика:
XL1.ActiveChart.HasLegend = false;
XL1.ActiveChart.HasTitle = true;
XL1. ActiveChart. ChartTitle. Characters. Text = "ПРОДАЖИ ЗА ПЯТЬ МЕСЯЦЕВ";
// Подпись оси х
XL1.ActiveChart.Axes(XL.XIAxisType.xlValue).HasTitle = true; XL1.ActiveChart.Axes(XL.XIAxisType.xlValue).AxisTitle. Characters.Text = "Уровни продаж";
// Подпись оси у
XL1.ActiveChart.Axes(XL.XIAxisType.xlCategory).HasTitle = true; XL1.ActiveChart.Axes(XL.XIAxisType.xlCategory).AxisTitle. Characters.Text = "Месяцы";
// Сохранение графика в растровом файле:
XL1.ActiveChart.Export("С:\\ЕхсеlГрафик.jpg");
XL1. Visible = true;
}
}
}
Вначале программного кода создаем объект Excel.Application и рабочую книгу. Далее заполняем ячейки первого листа: вначале в ячейки Ai пишем подпи ординат гистограммы, а в ячейки Bi — значения ординат. Затем задаем тип диаграммы—
xlСolumnСlustered, что соответствует гистограмме (столбиковой диаграмме). Далее указываем название гистограммы и подписываем горизонтальную и вертикальную оси. Затем с помощью функции Export() сохраняем полученную диаграмму на диске в виде jpg-файла. Графическое отображение этого файла можно но посмотреть на рис 9.7.
Далее делаем видимой (visible = true) построенную диаграмму на рабочем листе MS Excel.
Убедиться в работоспособности программы можно, открыв решение ЕхсеlГрафик.sln в папке ЕхсеlГрафик.
Рис. 9.7. Графическое отображение полученного jpg-файла
Пример 60. Управление функциями AutoCAD из программы на Visual С# 2010
Если результатом работы вашей программы должен быть какой-либо векторный чертеж (техническая документация, строительный чертеж, географическая карта и проч.), то самый быстрый путь, создания такого приложения — это обращение к Функциям AutoCAD из вашей С#-программы. AutoCAD (Computer-Aided Design) — Это 2- и 3-мерная система автоматизированного проектирования и черчения. Эта система, также как и пакет приложений Microsoft Office, может являться сервером OLE-oбьектов, и его функции могут использоваться другими приложениями.
Графическими примитивами векторной графики являются отрезки, дуги, окружности, тексты, которые можно выводить под различными углами к горизонту, и, может быть, еще некоторые простейшие геометрические фигуры. Чертеж, подлежащий построению, состоит из совокупности таких элементов. Программа на С#2010 путем обращения к соответствующим функциям AutoCAD формирует такой чертеж и записывает его в dwg-файл. Пользователь может просмотреть этот файл в среде AutoCAD, отредактировать его и вывести на печать.
Приступаем к программированию поставленной задачи. Как обычно после запуска Visual Studio 2010, выбираем шаблон Windows Forms Application С#. Далее следует подключить библиотеку объектов AutoCAD, для этого в пункте меню Project выбираем команду Add Reference, затем на вкладке СОМ дважды щелкаем на ссылке AutoCAD 2000 Object Library. Эта ссылка соответствует файлу ACAD.TLD в соответствующей папке Program Files, где расположен результат инсталляции AutoCAD. Теперь после компиляции проекта в папке obj\x86\Debug явится файл Interop.AutoCAD
.dll.
Таким образом, мы подключили библиотеку объектов AutoCAD версии 2000 Если на вашем компьютере инсталлирована другая версия AutoCAD, то действуют аналогично. Программа, выводящая в dwg-файл два отрезка, а также две горизонтально и вертикально ориентированных строки текста, представлена в листинге 9.7.
Листинг 9.7. Построение отрезков и двух строк текста в AutoCAD
// Программа строит средствами объектов библиотеки AutoCAD элементарный
// чертеж из отрезков и некоторого текста. Этот чертеж сохраняется в файле
// формата DWG. Конкретнее: эта программа запускает AutoCAD 2000i, рисует
// два отрезка, два текстовых объекта, сохраняет чертеж в файле С:\Чертеж.dwg
//и завершает работу AutoCAD
using System;
using System.Windows.Forms;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace АСАDЧертеж
{ // Следует подключить библиотеку объектов AutoCAD. Для этого надо выбрать
// Project | Add Reference - вкладка COM - AutoCAD 2000 Object Library – OK
public partial class Form1:Form
{
public Form1()
{
InitializeComponent();
AutoCAD.AcadApplication ACAD1 = new AutoCAD.AcadApplication();
AutoCAD.AcadDocuments Docs1 = ACAD1.Documents;
AutoCAD.AcadDocument Docl = Docs1.Add();
// Видимость: ACAD1.Visible = true; // Точки:
double[] T1 = { 10, 10, 0 };
double[] T2 = { 200, 200, 0 };
double[] T3 = { 200, 10, 0 };
double[] T4 = { 15, 200, 0 };
// Нарисовать отрезок от точки T1 до точки Т2:
Doc1.ModelSpace.AddLine(Tl, T2);
// Нарисовать отрезок красным цветом:
Doc1.ModelSpace.AddLine(T2, Т3).Color = AutoCAD.ACAD_COLOR.acRed;
// Горизонтальный текст (с разворотом 0 градусов)
Doc1.ModelSpace.AddText("Горизонтальный", Т4, 22);
// Вертикальный текст с разворотом на 90 град = ПИ/2
Doc1.ModelSpace.AddText("Вертикальный", T1, 22).Rotation = Math.PI / 2;
// Сохраняем чертеж на диске:
Doc1. SaveAs ("С: \\Чертеж.dwg") ;
ACAD1.Quit();
}
}
}
Как видно из программного кода, весь процесс работы программы происходит cразу после выполнения процедуры InitializeComponent. Вначале создается объект клаcca AutoCAD.Application. Далее создаем коллекцию документов AcadDocuments и ,открываем (делаем активным) один документ предложением Docs .Add.
Затем задаем видимость работы AutoCAD visible = True, при этом AutoCAD только мелькнет на экране. (Заметьте, что для конечной цели, т. е. для получения dwg-файла, видимость не обязательна.) Далее задаем четыре точки, которые будут участвовать в построении чертежа. Обратите внимание, что каждая точка имеет три ординаты, хотя мы собираемся строить плоский чертеж. Третью координату мы будем воспринимать, как напоминание того, что AutoCAD способен строить трехмерные чертежи.
Затем рисуем два отрезка AddLine через точки T1, Т2 и Т2, Т3. Причем мы показали, как второй отрезок задать красным цветом. Далее подаем команду выводить текст горизонтально, затем другой текст — вертикально с разворотом на 90°, т. е. π/2. Затем, используя метод SaveAs, записываем построенный в документе чертеж в dwg-файл на логический диск С:.
В результате работы этой программы получаем чертеж в системе AutoCAD, подобный представленному на рис. 9.8.
Убедиться в работоспособности программы можно, открыв решение ACADЧертеж-sln в папке АСАDЧертеж.
Рис. 9.8. Отображение полученного dwg-файла в системе AutoCAD
Пример 61. Вызов MATLAB из вашей программы на Visual С# 2010
Можно вызывать MATLAB из вашей С#-программы. Среда MATLAB является стандартным мощным инструментом для работы в различных отраслях математики. При подготовке этого примера автор пользовался наиболее распространенной версией MATLAB 6.5. В данном примере продемонстрируем подготовку вводных данныхдля MATLAB, создание экземпляра объекта типа MATLAB и непосредственный вызов на выполнение. В результате мы увидим построение графика функции у = sin(x)•e-x.Для программирования этой задачи запустим Visual Studio 2010 и закажем новый проект шаблона Windows Forms Application С#. Из панели элеменов Toolbox перенесем командную кнопку Button, чтобы обращение к среде MATLАВ происходило при щелчке на этой кнопке и выглядело бы наиболее выразительно. Далее на вкладке программного кода введем текст из листинга 9.8.
Листинг 9.8. Использование возможностей среды MATLAB
// Программа, подготовив соответствующие команды для MATLAB, вызывает
// его на выполнение этих команд. В результате строится затухающая
// синусоида у = sin(x)*ехр(-х)
using System;
using System.Windows.Forms;
// Добавляем директиву System.Reflection:
using System.Reflection;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace MatlabBызов
{ // Для успешной работы программы нет необходимости добавлять ссылку на
// объектную библиотеку через Project | Reference. Однако на компьютере
// MATLAB должен быть установлен
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Button1.Text = "Вызвать MATLAB";
}
private void button1_Click(object sender, EventArgs e)
{ // Получить тип приложения MATLAB:
Type ТипМатЛаб = Type.GetTypeFromProgID("Matlab.Application");
// Создать экземпляр объекта типа MATLAB:
object МатЛаб = Activator.Createlnstance(ТипМатЛаб);
// Подготавливаем команды для MATLAB:
object[] Команды = new Object[]
// { "surf(peaks)" };
{ "x = 0:0.1:6.28; у = sin(x)*exp(-x); plot(x,y)" };
// { "s = sin(0.5); с = cos(0.5); у = s*s+c*c; y" };
// Вызываем MATLAB, подавая ему на вход подготовленные команды:
object Результат = ТипМатЛаб.invokeMember("Execute", BindingFlags.InvokeMethod, null, МатЛаб, Команды);
// MessageBox.Show(Результат.ToString());
}
}
}
Как видно из текста программы, при обработке события "щелчок на кнопке" переменную ТипМатЛаб получаем тип приложения MATLAB. Далее создаем экземпляр объекта этого типа. Затем подготавливаем три команды для MATLAB, разделенные точкой с запятой. Первая команда "х = 0:0.1:6.28;" задает вектор х (набор чисел) от нуля до 2π (6,28) с шагом 0,1. Вторая команда "у = sin(x) *eхр(-х);" вычисляет второй вектор по значениям первого вектора. Третья команда plot создает график зависимости у от х. Метод Execute выполняет в среде MATLAB подготовленные команды. В результате обращения к MATLAB получим построенный график заданной функции (рис. 9.9).
В комментариях приведены и другие команды, которые можно выполнить, подключаясь к среде MATLAB.
Убедиться в работоспособности программы можно, открыв решение MatlabBызов.sln в папке MatlabBызов.
Рис. 9.9. График функции, построенный в среде MATLAB
Пример 62. Решение системы уравнений путем обращения к MATLAB
Основной особенностью языка MATLAB являются его широкие возможности работе с матрицами, которые создатели языка выразили в лозунге "Думай векторно " (от англ. Thinkvectorized). Изначально среда MATLAB эволюционизировалась с задач матричной алгебры, отсюда и слово MATLAB означает матричная лаборатория (matrix laboratory). Решить систему уравнений, глядя на предыдущий пример, очень просто, нужно всего лишь знать, как строятся команды в MATLAB. Продемонстрируем процесс решения системы линейных уравнений на следующем примере.
X1 + Х2+ Х3 =6
X1 + Х2 =3
Х2 + Х3 =5
Данную систему решим через обратную матрицу.
Для программирования этой задачи запустим Visual Studio 2010 и закажем новый проект шаблона Windows Forms Application С#. Из панели элементов Toolbox перенесем командную кнопку Button. Далее на вкладке программного кода введем текст из листинга 9.9.
Листинг 9.9. Решение системы линейных уравнений с помощью