2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 19:40 


05/09/16
12064
Niemand
Если у вас в экселе в ячейке A1 будет значение $x$, то формула
Код:
=(2*A1*(1+A1*A1*(0,1049934947+A1*A1*(0,0424060604+A1*A1*(0,0072644182+A1*A1*(0,0005064034+A1*A1*(0,0001789971))))))/(1+A1*A1*(0,7715471019+A1*A1*(0,2909738639+A1*A1*(0,0694555761+A1*A1*(0,0140005442+A1*A1*(0,0008327945+2*A1*A1*0,0001789971)))))))/(КОРЕНЬПИ(1)*EXP(-A1*A1))

Будет считать быстро и даст неплохое приближение $erfi(x)$
:mrgreen:
Насколько неплохое?
Относительная ошибка, в процентах, т.е. $err(x)=\left(1-\dfrac{erfi(x)}{excel(x)}\right)*100%$
Код:
x=1, err=-0,02%
x=2, err=-0,01%
x=3, err=-0,02%
x=4, err=-0,05%
x=5, err=-0,04%
x=6, err=0,08%
x=7, err=0,10%
x=8, err=0,06%
x=9, err=0,02%
x=10, err=-0,01%

А, или я знак перепутал. Ну неважно, везде меншьне одной десятой процента.
Дальше там числа большие, я не проверял :mrgreen:

Собсно сами значения, выдаваемые екселем:
Код:
x   erfi(x)
1   1,650429105
2   18,56482201
3   1629,998461
4   1296966,204
5   8298304995
6   4,11272E+14
7   1,55347E+20
8   4,43242E+26
9   9,50076E+33
10  1,52431E+42

Ну то есть на 4-5 знаков можете рассчитывать.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 19:56 
Аватара пользователя


12/02/23
65
wrest
Я состряпал функцию пользователя для Excel VBA. она считает быстро и дает погрешность 0,000001 (при желании можно еще лучше; ограничивает только переполнение по переменной у):
Код:
Function Erfi(x As Single) As Single        ' Интеграл от 0 до х от функции Exp(x^2)
Dim n As Byte, S As Single, Glied As Single, y As Double
y = x: S = x: n = 0
Do
        n = n + 1
        y = y * x ^ 2
        Glied = y / ((2 * n + 1) * Application.WorksheetFunction.Fact(n))       ' (n!)
        S = S + Glied
Loop Until Abs(Glied) < 0.000001
Erfi = S
End Function

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:03 


05/09/16
12064
Niemand в сообщении #1594851 писал(а):
Я состряпал функцию пользователя для Excel VBA. она считает быстро и дает погрешность 0,000001

Можно канеш и функцию, я просто исходил из э... универсальности и простоты :)

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:28 
Аватара пользователя


12/02/23
65
Проверял. Сопоставление моей программы с интегралом $\int\limits_{0}^{x}\exp(x^2)dx$ (посчитано в ГеоГебре):
X.....Erfi (X).............GeoGebra........Ошибка (относительная)
1.....1,462651732.....1,462651746.......9,84E-09
2......16,45262762....16,45262777.......8,95E-09
3......1444,545123....1444,545123.......1,46E-10
4......1149400,635....1149400,635.......3,00E-13
5......7354153748
6......3,64483E+14
7......1,37674E+20
7,5....1,80686E+23
Отсюда видно также, что ваша формула дает плохие результаты (сравните ваши числа с ГеоГеброй).
К сожалению, ГеоГебра считает только до х=4, дальше числа слишком большие для нее.
Моя программа тоже приводит к переполнению (из-за внутренней переменной у) при х>7,7. М.б. это ограничение можно обойти, если написать программу похитрее, но мне лень: для моей задачи достаточно того, что есть.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:35 


05/09/16
12064
Niemand в сообщении #1594774 писал(а):
Excel - очень гибкий и мощный программируемый калькулятор, не требующий выдающихся способностей в программировании; он позволяет решать любые задачи (особенно если владеть VBA), например, решать алгебраические (в том числе трансцендентные) уравнения, численное дифференцирование и интегрирование, дифуры, векторные и матричные операции, автоматическое построение графиков, регрессионный анализ и т.д.

