Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Простейший способ вычисления петли гистерезиса

472  1 2 3 все
Bigfoot коренной житель30.09.17 13:43
Bigfoot
NEW 30.09.17 13:43 
в ответ AlexNek 30.09.17 12:39
а у меня не один

Один-единственный - amplitude. Других согласно приведенному описанию НЕТ! А у меня вместо него ТРИ параметра - H_c, H_s и M_s, которые могут быть измерены прямо с графика экспериментальных данных.

Вы либо приводите ТОЧНЫЙ код, из которого станут понятны ВСЕ параметры вызовов функций, либо пишите ФОРМУЛУ. А пока Вы заставляете упражняться в телепатии - ну откуда мне знать, что означают param1, param2 и param3, и какое отношение они имеют к amplitude?!!! Поверьте, этот сумбур очень раздражает. Пока Вы не научитесь четко формулировать задачу, помочь Вам будет затруднительно.

в процессе измерения "усы" растут/уменьшаются

Это как раз и описывается изменением параметров H_c (полуширины петли на при нулевой намагниченности), H_s и M_s (координаты точки насыщения - кончика "уса"). Задавайте закон изменения оных от цикла к циклу, и будет вам счастие.

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#21 
AlexNek патриот30.09.17 15:06
AlexNek
NEW 30.09.17 15:06 
в ответ Bigfoot 30.09.17 13:43
Поверьте, этот сумбур очень раздражает

Вполне могу Вас понять, но для этого мне нужно вначале представлять как "мыслит" математик. Уже не раз сталкивался на работе - что то объясняешь, а коллега в упор не понимает. Только потом выясняется что он оперирует совершенно другими "понятиями".

И как врубаешся в то, что чел. ожидает, то уже идет проще.

Потому как для меня важной была именно конечная формула, а уж как туда попадают параметры - дело вторичное и неважное.

Но одно отличие я нашел. У меня [а*ф(х)]^3 - у Вас а*[ф(х)]^3


в процессе измерения "усы" растут/уменьшаются ..Это как раз и описывается изменением параметров H_c

видимо неправильно пояснил. На графике нет букв в точках перегиба. При постоянных H_c, M_r и визуально незаметным изменением M_c "ус" вытягивается довольно прилично. И это вытягивание можно изменить только изменением степени. Иначе у меня никак не получалось.

Если не путаю, то производная в точке M_r меняется.


#22 
Bigfoot коренной житель30.09.17 15:40
Bigfoot
NEW 30.09.17 15:40 
в ответ AlexNek 30.09.17 15:06
При постоянных H_c, M_r и визуально незаметным изменением M_c "ус" вытягивается довольно прилично.

У меня нет никаких М_г. Значения M_s и H_s - это ТОЧНЫЕ координаты кончика "уса". Если задать функцию так, как _ОПИСАЛ Я_ - с ТОЧНЫМ соблюдением всех степеней, множителей и т.д. - то НИКАКИХ "довольно приличных" вытягиваний "уса" не наблюдается. Эта точка - точка насыщения - ЖЕСТКО задается указанными параметрами. А вот в _Вашей_ реализации функции все может быть как угодно. Потому как я до сих пор не знаю, как и что Вы там задаете. Внесение множителя под знак степени РАДИКАЛЬНО меняет поведение функции при варьировании параметра. Уф...

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#23 
AlexNek патриот30.09.17 16:10
AlexNek
NEW 30.09.17 16:10 
в ответ Bigfoot 30.09.17 15:40

Я с этого рисунка сдираю названия

http://femto.com.ua/articles/part_1/0802.html


Сейчас вот начал тестовую прогу делать, будет попроще

#24 
AlexNek патриот30.09.17 23:07
AlexNek
NEW 30.09.17 23:07 
в ответ AlexNek 30.09.17 16:10, Последний раз изменено 02.10.17 16:02 (AlexNek)

Сделал я тест. Если кому надо могу выложить исходники с ехе.

По пути нашел еще одну ошибку в моем генераторе.


А вот с arctang-енсом ничего не получается.

Преобразовал я формулу 30 в следующее - выдает какую то ерунду.

private void CreateYPoints()
{
   _chartPointsY.Clear();
   double rx = Math.Tan(Math.PI * _valueMr / (2 * _valueMs));
   for (int i = 0; i < PointCount / 2 - 1; i++)
   {
       _pointsY(i) = (2 / Math.PI) * _valueMs * Math.Atan((i + _valueHc) / _valueHc * rx);
   }
   for (int i = PointCount / 2; i < PointCount; i++)
   {
        _pointsY(i) = (2 / Math.PI) * _valueMs * Math.Atan((i - _valueHc) / _valueHc * rx);
   }
}

