Является ли мое уравнение слишком сложным для интеграции в Matlab?

У меня есть код, который должен оценить уравнение длины дуги ниже:

syms x

a = 10; b = 10; c = 10; d = 10;

fun = 4*a*x^3+3*b*x^2+2*c*x+d

int((1+(fun)^2)^.5)

но все, что возвращается, ниже:

ans = int(((40*x^3 + 30*x^2 + 20*x + 10)^2 + 1)^(1/2), x)

Почему Matlab не оценивает этот интеграл? Я добавил строку ниже, чтобы проверить, будет ли она вычислять int(x), и она вернула желаемый результат.


person user3789584    schedule 30.06.2014    source источник
comment
WolframAlpha не может интегрировать его   -  person chthonicdaemon    schedule 30.06.2014
comment
Не все функции могут быть интегрированы аналитически. Нельзя ли использовать численное приближение?   -  person mathematician1975    schedule 30.06.2014
comment
Возможно, вам лучше попробовать численное интегрирование. См. это.   -  person user2963623    schedule 30.06.2014
comment
Это похоже на эллиптический интеграл. Они не могут быть выражены с помощью элементарных функций, вообще   -  person Luis Mendo    schedule 30.06.2014
comment
Когда я пытаюсь решить его численно, он возвращает ошибку о том, что не может оценить X = 1/10 (или какое-то число), а x должен быть символическим. Я разместил ошибку в ответе ниже.   -  person user3789584    schedule 30.06.2014


Ответы (1)


Задачи, связанные с квадратными корнями функций, могут быть сложными для интегрирования. Я не уверен, существует ли интеграл или нет, но если вы посмотрите на интеграл полинома второго порядка, вы увидите, что он уже довольно беспорядок. То, что у вас было бы, если бы вы расширили функцию внутри квадратного корня, было бы многочленом девятого порядка. Если бы этот интеграл действительно существовал, его вычисление было бы слишком сложным.

В любом случае, если подумать, станет ли кто-нибудь действительно мудрее, найдя аналитическое решение этой проблемы? Если это не так, численного решения должно быть достаточно.

ИЗМЕНИТЬ

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

Вместо этого определите функцию как анонимную функцию

fun = @(x) sqrt((4*a*x.^3+3*b*x.^2+2*c*x+d).^2+1);

и используйте integral для оценки функции в некотором диапазоне, например

integral(fun,0,100);

для оценки функции в закрытом интервале [0,100].

person patrik    schedule 30.06.2014
comment
Многие люди стали бы намного мудрее, если бы смогли интегрировать такие интегралы. Это серьезная проблема в теории поля;) - person thewaywewalk; 30.06.2014
comment
Я согласен с вами, не имеет значения, знаю ли я аналитическое решение этого, но обязательно, чтобы я знал численное решение этого, оцененное, скажем, от 0 до 100. Когда я запускаю код int(fun,x1,x2) это Возврат: int (((- (3377699720527821*z^3)/1267650600228229401496703205376 + (46444337115725789*Z^2)/633847351602688 + 2*Z +890099999990825251602688 + 2*Z + 8749009999999909.109918516602688 + 2*Z + 8900999999918516602688 + 2*Z^2)/633847351602688 + 2*Z^2). -8749099087/225179948..-3248603388706911/1125899906842624) Ошибка при использовании sym/int (строка 123) Невозможно интегрировать относительно 'z == -3811553342128227/562949953421312'. Переменная интегрирования должна быть символьной переменной. - person user3789584; 30.06.2014
comment
Я не уверен, почему он присваивает значение Z, когда выше в коде я присвоил ему переменную sym (и это работает для интегралов первого порядка) - person user3789584; 30.06.2014
comment
@thewaywewalk Я не сомневаюсь в полезности знания интеграла для функций квадратного корня. Извините, если это так прозвучало. Я скорее имел в виду, что даже если бы было возможно найти решение этой функции, конкретный ответ был бы слишком длинным, чтобы быть каким-либо полезным. Так что не волнуйтесь, я не игнорирую полезность общего правила для такого рода функций :) - person patrik; 30.06.2014
comment
Извините, если я не понимаю, я новичок в использовании ручек. Я определяю fun = @(x) sqrt(blah), а затем вызываю интегральную команду int(fun,0,100)? - person user3789584; 30.06.2014
comment
Хорошо, я расширил свое редактирование, и это так, как вы думаете. Однако не используйте int. Вместо этого используйте integral. - person patrik; 30.06.2014
comment
Этот код, кажется, работает. Тем не менее, это дает мне значение, которое намного отличается от того, что я оцениваю. Я думаю, что это проблема для меня решить, хотя! Спасибо большое вы реально выручили! - person user3789584; 30.06.2014
comment
Ну 4*10*100^3 = 4e7 так что я предполагаю, что здесь не может быть слишком маленького значения. - person patrik; 01.07.2014