Решение интеграла в Matlab, содержащего неизвестные переменные?

Задача состоит в том, чтобы создать конусную шляпу в Matlab путем создания развертываемой поверхности численными методами. Я сделал 3 части. 2. Мой вопрос касается части 3, где мне нужно вычислить наименьшую прямоугольную поверхность бумаги, которая может содержать шляпу. И мне нужно посчитать материальные отходы бумаги.

ВЫ МОЖЕТЕ пропустить длинный фон и перейти к последнему абзацу


ФОН:

Шляпа с конусом может быть создана с помощью скошенного конуса с вершиной, расположенной в точке (a; 0; b), и с основанием в форме круга.

x = Rcos u, 
y = Rsin u
z = 0
0<_ u >_2pi

с известными значениями для R, a и b

Данные различия

epsilon и eta ('n') - значения x и y кривых, когда параметр u изменяется от 0 до 2pi, а alpha - угол наклона кривой в точке (epsilon, eta). Начальные значения в A: u=0, alhpa=0, epsilon=0, eta=0.

Кривая заканчивается в точке B, где параметр u достиг значения 2pi.

1. Я построил кривую с помощью Рунге-Кутта-4 и показал, что наконечник расположен в P = (0, sqrt(b^2 + (R-alpha)^2))

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

3. Хорошо, теперь мне нужно рассчитать наименьшую прямоугольную поверхность бумаги, которая может содержать шляпу, и размер бумажных отходов. Если конечный угол альфа (2pi) в шаблоне равен пи или пи / 2, отходы материала будут меньше. Теперь я получаю значения для R & alpha (R = 7,8 и alpha = 5,5), и моя задача состоит в том, чтобы вычислить, какую высоту b коническая шляпа получит с критериями конструкции alpha (2pi) = pi (а затем для alpha (2pi) = pi / 2 для шляпы другого размера).

Итак, я взял первое уравнение выше (выражение, содержащее b) и переписал его как интеграл: Интеграл


НА ВОПРОС

Я понимаю, что мне нужно решить этот интеграл в Matlab, а затем выбрать b, чтобы alpha (2pi) -pi = 0 (используя указанные выше критерии). Приведены значения R и альфа, а t определено как интервал ранее (в части 1, где я сделал RK4). Итак, когда интеграл решен, я получаю f (b) = 0, который я должен решить, например, с помощью метода секущей? Но я не могу решить интеграл с помощью функции matlab 'integ' .. потому что у меня, конечно, нет значения b, это то, что я ищу. Итак, как я собираюсь это сделать? Есть ли в Matlab функция, которую можно использовать?


person F88    schedule 24.04.2017    source источник


Ответы (1)


Вы можете использовать дифференциальное уравнение для alpha и проверять разные значения для b, пока не будет выполнено условие alpha(2pi)=pi. Например:

b0=1 %initial seed
b=fsolve(@find_b,b0) %use the function fsolve or any of your choice

Решаемая функция:

function[obj]=find_b(b)
    alpha0=0 %initual valur for alpha at u=0
    uspan=[0 2*pi] %range for u
    %Use the internal ode solver or any of your choice
    [u,alpha] = ode45(@(u,alpha) integrate_alpha(u,alpha,b), uspan, alpha0);

    alpha_final=alpha(end) %Get the last value for alpha (at u=2*pi)

    obj=alpha_final-pi %Function to be solved
end

А интеграцию можно сделать так:

function[dalpha]=integrate_alpha(u,alpha,b)

      a=1; %you can use the right value here
      R=1; %you can use the right value here

      dalpha=(R-a*cos(u))/sqrt(b^2+(R-a*cos(u))^2); 

end
person Alessandro Trigilio    schedule 25.04.2017