我正在使用以下功能:
f(x)= a *(1 + cos(3 * x))其中a是常数/参数。
y(x)= exp(-b * f(x))其中b是另一个常数。
我需要计算定积分积分(0,2pi)y(x)dx。
我正在尝试为我们的研究小组实施另一份研究论文。我知道输出必须包含第一类修改的bessel函数,它们是'a'的函数。 Matlab只是拒绝评估这个积分。
以下是我的代码(Matlab):
syms x;
syms a;
syms b;
f_x = a*(1+cos(3*x));
y_x = exp(-b*f_x);
z_x = int(y_x, x, 0, 2*pi)
输出:
Warning: Explicit integral could not be found.
z_x =
int(1/exp(a*b*(cos(3*x) + 1)), x = 0..2*pi)
请求您协助解决此问题!我确信积分在很多地方都包含像I(a)等bessel函数。我需要在这里做任何预处理吗?我迫切需要这个解决方案。我很欣赏能够在正确的方向上找到答案的快速反应。
答案 0 :(得分:0)
解决!它在mathematica中工作,在Matlab中失败。
答案 1 :(得分:0)
启动R2017b,这有效。使用int。
Sub CompareAndReplaceData()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim lr As Long, i As Long
Dim Rng As Range, Cell As Range
Dim x, dict
Application.ScreenUpdating = False
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
lr = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Set Rng = ws1.Range("A2:A" & lr)
x = ws2.Range("A1").CurrentRegion.Value
Set dict = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(x, 1)
dict.Item(x(i, 1)) = x(i, 2)
Next i
For Each Cell In Rng
If dict.exists(Cell.Value) Then
ws1.Cells(Cell.Row, "D") = dict.Item(Cell.Value)
End If
Next Cell
Application.ScreenUpdating = True
End Sub