Перейти к содержанию
    

Какая математическая функция описывает следующую кривую?

Доброго здравия!

 

При отыскании решений для задачи Zero Dynamic Motion была найдена следующая зависимость между координатами (а1(ось х) и а2(ось у)) двух массовой модели объекта типа "циркуль".

 

image-0B1F_4C8886CC.jpg

 

Я смотрю на это семейство кривых и вроде узнаю кривую какой-то математической ф-ии.. Судя по приложенному рисунку кривая маштабируема коэф-том. Помогите, пожалуйста, найти ф-ию описывающую приведенные кривые.

 

С уважением,

Андрей

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

y = a * sin(b * x)

Тем более если циркуль

 

Спасибо - кривая похожа,но моё предположение о маштабируемости видимо было ошибочным) вот что получилось. изменяя a

 

image-740F_4C888D7F.jpg

 

меняя b

image-A330_4C888C96.jpg

m-file script

 

 

a = -0.5;
x = -pi/2:pi/100:pi/2;
y = zeros(1,size(x,2));
i = 0;
b = 1;
figure(1); hold on; grid on;
for a = -0.5:0.1:-0.1
    for x = -pi/2:pi/100:pi/2
        i = i+1;
    y(i) = a * sin(b * x);
    end
    i = 0;
    x = -pi/2:pi/100:pi/2;
    plot(x,y);
end
figure(2); hold on; grid on;
a = -0.5;
for b = 1:-0.1:0.1
    for x = -pi/2:pi/100:pi/2
        i = i+1;
    y(i) = a * sin(b * x);
    end
    i = 0;
    x = -pi/2:pi/100:pi/2;
    plot(x,y);
end

 

вот что получается при скалировании полученной зависимости

 

figure(3); hold on; grid on;
b = 1;
a = -0.5;
    for x = -pi/2:pi/100:pi/2
        i = i+1;
    y(i) = a * sin(b * x);
    end
    i = 0;
for sc = 1:-0.1:0    
    x = -pi/2:pi/100:pi/2; 
    plot(x*sc/4,y*sc);
end

image-52C3_4C889099.jpg

 

Осталось изменить наклон

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Куда проще представить зависимость, как x=f(y), т.е. поменять местами на графике оси x и у, чтобы эта зависимость хорошо подошла под полином 3-ей степени. Такой полином будет иметь вид:

x=ay3+by2+cy

свободного члена тут видимо не будет, т.к. кривая проходит через начало коородинат.

Да и из физических соображений очевидно, что сама исходная зависимость непериодична, а потому у нее нет той тенденции "загручиваться" на концах, которая присуща функции синуса. У исходной зависимости иная тенденция - ассимптотически приближаться к горизонтали.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эта штука больше на арктангенс похожа:

atan(x)

 

Или на гиперболический тангенс:

 

tanh(x)

 

Как будто к асимптотам стремится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эта штука больше на арктангенс похожа:

Ага :). Вот только далеко не всегда удобно использовать модель на тригонометрических функциях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Куда проще представить зависимость, как x=f(y), т.е. поменять местами на графике оси x и у, чтобы эта зависимость хорошо подошла под полином 3-ей степени. Такой полином будет иметь вид:

x=ay3+by2+cy

свободного члена тут видимо не будет, т.к. кривая проходит через начало коородинат.

Да и из физических соображений очевидно, что сама исходная зависимость непериодична, а потому у нее нет той тенденции "загручиваться" на концах, которая присуща функции синуса. У исходной зависимости иная тенденция - ассимптотически приближаться к горизонтали.

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

 

Да я согласен с вами, что форма кривой очень подходит под полином 3го порядка...и это дейстительно, наверно, наилучший вариант...

Спасибо :rolleyes:

 

Эта штука больше на арктангенс похожа:

atan(x)

 

Или на гиперболический тангенс:

 

tanh(x)

 

Как будто к асимптотам стремится.

 

:biggrin: очень похожа

 

Ага :). Вот только далеко не всегда удобно использовать модель на тригонометрических функциях.

Использовать буду как ф-ию для линеаризации объекта, поэтому очень важно чтобы она инвертировалась

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу обратить внимание, что полином

x=ay3+by2+cy

имеет 3 степени свободы - коэффициенты a,b,c,

тогда как функции

a*atan(b*x) или a*tanh(b*x)

только две.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу обратить внимание, что полином

x=ay3+by2+cy

имеет 3 степени свободы - коэффициенты a,b,c,

тогда как функции

a*atan(b*x) или a*tanh(b*x)

только две.

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

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

 

Сейчас проверим мои экспериметальные точки под гиперболический тангенс....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу обратить внимание, что полином

x=ay3+by2+cy

имеет 3 степени свободы - коэффициенты a,b,c,

тогда как функции

a*atan(b*x) или a*tanh(b*x)

только две.

Хочется возразить, что квадратичного члена тут нет. И тоже две степени свободы.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочется возразить, что квадратичного члена тут нет. И тоже две степени свободы.

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

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

a*atan(b*x) или a*tanh(b*x),

поскольку растяги по осям перестанут быть независимыми.

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

Я полагаю, что тогда шансы 0xFF натянуть эту функцию на свои точки устремятся к нулю. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот что получилось

 

Красные - это экспеоиментальные кривые

Черная и синяя получены так

 figure(8); hold on; grid on
    a = -0.5054;
    x = -pi/8:pi/8/100:pi/8;
    b = pi/(pi/8);

    y =a*tanh(-1/a*b*x);
    plot(x,y,'b');
    i = 13;
    plot(ZeroDynamicPlot.object(i).states(1,:),ZeroDynamicPlot.object(i).states(3,:),'r');
    
    
    a = -0.1669;
    x = -pi/8:pi/8/100:pi/8;
    b = pi/(pi/8);

    y =a*tanh(-1/a*b*x);
    plot(x,y,'k');
    i = 5;
    plot(ZeroDynamicPlot.object(i).states(1,:),ZeroDynamicPlot.object(i).states(3,:),'r')

 

image-D506_4C88B786.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот что получилось

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

 

А теперь полином испытайте!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при небольшой корректировки коэф b удалсь добиться вот такого результата

 

b = (pi-0.5)/(pi/8);

 

image-6DD7_4C88B92D.jpg

 

Похоже, что ф-ия определена. Всем огромное спасибо.

 

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

 

А теперь полином испытайте!

 

Полином я обязательно проверю, т.к. для лианеризации он мне больше подходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...