Здешний скрипт квадратные скобки что то не воспринимает

#25 
Murr_0002 знакомое лицо02.10.17 10:20
Murr_0002
NEW 02.10.17 10:20 
в ответ AlexNek 30.09.17 23:07

Эээ...

В гистерезис Я не полезу, но дам простой совет.

Когда описываешь проблему математику, то начинай с простого - обозначим "ЭТО" как парам1...

Сам по себе математик не способен сделать эту привязку - для него "физика" процесса за пределами понимания и пока ты ему не дашь привязку ему фактически нечего делать...


Самый страшный, для математика, анекдот:

Военная кафедра, полковник читает лекцию по своему профилю.

...таким образом для выполнения задачи необходимо соблюдать условие. Вот пример:

Возьмем Н как условие... нет, Н - мало, возьмем М...

#26 
Murr_0002 знакомое лицо02.10.17 10:26
Murr_0002
NEW 02.10.17 10:26 
в ответ Murr_0002 02.10.17 10:20

П.С. Как Я понял - он не понимает, что у тебя меняются испытуемые материалы - потому считает намагниченность насыщения и прочие для тебя переменные - константами.


П.П.С. Подумай еще раз над тем, чтобы нарисовать гистерезис как картинку 100х100... даже 20х20 - при запросах - 20% точности - этого хватит...

#27 
Bigfoot коренной житель02.10.17 12:28
Bigfoot
NEW 02.10.17 12:28 
в ответ AlexNek 30.09.17 23:07, Последний раз изменено 02.10.17 12:49 (Bigfoot)
выдает какую то ерунду

Если писать ерунду, то оно и выдаст ерунду

Уравнения там для верхней y_h и нижней y_l ветвей. И это обычные функциональные зависимости y=y(x), а не параметрические!


x(это напряженность поля H) = -H_max...H_max = deltaH*(i-[(N-1)/2]-1),

deltaH= 2*H_max/(N-1) i=1...N, N=2*k+1, k - натуральное число (а у Вас индекс складывается с величиной, имеющей размерность!!! это могло бы быть верным только в одном случае: если шаг по x равен единичному значению напряженности, что вряд ли адекватно условиям, плюс, у Вас половина точек является отрицательной областью одной ветви, а другая половина - положительной областью другой ветви)

y_h=A*atan((x/H_cs+1)*_tan_)

y_l=A*atan((x/H_cs-1)*_tan_),

где A=2*M_s/Pi, _tan_=tan(Pi*M_rs/M_r/2)


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


Запостили бы, что ле, скриншот с реальными данными. Желательно - только кривую и координатные оси. Если уж не можете сохранить в текстовом формате. Вряд ли Вы сами сможете выбрать наиболее адекватный вид функции, а я мог бы _быстро_ подобрать с использованием готовых "спецсредств".


ЗЫ. Комментарии мурра смело пропускайте мимо ушей. Он несет отчаянную ахинею насчет того, что и как я понимаю. Да и вообще, не особо въезжает в тему. У него до сих пор все еще 100x100...

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#28 
AlexNek патриот02.10.17 16:22
AlexNek
NEW 02.10.17 16:22 
в ответ Bigfoot 02.10.17 12:28

спасибо за подсказки


Если писать ерунду, то оно и выдаст ерунду

Описания формулы я не нашел, пришлось взять что попроще.


если шаг по x равен единичному значению напряженности,

именно так для теста и сделал


половина точек является отрицательной областью одной ветви, а другая половина - положительной областью другой ветви)

так мне нужен вначале нужен график, который слева. Он как раз из двух половинок. Поэтому так и сделал.

Но похоже сам принцип не подходит.


Запостили бы, что ле, скриншот с реальными данными.

Так сейчас это в принципе невозможно, я пока дома. На работу 4-го, а когда до устройства доберусь неизвестно.

Но один скриншот ничего не даст, как и таблица. Устройство то для того и сделано чтобы снимать реальные данные.

А они отличаются довольно сильно для различных материалов и параметров измерения. Да и в процессе измерения отличия весьма заметные.

#29 
AlexNek патриот02.10.17 20:23
AlexNek
NEW 02.10.17 20:23 
в ответ Bigfoot 02.10.17 12:28

Похоже Preislach и Atherton дают что то удобоваримое, но они больше для научных расчетов.

Кстати, как то подобно меняется гистограмма во время измерения. Если различные цвета соотвествуют различным моментам времени.

Описание измерений нашел только в ГОСТе, но там нифига непонятно.

http://gostexpert.ru/data/files/12119.1-98/18ff80fce1c8be5...

Конечно и генерация и измерения проводятся в цифровом виде