Ему только не хватает длинной арифметики и за этим надо следить, а так-то да, всё можно написать или дописать.
Ну или, как в данном случае, не хватает универсальности встроенных функций.

-- 22.05.2023, 20:36 --

Niemand в сообщении #1594862 писал(а):
Отсюда видно также, что ваша формула дает плохие результаты (сравните ваши числа с ГеоГеброй).

Ну ессно, я ж привёл ошибку. 4-5 знаков верные, остальные нет.

-- 22.05.2023, 20:40 --

Niemand в сообщении #1594862 писал(а):
Моя программа тоже приводит к переполнению

Ну это дело такое, да. Кстати формула считает до 10, дальше я не смотрел.
Я то сам пользуюсь каклькулятором с длинной арифметикой, он от таких чисел не переполняется :mrgreen:
Например
? print(erfi(10^6))
1.0075177701699419421160662091100491410 E434294481897

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:41 
Аватара пользователя


12/02/23
65
Цитата:
Ну ессно, я ж привёл ошибку. 4-5 знаков верные, остальные нет.
Нет, у вас ошибка уже во второй значащей цифре.
Сравните:
Ваше число......ГеоГебра
1,650429..........1,462651
18,56482..........16,45262
1629,998..........1444,545
и т.д.
А "длинная арифметика" для практических задач излишня.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 20:45 


05/09/16
12064
Niemand в сообщении #1594866 писал(а):
Сравните:
Ваше число......ГеоГебра

У меня же формула считает $erfi(x)$, а вы интеграл от $e^{x^2}$ считаете.

Они связаны так: $erfi(x)&=\dfrac {2}{\sqrt {\pi }}\int \limits_{0}^{x}e^{t^{2}}dt$

Вот в эти $\dfrac {2}{\sqrt {\pi }}$ раз и различие :wink:
Хотя, впрочем, в Википедиях пишут что некоторые считают $erf(x)$ (ну и следом $erfi(x)$ )без множителя $\dfrac {2}{\sqrt {\pi }}$, вы наверное из них :)

-- 22.05.2023, 20:51 --

Niemand в сообщении #1594866 писал(а):
А "длинная арифметика" для практических задач излишня.

Ну... всяко бывает :)

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение22.05.2023, 22:53 
Аватара пользователя


12/02/23
65
ОК, извиняюсь за недоразумение.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение23.05.2023, 00:23 
Аватара пользователя


12/02/23
65
Доработал функцию. Теперь она считает Erfi(x) вплоть до x=26,7. Ограничение из-за величины результата: формат double позволяет числа не больше $1,797\cdot10^{308}$

Код:
Function Erfi(x As Double) As Double        ' Интеграл от 0 до х от функции Exp(x^2)
Dim n As Integer, S As Double, Member As Double, Faktor As Double
n = 0: S = x: Member = x
Do
        Faktor = (2 * n + 1) / (2 * n + 3): Faktor = Faktor * x ^ 2 / (n + 1)
        Member = Member * Faktor
        S = S + Member
        n = n + 1
Loop Until Abs(Member) < 0.000001
Erfi = S
End Function

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение23.05.2023, 14:16 
Заслуженный участник


03/01/09
1701
москва
С помощью контурного интегрирования получается:$$\int \limits _0^xe^{t^2}dt=\dfrac {2e^{x^2}}x\int \limits _0^{\infty }e^{-t^2}t\sin ^2(xt)dt$$По этой формуле проще оценить относительную погрешность вычисления.

 Профиль  
                  
 
 Re: Помогите решить дифур
Сообщение23.05.2023, 15:28 


05/09/16
12064
mihiv
В википедии пишут, что оценивают по https://en.wikipedia.org/wiki/Dawson_function
Собсна формула для экселя что я приводил выше, это аппроксимация функции Доусона дробно-рациональной функцией.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group