这是我的代码:
L=function(t){
n0=n2=1
n1=1.5151
A=function(theta){
n0/(sqrt(n1^2-n2^2*(sin(theta))^2))*n2^2*sin(theta)*cos(theta)/(n1^2-n0*sqrt(n1^2-n2^2*(sin(theta))^2))
}
B=function(theta){
-50/(cos(theta))^2*n1*n2*sin(theta)/(n1^2-n0*sqrt(n1^2-n2^2*(sin(theta))^2))
}
F=function(theta0){
exp(integrate(A(theta),lower=0,upper=theta0))
}
1/(F(t))*(50+integrate(F(theta)*B(theta),lower=0,upper=t))
}
我正在尝试评估积分中的积分。所以我在函数中放置了一些虚拟变量,显然你现在可以这样做了。任何人都可以帮我解决这个问题吗?谢谢。
答案 0 :(得分:1)
integrate
函数需要将函数作为其第一个参数,因此您只需传递A
或function(x) F(x)*B(x)
之类的函数。错误消息" A(theta)中的错误:对象' theta'找不到"应该是关于这个问题的暗示。
其次,integrate
函数返回类型integrate
的列表,因此您似乎需要该列表的value
元素。把它们放在一起:
L=function(t){
n0=n2=1
n1=1.5151
A=function(theta){
n0/(sqrt(n1^2-n2^2*(sin(theta))^2))*n2^2*sin(theta)*cos(theta)/(n1^2-n0*sqrt(n1^2-n2^2*(sin(theta))^2))
}
B=function(theta){
-50/(cos(theta))^2*n1*n2*sin(theta)/(n1^2-n0*sqrt(n1^2-n2^2*(sin(theta))^2))
}
F=function(theta0){
exp(integrate(A,lower=0,upper=theta0)$value)
}
1/(F(t))*(50+integrate(function(x) F(x)*B(x),lower=0,upper=t)$value)
}
L(1)
# [1] -19.33926
答案 1 :(得分:0)
这里有几个问题。首先exp(integrate(A(theta),lower=0,upper=theta0))
不起作用,因为integrate
会返回一个列表。您需要使用$value
访问整数的值。
其次,要集成的第一个参数必须是函数,而不是函数值,因此integrate(A(theta),lower=0,upper=theta0)
应该是integrate(A,lower=0,upper=theta0)
,并且与F*B
的积分相同。我做了这些改变
L=function(t){
n0=n2=1
n1=1.5151
B=function(theta){
-50/(cos(theta))^2*n1*n2*sin(theta)/(n1^2-n0*sqrt(n1^2-n2^2*(sin(theta))^2))
}
F=function(theta0){
A<-function(theta){
n0/(sqrt(n1^2-n2^2*(sin(theta))^2))*n2^2*sin(theta)*cos(theta)/(n1^2-n0*sqrt(n1^2-n2^2*(sin(theta))^2))
}
exp(integrate(A,lower=0,upper=theta0)$value)
}
1/(F(t))*(50+integrate(function(x) F(x)*B(x),lower=0,upper=t)$value)
}
哪个运行,例如
> L(.5)
[1] 33.4549
我确定你想要合理性检查答案。