#30 
Bigfoot коренной житель02.10.17 20:35
Bigfoot
NEW 02.10.17 20:35 
в ответ AlexNek 02.10.17 16:22, Последний раз изменено 02.10.17 20:36 (Bigfoot)
Описания формулы я не нашел, пришлось взять что попроще.

В статье по ссылке исчерпывающее описание формулы.

именно так для теста и сделал

Это было ошибкой.

ак мне нужен вначале нужен график, который слева.

Я не знаю, что такое "график слева". Есть восходящая и нисходящая ветви. У Вас же часть от восходящей, а часть от нисходящей. В итоге - сумбур вместо музыки. ОБЕ ветви определены на одном и том же интервале значений напряженности магнитного поля, и вычислять значение намагниченности для обоих ветвей надо для каждой точки внутри -H_max...H_max. Принцип подходит прекрасно. Или мне надо обязательно запостить скришноты генерации графика в R или Origin? Проблему при использовании данной модельной функции я уже указал.

Но один скриншот ничего не даст, как и таблица. Устройство то для того и сделано чтобы снимать реальные данные.

Да, БЕЗУСЛОВНО, от цикла к циклу перемагничивания одни параметры кривой могут меняться. А другие - нет. Или меняться крайне незначительно по сравнению с первыми. Но для начала было бы неплохо выяснить, можно ли в принципе описать данные тем или иным образом. Хотя бы на одном примере.

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#31 
AlexNek патриот02.10.17 22:25
AlexNek
NEW 02.10.17 22:25 
в ответ Bigfoot 02.10.17 20:35
Я не знаю, что такое "график слева".

ответ 25 https://foren.germany.ru/showmessage.pl?Number=32518173&Bo...

Гистограмма "собирается" из двух сигналов типа как фигуры лиссажу. Один из них по Х, второй по У. Потому как именно так поступает из устройства.


В статье по ссылке исчерпывающее описание формулы.

Для меня там в формуле просто набор букв. Какое то описание ожидается подобно следующего

y=A*x+C,

где A - ...обычно 3, C - ....обычно 5, x - .. в диапазоне от 0 до 1, y - ....


Проблему при использовании данной модельной функции я уже указал.

проблема "усов" и "у=f(х)" делают ее применение невозможной. Хотя усы видимо можно "слепить"

#32 
Bigfoot коренной житель04.10.17 08:08
Bigfoot
NEW 04.10.17 08:08 
в ответ AlexNek 02.10.17 22:25
Гистограмма "собирается" из двух сигналов типа как фигуры лиссажу.

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

Для меня там в формуле просто набор букв.

Это очень понятные буквы. :) По ним можно легко догадаться, какие параметры реального сигнала можно померить и получить диапазоны варьирования параметров модельной функции. И да, "обычно" все бывает очень разным, поэтому конкретные цифры указывают лишь в тех случаях, когда параметр слабо меняется для разных объектов/условий измерения.

проблема "усов" и "у=f(х)" делают ее применение невозможной.

Моя телепатия не настолько мощна. Впрочем, проблемы "усов" особой нет - сшивку двух линий организовать несложно. Вот насчет y=f(x) будет посложнее. Я не настоящий сварщик математик, не знаю, возможна ли униформизация такой зависимости. По крайней мере, подозреваю, что решение задачи отыскания параметрического представления ("униформизация") будет нетревиальным. Впрочем, мне было бы интересно по этому поводу заслушать начальника транспортного цеха знающего человека.

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#33 
Bigfoot коренной житель04.10.17 16:33
Bigfoot
04.10.17 16:33 
в ответ AlexNek 30.09.17 23:07

За что я люблю R:

Пример UI в графике R


И все умещается в 11 строк кода (сократил, правда, пару строк, незначительно ухудшив читабельность - оставлять одну скобку на строке зажирно):

library(ggplot2)
library(manipulate)
hyst.loop <- function(nPts, nCos, H_c, H_s, M_s) {
  t <- (0:(nPts-1))/(nPts-1)*2*pi
  return(data.frame(H=H_s*cos(t)^nCos + H_c*sin(t), M=M_s*cos(t)))}
manipulate({ggplot(hyst.loop(200,n.cos,H.c,H.s,M.s),aes(x=H,y=M))+  
      geom_path()},
  H.c=slider(1e-3,20, label="H_c", initial = 1),
  H.s=slider(1e-3,20, label="H_s", initial = 3),
  M.s=slider(1e-3,20, label="M_s", initial = 5),
  n.cos=slider(1,11,step=2, initial = 1, label="Cos Exponent"))

Могу добавить графики для H и M по отдельности, не вопрос. Еще добавит строк 10-12. По времени сие занимает несколько минут. Но, ессесна, при знании возможностей R-пакетов "ggplot2" и "manipulate". улыб

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#34 
AlexNek патриот04.10.17 19:46
AlexNek
NEW 04.10.17 19:46 
в ответ Bigfoot 04.10.17 08:08
Это называется "параметрическое уравнение функции", а не "собирается из двух сигналов".

Это не телепатия, а проблема стыковки.

Нет у нас ни функций, ни уравнений, есть только сигналы представленные в цифровой форме в программе и в аналоговой на штекерах. Поэтому обычно разговор ведется с использованием "сигналов", а не "функций". У вас всё наоборот.

Например, нигде в последующих ссылках не заметил упоминания в тексте о параметрических уравнениях и как мне записать его здесь понятной математику формулой я не знаю. Вроде требуется большая фигурная скобка на две строки.

http://ens.tpu.ru/POSOBIE_FIS_KUSN/Кол�%B...

https://ru.wikipedia.org/wiki/Фигу�%...

http://dic.academic.ru/dic.nsf/enc_physics/998/Л�%9...

По мере возможности, буду стараться использовать математические понятия, хотя это может быть еще хуже. Вот я написал "у=f(х)", чтобы показать, что фунция не параметрическая. И казалось, что это будет ясно без всякой телепатии.


По крайней мере, подозреваю, что решение задачи отыскания параметрического представления ("униформизация") будет нетривиальным

Именно так я и "почувствовал", поэтому и написал, что с данной функцией лучше не связываться.

#35 
AlexNek патриот04.10.17 19:54
AlexNek
NEW 04.10.17 19:54 
в ответ Bigfoot 04.10.17 16:33
Но, ессесна, при знании возможностей R

вот именно поэтому я пользую C# а не R.

Зато данная функция довольно проста, только вот степени больше 3 уже не подходят. Усы то увеличиваются, но и форма искажается.

Может есть простая возможность удлинять "усы"?

#36 
Bigfoot коренной житель04.10.17 20:18
Bigfoot
NEW 04.10.17 20:18 
в ответ AlexNek 04.10.17 19:54

Я не бог весть какой программер - скажем, никогда глубоко не вникал в то, что так любят "настоящие" программисты, и никогда не имел дел с масштабными проектами, но время от времени все же приходится компиллить нечто, что будет встроено в уже имеющийся софт, управляющий производственным оборудованием. Т.е., определенная ответственность имеется, поэтому прежде чем программить численные методы, используя достаточно громоздкие процедуры (а-ля нелинейная аппроксимация или кластерный анализ), приходится сначала всесторонне "обкатывать" алгоритмы в программах типа R/Origin/... Это заметно экономит время - считаю, что владение скриптовым языком для обработки/визуализации данных весьма полезно для тех, кто имеет дело с численными методами, даже если они "настоящие программеры".


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

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#37 
AlexNek патриот04.10.17 21:35
AlexNek
NEW 04.10.17 21:35 
в ответ Bigfoot 04.10.17 20:18
поэтому прежде чем программить численные методы, используя достаточно громоздкие процедуры (а-ля нелинейная аппроксимация или кластерный анализ), приходится сначала всесторонне "обкатывать" алгоритмы в программах типа R/Origin/

вообще то то что я писал про сигналы к программисту большого отношения не имеет, программист бы имел дело с массивом данных. Я просто сейчас как бы на стыке сижу. Все же когда то давно был курс "Цифровая Обработка Сигналов". Что там было уже не помню, но страха особого нет влезать в подбные дебри. Но особых "математических" задач у нас весьма мало. А когда появляются то ищутся готовые решения. А если что, то проще написать отдельную прогу, с которой потом и стащить весь код.


"Простой" возможности удлиннять "усы" я не знаю.

Тогда огромнейшее спасибо за помощь и разъяснения. glassglassglass У меня была идея помножить на какую то фигню типа экспоненты.

Покажу завтра что есть и скажу, что если хотят лушче, пусть выделяют денюжку. То что есть как то никто и не заметил.

#38 
AlexNek патриот05.10.17 22:59
AlexNek
NEW 05.10.17 22:59 
в ответ Bigfoot 04.10.17 20:18

Сегодня попалось

Working with R in Visual Studio

#39 
Bigfoot коренной житель06.10.17 07:43
Bigfoot
NEW 06.10.17 07:43 
в ответ AlexNek 05.10.17 22:59

Спасибо, прикольно, не знал. Интересно будет сравнить с RStudio - там есть кой-какие моменты, которые меня не вполне устраивают. А VS все равно пользуюсь, хоть и для других целей. На выходных поиграюсь с этой "приблудой".

Oh gravity, thou art a heartless bitch! (c) Dr.Cooper
#40 
1 2 3 все